1 /*
2 * LZ Decompression functions
3 *
4 * Copyright 1996 Marcus Meissner
5 *
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.
10 *
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.
15 *
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
19 */
20
21 #include <stdarg.h>
22
23 #include "windef.h"
24 #include "winbase.h"
25 #include "lzexpand.h"
26
27 #include "wine/winbase16.h"
28
29 #include "wine/debug.h"
30
31 WINE_DEFAULT_DEBUG_CHANNEL(file);
32
33 #define MAX_LZSTATES 16
34
35 #define IS_LZ_HANDLE(h) (((h) >= 0x400) && ((h) < 0x400+MAX_LZSTATES))
36
37
38 /***********************************************************************
39 * LZStart (LZEXPAND.7)
40 */
41 INT16 WINAPI LZStart16(void)
42 {
43 TRACE("(void)\n");
44 return 1;
45 }
46
47
48 /***********************************************************************
49 * LZInit (LZEXPAND.3)
50 */
51 HFILE16 WINAPI LZInit16( HFILE16 hfSrc )
52 {
53 HFILE ret = LZInit( (HFILE)DosFileHandleToWin32Handle(hfSrc) );
54 if (IS_LZ_HANDLE(ret)) return ret;
55 if ((INT)ret <= 0) return ret;
56 return hfSrc;
57 }
58
59
60 /***********************************************************************
61 * GetExpandedName (LZEXPAND.10)
62 */
63 INT16 WINAPI GetExpandedName16( LPSTR in, LPSTR out )
64 {
65 return (INT16)GetExpandedNameA( in, out );
66 }
67
68
69 /***********************************************************************
70 * LZRead (LZEXPAND.5)
71 */
72 INT16 WINAPI LZRead16( HFILE16 fd, LPVOID buf, UINT16 toread )
73 {
74 if (IS_LZ_HANDLE(fd)) return LZRead( fd, buf, toread );
75 return _lread( (HFILE)DosFileHandleToWin32Handle(fd), buf, toread );
76 }
77
78
79 /***********************************************************************
80 * LZSeek (LZEXPAND.4)
81 */
82 LONG WINAPI LZSeek16( HFILE16 fd, LONG off, INT16 type )
83 {
84 if (IS_LZ_HANDLE(fd)) return LZSeek( fd, off, type );
85 return _llseek( (HFILE)DosFileHandleToWin32Handle(fd), off, type );
86 }
87
88
89 /***********************************************************************
90 * LZCopy (LZEXPAND.1)
91 *
92 */
93 LONG WINAPI LZCopy16( HFILE16 src, HFILE16 dest )
94 {
95 /* already a LZ handle? */
96 if (IS_LZ_HANDLE(src)) return LZCopy( src, (HFILE)DosFileHandleToWin32Handle(dest) );
97
98 /* no, try to open one */
99 src = LZInit16(src);
100 if ((INT16)src <= 0) return 0;
101 if (IS_LZ_HANDLE(src))
102 {
103 LONG ret = LZCopy( src, (HFILE)DosFileHandleToWin32Handle(dest) );
104 LZClose( src );
105 return ret;
106 }
107 /* it was not a compressed file */
108 return LZCopy( (HFILE)DosFileHandleToWin32Handle(src), (HFILE)DosFileHandleToWin32Handle(dest) );
109 }
110
111
112 /***********************************************************************
113 * LZOpenFile (LZEXPAND.2)
114 */
115 HFILE16 WINAPI LZOpenFile16( LPSTR fn, LPOFSTRUCT ofs, UINT16 mode )
116 {
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);
123 }
124
125
126 /***********************************************************************
127 * LZClose (LZEXPAND.6)
128 */
129 void WINAPI LZClose16( HFILE16 fd )
130 {
131 if (IS_LZ_HANDLE(fd)) LZClose( fd );
132 else DisposeLZ32Handle( DosFileHandleToWin32Handle((HFILE)fd) );
133 }
134
135
136 /***********************************************************************
137 * CopyLZFile (LZEXPAND.8)
138 */
139 LONG WINAPI CopyLZFile16( HFILE16 src, HFILE16 dest )
140 {
141 TRACE("(%d,%d)\n",src,dest);
142 return LZCopy16(src,dest);
143 }
144
145
146 /***********************************************************************
147 * LZDone (LZEXPAND.9)
148 */
149 void WINAPI LZDone16(void)
150 {
151 TRACE("(void)\n");
152 }
153
This page was automatically generated by the
LXR engine.
Visit the LXR main site for more
information.