wine/dlls/lzexpand.dll16/lzexpand.c
2009-03-11 16:51:08 +01:00

153 lines
4.2 KiB
C

/*
* LZ Decompression functions
*
* Copyright 1996 Marcus Meissner
*
* 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "lzexpand.h"
#include "wine/winbase16.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(file);
#define MAX_LZSTATES 16
#define IS_LZ_HANDLE(h) (((h) >= 0x400) && ((h) < 0x400+MAX_LZSTATES))
/***********************************************************************
* LZStart (LZEXPAND.7)
*/
INT16 WINAPI LZStart16(void)
{
TRACE("(void)\n");
return 1;
}
/***********************************************************************
* LZInit (LZEXPAND.3)
*/
HFILE16 WINAPI LZInit16( HFILE16 hfSrc )
{
HFILE ret = LZInit( (HFILE)DosFileHandleToWin32Handle(hfSrc) );
if (IS_LZ_HANDLE(ret)) return ret;
if ((INT)ret <= 0) return ret;
return hfSrc;
}
/***********************************************************************
* GetExpandedName (LZEXPAND.10)
*/
INT16 WINAPI GetExpandedName16( LPSTR in, LPSTR out )
{
return (INT16)GetExpandedNameA( in, out );
}
/***********************************************************************
* LZRead (LZEXPAND.5)
*/
INT16 WINAPI LZRead16( HFILE16 fd, LPVOID buf, UINT16 toread )
{
if (IS_LZ_HANDLE(fd)) return LZRead( fd, buf, toread );
return _lread( (HFILE)DosFileHandleToWin32Handle(fd), buf, toread );
}
/***********************************************************************
* LZSeek (LZEXPAND.4)
*/
LONG WINAPI LZSeek16( HFILE16 fd, LONG off, INT16 type )
{
if (IS_LZ_HANDLE(fd)) return LZSeek( fd, off, type );
return _llseek( (HFILE)DosFileHandleToWin32Handle(fd), off, type );
}
/***********************************************************************
* LZCopy (LZEXPAND.1)
*
*/
LONG WINAPI LZCopy16( HFILE16 src, HFILE16 dest )
{
/* already a LZ handle? */
if (IS_LZ_HANDLE(src)) return LZCopy( src, (HFILE)DosFileHandleToWin32Handle(dest) );
/* no, try to open one */
src = LZInit16(src);
if ((INT16)src <= 0) return 0;
if (IS_LZ_HANDLE(src))
{
LONG ret = LZCopy( src, (HFILE)DosFileHandleToWin32Handle(dest) );
LZClose( src );
return ret;
}
/* it was not a compressed file */
return LZCopy( (HFILE)DosFileHandleToWin32Handle(src), (HFILE)DosFileHandleToWin32Handle(dest) );
}
/***********************************************************************
* LZOpenFile (LZEXPAND.2)
*/
HFILE16 WINAPI LZOpenFile16( LPSTR fn, LPOFSTRUCT ofs, UINT16 mode )
{
HFILE hfret = LZOpenFileA( fn, ofs, mode );
/* return errors and LZ handles unmodified */
if ((INT)hfret <= 0) return hfret;
if (IS_LZ_HANDLE(hfret)) return hfret;
/* but allocate a dos handle for 'normal' files */
return Win32HandleToDosFileHandle((HANDLE)hfret);
}
/***********************************************************************
* LZClose (LZEXPAND.6)
*/
void WINAPI LZClose16( HFILE16 fd )
{
if (IS_LZ_HANDLE(fd)) LZClose( fd );
else DisposeLZ32Handle( DosFileHandleToWin32Handle((HFILE)fd) );
}
/***********************************************************************
* CopyLZFile (LZEXPAND.8)
*/
LONG WINAPI CopyLZFile16( HFILE16 src, HFILE16 dest )
{
TRACE("(%d,%d)\n",src,dest);
return LZCopy16(src,dest);
}
/***********************************************************************
* LZDone (LZEXPAND.9)
*/
void WINAPI LZDone16(void)
{
TRACE("(void)\n");
}