You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by hi...@apache.org on 2007/05/19 21:22:03 UTC

svn commit: r539793 [4/4] - in /harmony/enhanced/classlib/trunk: depends/build/ make/ modules/archive/ modules/archive/src/main/native/archive/shared/ modules/archive/src/main/native/archive/unix/ modules/archive/src/main/native/archive/windows/ module...

Added: harmony/enhanced/classlib/trunk/modules/luni/src/main/native/include/shared/hyzip.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/include/shared/hyzip.h?view=auto&rev=539793
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/native/include/shared/hyzip.h (added)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/native/include/shared/hyzip.h Sat May 19 12:22:00 2007
@@ -0,0 +1,129 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+#ifndef hyzip_h
+#define hyzip_h
+
+#include "hycomp.h"
+#include "vmi.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+	
+typedef struct HyZipCachePool HyZipCachePool;
+	
+#define ZIP_INTERNAL_MAX  80
+#define ZIP_CM_Reduced1  2
+#define ZIP_Unknown  0
+#define ZIP_GZIP  2
+#define ZIP_ERR_OUT_OF_MEMORY  -3
+#define ZIP_ERR_FILE_CORRUPT  -6
+#define ZIP_ERR_INTERNAL_ERROR  -11
+#define ZIP_CM_Imploded  6
+#define ZIP_CM_Reduced4  5
+#define ZIP_CM_Shrunk  1
+#define ZIP_CM_Reduced2  3
+#define ZIP_ERR_FILE_READ_ERROR  -1
+#define ZIP_CentralHeader  0x2014B50
+#define ZIP_ERR_FILE_CLOSE_ERROR  -10
+#define ZIP_ERR_BUFFER_TOO_SMALL  -7
+#define ZIP_CM_Reduced3  4
+#define ZIP_CM_Deflated  8
+#define ZIP_LocalHeader  0x4034B50
+#define ZIP_CM_Tokenized  7
+#define ZIP_PKZIP  1
+#define ZIP_CM_Stored  0
+#define ZIP_ERR_UNSUPPORTED_FILE_TYPE  -5
+#define ZIP_ERR_NO_MORE_ENTRIES  -2
+#define ZIP_CentralEnd  0x6054B50
+#define ZIP_ERR_FILE_OPEN_ERROR  -9
+#define ZIP_ERR_UNKNOWN_FILE_TYPE  -4
+#define ZIP_ERR_ENTRY_NOT_FOUND  -8
+#define ZIP_DataDescriptor  0x8074B50
+
+typedef struct HyZipEntry
+{
+  U_8 *data;
+  U_8 *filename;
+  U_8 *extraField;
+  U_8 *fileComment;
+  I_32 dataPointer;
+  I_32 filenamePointer;
+  I_32 extraFieldPointer;
+  I_32 fileCommentPointer;
+  U_32 compressedSize;
+  U_32 uncompressedSize;
+  U_32 crc32;
+  U_16 filenameLength;
+  U_16 extraFieldLength;
+  U_16 fileCommentLength;
+  U_16 internalAttributes;
+  U_16 versionCreated;
+  U_16 versionNeeded;
+  U_16 flags;
+  U_16 compressionMethod;
+  U_16 lastModTime;
+  U_16 lastModDate;
+  U_8 internalFilename[80];
+} HyZipEntry;
+
+typedef struct HyZipFile
+{
+  U_8 *filename;
+  void *cache;
+  void *cachePool;
+  I_32 fd;
+  I_32 pointer;
+  U_8 internalFilename[80];
+  U_8 type;
+  char _hypadding0065[3];  /* 3 bytes of automatic padding */
+} HyZipFile;
+
+typedef struct HyZipFunctionTable {
+	I_32 (PVMCALL zip_getZipEntryData) (VMInterface * vmi, HyZipFile * zipFile, HyZipEntry * entry, U_8 * buffer, U_32 bufferSize) ;
+	I_32 (PVMCALL zip_getZipEntryFromOffset) (VMInterface * vmi, HyZipFile * zipFile, HyZipEntry * entry, IDATA offset) ;
+	I_32 (PVMCALL zip_establishCache) (VMInterface * vmi, HyZipFile * zipFile) ;
+	void (PVMCALL zip_resetZipFile) (VMInterface * vmi, HyZipFile * zipFile, IDATA * nextEntryPointer) ;
+	I_32 (PVMCALL zip_getNextZipEntry) (VMInterface * vmi, HyZipFile * zipFile, HyZipEntry * zipEntry, IDATA * nextEntryPointer) ;
+	I_32 (PVMCALL zip_getZipEntry) (VMInterface * vmi, HyZipFile * zipFile, HyZipEntry * entry, const char *filename, BOOLEAN findDirectory) ;
+	I_32 (PVMCALL zip_getZipEntryExtraField) (VMInterface * vmi, HyZipFile * zipFile, HyZipEntry * entry, U_8 * buffer, U_32 bufferSize) ;
+	void (PVMCALL zip_initZipEntry) (VMInterface * vmi, HyZipEntry * entry) ;
+	I_32 (PVMCALL zip_openZipFile) (VMInterface * vmi, char *filename, HyZipFile * zipFile) ;
+	void (PVMCALL zip_freeZipEntry) (VMInterface * vmi, HyZipEntry * entry) ;
+	I_32 (PVMCALL zip_closeZipFile) (VMInterface * vmi, HyZipFile * zipFile) ;
+	I_32 (PVMCALL zip_getZipEntryComment) (VMInterface * vmi, HyZipFile * zipFile, HyZipEntry * entry, U_8 * buffer, U_32 bufferSize) ;
+
+  	UDATA (PVMCALL zipCache_findElement) (void * zipCache, const char *elementName, BOOLEAN searchDirList) ;
+	void (PVMCALL zipCache_kill) (void * zipCache) ;
+	IDATA (PVMCALL zipCache_enumGetDirName) (void *handle, char *nameBuf, UDATA nameBufSize) ;
+	struct HyZipCache *(PVMCALL zipCache_new) (VMInterface * vmi, char *zipName, IDATA zipNameLength) ;
+	IDATA (PVMCALL zipCache_enumNew) (void * zipCache, char *directoryName, void **handle) ;
+	IDATA (PVMCALL zipCache_enumElement) (void *handle, char *nameBuf, UDATA nameBufSize, UDATA * offset) ;
+	void (PVMCALL zipCache_enumKill) (void *handle) ;
+	BOOLEAN (PVMCALL zipCache_addElement) (void * zipCache, char *elementName, UDATA elementOffset) ;
+	
+	void *(PVMCALL zip_zalloc) (void *opaque, U_32 items, U_32 size) ;
+	void (PVMCALL zip_zfree) (void *opaque, void *address) ;
+	
+	void *reserved;
+} HyZipFunctionTable;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif     /* hyzip_h */

Propchange: harmony/enhanced/classlib/trunk/modules/luni/src/main/native/include/shared/hyzip.h
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/native/include/shared/vmi.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/include/shared/vmi.h?view=diff&rev=539793&r1=539792&r2=539793
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/native/include/shared/vmi.h (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/native/include/shared/vmi.h Sat May 19 12:22:00 2007
@@ -32,7 +32,9 @@
 #include "hyport.h"
 #include "hyvmls.h"
 
+#ifndef HY_ZIP_API
 #include "zipsup.h"
+#endif /* ! HY_ZIP_API */
 /**
  * @enum vmiError
  * Enumeration of all possible return codes from VM interface functions
@@ -58,6 +60,9 @@
   {
     VMI_VERSION_UNKNOWN = 0x00000000,     /**< Unknown VMInterface version */
     VMI_VERSION_1_0 = 0x00010000,         /**< VMInterface version 1.0 */
+#ifdef HY_ZIP_API
+    VMI_VERSION_2_0 = 0x00020000,         /**< VMInterface version 2.0 */
+#endif /* HY_ZIP_API */
     vmiVersionEnsureWideEnum = 0x1000000  /* ensure 4-byte enum */
   } vmiVersion;
 
@@ -70,6 +75,9 @@
   typedef void (JNICALL * vmiSystemPropertyIterator) (char *key, char *value,
                                                       void *userData);
 
+#ifdef HY_ZIP_API
+  struct HyZipFunctionTable;
+#endif /* HY_ZIP_API */
   struct VMInterface_;
   struct VMInterfaceFunctions_;
 
@@ -96,8 +104,12 @@
     JavaVM *(JNICALL * GetJavaVM) (VMInterface * vmi);
     HyPortLibrary *(JNICALL * GetPortLibrary) (VMInterface * vmi);
     HyVMLSFunctionTable *(JNICALL * GetVMLSFunctions) (VMInterface * vmi);
+#ifndef HY_ZIP_API
 
     HyZipCachePool *(JNICALL * GetZipCachePool) (VMInterface * vmi);
+#else /* HY_ZIP_API */
+    struct HyZipFunctionTable *(JNICALL * GetZipFunctions) (VMInterface * vmi);
+#endif /* HY_ZIP_API */
     JavaVMInitArgs *(JNICALL * GetInitArgs) (VMInterface * vmi);
     vmiError (JNICALL * GetSystemProperty) (VMInterface * vmi, char *key,
       char **valuePtr);
@@ -188,17 +200,35 @@
   HyVMLSFunctionTable *JNICALL GetVMLSFunctions (VMInterface * vmi);
 
 /**
+#ifndef HY_ZIP_API
  * @fn VMInterfaceFunctions_::GetZipCachePool(VMInterface * vmi)
  * Return a pointer to the HyZipCachePool structure used by the VM. It is the
  * responsibility of the vm to allocate the pool using zipCachePool_new().
+#else
+   * @fn VMInterfaceFunctions_::GetZipFunctions
+   * Return a pointer to a HyZipFunctionTable. This is a table of functions for managing zip files.
+#endif
  *
+#ifndef HY_ZIP_API
  * @code HyZipCachePool* JNICALL GetZipCachePool(VMInterface* vmi); @endcode
+#else
+   * @code HyZipFunctionTable* JNICALL GetZipFunctions(VMInterface* vmi); @endcode
+#endif
  * 
  * @param[in] vmi  The VM interface pointer
  *
+#ifndef HY_ZIP_API
  * @return a HyZipCachePool pointer
+#else
+   * @return a HyZipFunctionTable pointer
+#endif
  */
+#ifndef HY_ZIP_API
   HyZipCachePool *JNICALL GetZipCachePool (VMInterface * vmi);
+#else /* HY_ZIP_API */
+  struct HyZipFunctionTable* JNICALL 
+  GetZipFunctions(VMInterface* vmi);
+#endif /* HY_ZIP_API */
 
 /**
  * @fn VMInterfaceFunctions_::GetInitArgs(VMInterface * vmi)

Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/luniglob.c
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/luniglob.c?view=diff&rev=539793&r1=539792&r2=539793
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/luniglob.c (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/luniglob.c Sat May 19 12:22:00 2007
@@ -55,7 +55,7 @@
   char *propVal = NULL;
   vmiError propRes;
 
-#if defined(LINUX)
+#if defined(LINUX) && !defined(HY_NO_SIG)
   /* all UNIX platforms */
   HySignalHandler previousGpHandler;
   HySigSet (SIGPIPE, SIG_IGN, previousGpHandler);

Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/unix/makefile
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/unix/makefile?view=diff&rev=539793&r1=539792&r2=539793
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/unix/makefile (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/unix/makefile Sat May 19 12:22:00 2007
@@ -36,9 +36,12 @@
 	OSMemory.o OSMemoryLinux32.o $(SHAREDSUB)OSNetworkSystem.o \
 	OSNetworkSystemLinux.o hyenv.o
 
-MDLLIBFILES += \
-	$(LIBPATH)libhyzip.a $(DLLPATH)libhyzlib$(HY_LINKLIB_SUFFIX) \
-	$(LIBPATH)libhypool.a $(LIBPATH)libhyfdlibm.a $(LIBPATH)libvmi$(HY_LINKLIB_SUFFIX)
+ifneq ($(HY_ZIP_API),true)
+MDLLIBFILES += $(LIBPATH)libhyzip.a $(DLLPATH)libhyzlib$(HY_LINKLIB_SUFFIX)
+endif
+
+MDLLIBFILES += $(LIBPATH)libhypool.a $(LIBPATH)libhyfdlibm.a \
+	$(LIBPATH)libvmi$(HY_LINKLIB_SUFFIX)
 
 DLLNAME = ../libhyluni$(HY_SHLIB_SUFFIX)
 EXPNAME = HYLUNI_0.1

Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/windows/makefile
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/windows/makefile?view=diff&rev=539793&r1=539792&r2=539793
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/windows/makefile (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/windows/makefile Sat May 19 12:22:00 2007
@@ -43,9 +43,13 @@
 
 SYSLIBFILES = ws2_32.lib Iphlpapi.lib Mswsock.lib
 
+!IF "$(HY_ZIP_API)" != "true"
 MDLLIBFILES = $(MDLLIBFILES) \
-  $(LIBPATH)hyzip$(HY_LINKLIB_SUFFIX) $(LIBPATH)hyzlib$(HY_LINKLIB_SUFFIX) \
-  $(LIBPATH)hypool$(HY_LINKLIB_SUFFIX) $(LIBPATH)hyfdlibm$(HY_LINKLIB_SUFFIX) $(LIBPATH)vmi$(HY_LINKLIB_SUFFIX)
+  $(LIBPATH)hyzip$(HY_LINKLIB_SUFFIX) $(LIBPATH)hyzlib$(HY_LINKLIB_SUFFIX)
+!ENDIF
+
+MDLLIBFILES = $(MDLLIBFILES) $(LIBPATH)hypool$(HY_LINKLIB_SUFFIX) \
+  $(LIBPATH)hyfdlibm$(HY_LINKLIB_SUFFIX) $(LIBPATH)vmi$(HY_LINKLIB_SUFFIX)
 
 DLLBASE=0x13200000
 COMMENT=/comment:"LUNI component native code. (c) Copyright 1991, 2005 The Apache Software Foundation or its licensors, as applicable."

Modified: harmony/enhanced/classlib/trunk/modules/misc/src/main/native/accessors/unix/makefile
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/misc/src/main/native/accessors/unix/makefile?view=diff&rev=539793&r1=539792&r2=539793
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/misc/src/main/native/accessors/unix/makefile (original)
+++ harmony/enhanced/classlib/trunk/modules/misc/src/main/native/accessors/unix/makefile Sat May 19 12:22:00 2007
@@ -25,10 +25,12 @@
   $(SHAREDSUB)org_apache_harmony_misc_accessors_ObjectAccessorImpl.o \
   $(SHAREDSUB)org_apache_harmony_misc_accessors_StringAccessorImpl.o
 
+ifneq ($(HY_ZIP_API),true)
+MDLLIBFILES += $(LIBPATH)libhyzip.a $(DLLPATH)libhyzlib$(HY_LINKLIB_SUFFIX)
+endif
 
-MDLLIBFILES += \
-	$(LIBPATH)libhyzip.a $(DLLPATH)libhyzlib$(HY_LINKLIB_SUFFIX) \
-	$(LIBPATH)libhypool.a $(LIBPATH)libhyfdlibm.a $(LIBPATH)libvmi$(HY_LINKLIB_SUFFIX)
+MDLLIBFILES += $(LIBPATH)libhypool.a $(LIBPATH)libhyfdlibm.a \
+	$(LIBPATH)libvmi$(HY_LINKLIB_SUFFIX)
 
 DLLNAME=../libaccessors$(HY_SHLIB_SUFFIX)
 EXPNAME=HYMISC_0.1

Modified: harmony/enhanced/classlib/trunk/modules/nio/src/main/native/nio/unix/makefile
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/nio/src/main/native/nio/unix/makefile?view=diff&rev=539793&r1=539792&r2=539793
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/nio/src/main/native/nio/unix/makefile (original)
+++ harmony/enhanced/classlib/trunk/modules/nio/src/main/native/nio/unix/makefile Sat May 19 12:22:00 2007
@@ -24,8 +24,12 @@
 BUILDFILES = \
 	../shared/DirectBufferUtil.o ../shared/AddressUtil.o 
 
+ifneq ($(HY_ZIP_API),true)
+MDLLIBFILES += $(LIBPATH)libhyzip.a 
+endif
+
 MDLLIBFILES = \
-	$(LIBPATH)libhycommon.a $(LIBPATH)libhyzip.a \
+	$(LIBPATH)libhycommon.a \
 	$(LIBPATH)libhypool.a $(LIBPATH)libhyfdlibm.a
 
 DLLNAME = ../libhynio$(HY_SHLIB_SUFFIX)

Modified: harmony/enhanced/classlib/trunk/modules/nio/src/main/native/nio/windows/makefile
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/nio/src/main/native/nio/windows/makefile?view=diff&rev=539793&r1=539792&r2=539793
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/nio/src/main/native/nio/windows/makefile (original)
+++ harmony/enhanced/classlib/trunk/modules/nio/src/main/native/nio/windows/makefile Sat May 19 12:22:00 2007
@@ -31,11 +31,15 @@
 
 SYSLIBFILES = ws2_32.lib Iphlpapi.lib
 
+!IF "$(HY_ZIP_API)" != "true"
 MDLLIBFILES = \
-  $(LIBPATH)hycommon$(HY_LINKLIB_SUFFIX) $(LIBPATH)hyzip$(HY_LINKLIB_SUFFIX) $(LIBPATH)hyzlib$(HY_LINKLIB_SUFFIX) \
-  $(LIBPATH)hypool$(HY_LINKLIB_SUFFIX) $(LIBPATH)hyfdlibm$(HY_LINKLIB_SUFFIX) $(LIBPATH)hythr$(HY_LINKLIB_SUFFIX) \
-  $(LIBPATH)vmi$(HY_LINKLIB_SUFFIX)
-  
+  $(LIBPATH)hyzip$(HY_LINKLIB_SUFFIX) $(LIBPATH)hyzlib$(HY_LINKLIB_SUFFIX)
+!ENDIF
+
+MDLLIBFILES = $(LIBPATH)hycommon$(HY_LINKLIB_SUFFIX) \
+  $(LIBPATH)hypool$(HY_LINKLIB_SUFFIX) $(LIBPATH)hyfdlibm$(HY_LINKLIB_SUFFIX) \
+  $(LIBPATH)hythr$(HY_LINKLIB_SUFFIX) $(LIBPATH)vmi$(HY_LINKLIB_SUFFIX)
+
 DLLBASE=0x13200000
 COMMENT=/comment:"nio component native code. (c) Copyright 1991, 2005 The Apache Software Foundation or its licensors, as applicable."
 

Modified: harmony/enhanced/classlib/trunk/modules/prefs/src/main/native/prefs/windows/makefile
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/prefs/src/main/native/prefs/windows/makefile?view=diff&rev=539793&r1=539792&r2=539793
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/prefs/src/main/native/prefs/windows/makefile (original)
+++ harmony/enhanced/classlib/trunk/modules/prefs/src/main/native/prefs/windows/makefile Sat May 19 12:22:00 2007
@@ -31,8 +31,12 @@
 
 SYSLIBFILES = ws2_32.lib Iphlpapi.lib
 
+!IF "$(HY_ZIP_API)" != "true"
+MDLLIBFILES = \
+  $(LIBPATH)hyzip$(HY_LINKLIB_SUFFIX) $(LIBPATH)hyzlib$(HY_LINKLIB_SUFFIX)
+!ENDIF
+
 MDLLIBFILES = $(MDLLIBFILES) \
-  $(LIBPATH)hyzip$(HY_LINKLIB_SUFFIX) $(LIBPATH)hyzlib$(HY_LINKLIB_SUFFIX) \
   $(LIBPATH)hypool$(HY_LINKLIB_SUFFIX) $(LIBPATH)hyfdlibm$(HY_LINKLIB_SUFFIX) \
   $(LIBPATH)vmi$(HY_LINKLIB_SUFFIX)
 DLLBASE=0x13300000

Modified: harmony/enhanced/classlib/trunk/modules/text/src/main/native/text/unix/makefile
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/text/src/main/native/text/unix/makefile?view=diff&rev=539793&r1=539792&r2=539793
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/text/src/main/native/text/unix/makefile (original)
+++ harmony/enhanced/classlib/trunk/modules/text/src/main/native/text/unix/makefile Sat May 19 12:22:00 2007
@@ -24,10 +24,14 @@
 
 BUILDFILES = $(SHAREDSUB)text_copyright.o $(SHAREDSUB)BidiWrapper.o
 
+ifneq ($(HY_ZIP_API),true)
+MDLLIBFILES += $(LIBPATH)libhyzip.a $(DLLPATH)libhyzlib$(HY_LINKLIB_SUFFIX)
+endif
+
 MDLLIBFILES += \
 	$(DLLPATH)libicuuc$(HY_LINKLIB_SUFFIX).34 \
-	$(LIBPATH)libhyzip.a $(DLLPATH)libhyzlib$(HY_LINKLIB_SUFFIX) \
-	$(LIBPATH)libhypool.a $(LIBPATH)libhyfdlibm.a $(LIBPATH)libvmi$(HY_LINKLIB_SUFFIX)
+	$(LIBPATH)libhypool.a $(LIBPATH)libhyfdlibm.a \
+	$(LIBPATH)libvmi$(HY_LINKLIB_SUFFIX)
 
 DLLNAME = ../libhytext$(HY_SHLIB_SUFFIX)
 EXPNAME = HYTEXT_0.1