2 * LZ Decompression functions
4 * Copyright 1996 Marcus Meissner
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
27 #include "wine/winbase16.h"
29 #include "wine/debug.h"
31 WINE_DEFAULT_DEBUG_CHANNEL(file
);
33 #define MAX_LZSTATES 16
35 #define IS_LZ_HANDLE(h) (((h) >= 0x400) && ((h) < 0x400+MAX_LZSTATES))
38 /***********************************************************************
39 * LZStart (LZEXPAND.7)
41 INT16 WINAPI
LZStart16(void)
48 /***********************************************************************
51 HFILE16 WINAPI
LZInit16( HFILE16 hfSrc
)
53 HFILE ret
= LZInit( (HFILE
)DosFileHandleToWin32Handle(hfSrc
) );
54 if (IS_LZ_HANDLE(ret
)) return ret
;
55 if ((INT
)ret
<= 0) return ret
;
60 /***********************************************************************
61 * GetExpandedName (LZEXPAND.10)
63 INT16 WINAPI
GetExpandedName16( LPSTR in
, LPSTR out
)
65 return (INT16
)GetExpandedNameA( in
, out
);
69 /***********************************************************************
72 INT16 WINAPI
LZRead16( HFILE16 fd
, LPVOID buf
, UINT16 toread
)
74 if (IS_LZ_HANDLE(fd
)) return LZRead( fd
, buf
, toread
);
75 return _lread( (HFILE
)DosFileHandleToWin32Handle(fd
), buf
, toread
);
79 /***********************************************************************
82 LONG WINAPI
LZSeek16( HFILE16 fd
, LONG off
, INT16 type
)
84 if (IS_LZ_HANDLE(fd
)) return LZSeek( fd
, off
, type
);
85 return _llseek( (HFILE
)DosFileHandleToWin32Handle(fd
), off
, type
);
89 /***********************************************************************
93 LONG WINAPI
LZCopy16( HFILE16 src
, HFILE16 dest
)
95 /* already a LZ handle? */
96 if (IS_LZ_HANDLE(src
)) return LZCopy( src
, (HFILE
)DosFileHandleToWin32Handle(dest
) );
98 /* no, try to open one */
100 if ((INT16
)src
<= 0) return 0;
101 if (IS_LZ_HANDLE(src
))
103 LONG ret
= LZCopy( src
, (HFILE
)DosFileHandleToWin32Handle(dest
) );
107 /* it was not a compressed file */
108 return LZCopy( (HFILE
)DosFileHandleToWin32Handle(src
), (HFILE
)DosFileHandleToWin32Handle(dest
) );
112 /***********************************************************************
113 * LZOpenFile (LZEXPAND.2)
115 HFILE16 WINAPI
LZOpenFile16( LPSTR fn
, LPOFSTRUCT ofs
, UINT16 mode
)
117 HFILE hfret
= LZOpenFileA( fn
, ofs
, mode
);
118 /* return errors and LZ handles unmodified */
119 if ((INT
)hfret
<= 0) return hfret
;
120 if (IS_LZ_HANDLE(hfret
)) return hfret
;
121 /* but allocate a dos handle for 'normal' files */
122 return Win32HandleToDosFileHandle((HANDLE
)hfret
);
126 /***********************************************************************
127 * LZClose (LZEXPAND.6)
129 void WINAPI
LZClose16( HFILE16 fd
)
131 if (IS_LZ_HANDLE(fd
)) LZClose( fd
);
132 else DisposeLZ32Handle( DosFileHandleToWin32Handle((HFILE
)fd
) );
136 /***********************************************************************
137 * CopyLZFile (LZEXPAND.8)
139 LONG WINAPI
CopyLZFile16( HFILE16 src
, HFILE16 dest
)
141 TRACE("(%d,%d)\n",src
,dest
);
142 return LZCopy16(src
,dest
);
146 /***********************************************************************
147 * LZDone (LZEXPAND.9)
149 void WINAPI
LZDone16(void)