shell32/tests: Fix a failure on w2k.
[wine] / dlls / lzexpand.dll16 / lzexpand.c
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 }