Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

428 lines
13 KiB

/*************************************************************************
PC-WIIS File Input/Output routines
This module contains all the READ entry points
03/28/95 RWR Recode IMGFileReadRaw() to use default FIO_DATA prop
03/15/94 RWR Add support for Hi-TIFF data
02/14/94 RWR Fix bug in updating PrivFileReadCgbw offset value
02/09/94 RWR Changes to PrivFileReadCgbw for annotation processing
02/04/94 - KMC, added PrivFileReadCgbw.
02-may-90 scs removed FIO_fax_open_for_read FAX file open for read
15-apr-90 steve sherman broke open into seperate file.
15-apr-90 steve sherman broke wgfswrite into seperate files.
10-feb-90 steve sherman total rewrite for GFS.
02-feb-90 steve sherman change all names to conform with open image windows.
25-sep-89 Charles Shaw Add FIO_fax_open_for_read FAX file open for read
31-may-89 jim snyder DO NOT adjust compression type for caller
02-feb-89 jim snyder code freeze
*************************************************************************/
#include "abridge.h"
#undef NOGDI
#include <windows.h>
#include "wic.h"
#include "oifile.h"
#include "oierror.h"
#include "oicmp.h"
#include "filing.h"
//9504.10 jar added conditional
#ifndef MSWINDOWS
#define MSWINDOWS
#endif
#include "wgfs.h"
#ifdef TIMESTAMP
#include"timestmp.h"
#endif
//#define OI_PERFORM_LOG
#ifdef OI_PERFORM_LOG
#define Enterrddata "Entering IMGFileReadData"
#define Exitrddata "Exiting IMGFileReadData"
#include "logtool.h"
#endif
WORD ReadTiffCompressed(HWND, lp_INFO, LPCXDATA, LP_FIO_DATA, LPSTR,
LPSTR, LPINT, LPINT);
WORD ReadNoStripsCompressed(HWND, lp_INFO, LPCXDATA, LP_FIO_DATA,
LPSTR, LPSTR, LPINT, LPINT);
WORD ReadDibStrips(HWND, LPCXDATA, LPBITMAPINFO, LP_FIO_DATA,
LPSTR, LPSTR, LPINT, LPINT);
WORD ReadTiffStripRaw(HWND, lp_INFO, LP_FIO_DATA, unsigned,
LPSTR, LPINT, long FAR *);
/*************************************************************************/
//*************************************************************************
//
// IMGFileReadData
//
//*************************************************************************
// 9504.05 jar return as int
//WORD FAR PASCAL IMGFileReadData(HANDLE hFileID, HWND hWnd, LPDWORD lplStart,
// LPDWORD lplCount, LPSTR lpsBuffer,
// UINT unDataType)
int FAR PASCAL IMGFileReadData(HANDLE hFileID, HWND hWnd, LPDWORD lplStart,
LPDWORD lplCount, LPSTR lpsBuffer,
UINT unDataType)
{
// 9504.05 jar return int
//WORD wStatus;
int wStatus;
DWORD dwOptstuff[3];
int errcode;
HANDLE input_fio;
HANDLE hParent;
LP_FIO_DATA pdata;
lp_INFO lpGFSInfo;
LPCXDATA lpcxdata;
LPSTR lpCompressData;
#ifdef OI_PERFORM_LOG
RecordIt("FILE", 5, LOG_ENTER, Enterrddata, NULL);
#endif
if (!IsWindow ( hWnd ))
{
#ifdef OI_PERFORM_LOG
RecordIt("FILE", 5, LOG_EXIT, Exitrddata, NULL);
#endif
return ( FIO_INVALID_WINDOW_HANDLE );
}
switch (unDataType)
{
case FIO_IMAGE_DATA:
if ( lplStart == NULL || lplCount == NULL ||
lpsBuffer == NULL )
{
#ifdef TIMESTAMP
timestmp((LPSTR)"Function Exit", (LPSTR)"IMGFileRead",
(LPSTR)__FILE__, __LINE__, (LPSTR)"Function Returns: ",
FIO_NULL_POINTER, NULL, 0);
#endif
wStatus = FIO_NULL_POINTER;
goto exit0;
}
/***** get window specific date and lock or error *****/
wStatus = SearchForPropList(hWnd, hFileID, (LPHANDLE)&hParent);
input_fio = hFileID;
if (wStatus != FIO_FILE_PROP_FOUND)
{
wStatus = FIO_PROPERTY_LIST_ERROR;
//UnlockData (0);
#ifdef OI_PERFORM_LOG
RecordIt("FILE", 5, LOG_EXIT, Exitrddata, NULL);
#endif
return (wStatus);
}
wStatus = SUCCESS;
if (!(pdata = (LP_FIO_DATA)GlobalLock (input_fio)))
{
wStatus = FIO_GLOBAL_LOCK_FAILED;
goto exit0;
}
// 9508.07 jar if this is AWD there's no cxdata stuff
if ( pdata->file_type != FIO_AWD)
{
if (!(pdata->hCompressBuf)) /* Now lock compression buffer */
{
wStatus = FIO_GLOBAL_LOCK_FAILED;
}
else if (!(lpCompressData = (LPSTR) GlobalLock (pdata->hCompressBuf)))
{
wStatus = FIO_GLOBAL_LOCK_FAILED;
}
if (wStatus)
{
goto exit1;
}
if (!(lpcxdata = (LPCXDATA) GlobalLock ( pdata->hCX_info )))
{
wStatus = FIO_GLOBAL_LOCK_FAILED;
goto exit2;
}
} // 9508.07 jar end of if for NOT AWD stuff
if (pdata->Open_type == OPEN_BINARY)
{
wStatus = FIO_UNKNOWN_FILE_TYPE;
}
else
{
//monit2("grip says not open_binary\n");
if (!(lpGFSInfo = (lp_INFO) GlobalLock ( pdata->hGFS_info )))
{
wStatus = FIO_GLOBAL_LOCK_FAILED;
goto exit3;
}
if ((*lplStart ) >= (DWORD) lpGFSInfo->vert_size)
{
*lplStart = (int)lpGFSInfo->vert_size;
*lplCount = 0;
wStatus = FIO_EOF;
}
else // NOTE: these functions also handle uncompressed data.
{
// User Cannot read passed end of file ......
if ((*lplStart + *lplCount) >= (DWORD) lpGFSInfo->vert_size)
{
*lplCount = (int) (lpGFSInfo->vert_size - *lplStart);
}
if (!(pdata->StripMode))
{
// monit2("grip says no strips\n");
wStatus = ReadNoStripsCompressed(hWnd, lpGFSInfo, lpcxdata,
pdata, lpsBuffer,
lpCompressData,
(LPINT)lplStart,
(LPINT)lplCount);
}
else
{
/* this file id needed later for calls through OICOMEX
to new filing functions */
lpcxdata->FileId = hFileID;
wStatus = ReadTiffCompressed(hWnd, lpGFSInfo, lpcxdata,
pdata, lpsBuffer, lpCompressData,
(LPINT)lplStart, (LPINT)lplCount);
}
// See if we have to swap rgb data to bgr or visa / versa
if (pdata->UserWantsRGBorBGR)
{
SwapRGB ( lpsBuffer, lpcxdata->BufferByteWidth,
lpcxdata->BufferByteWidth, *((int FAR*)lplCount));
}
}
GlobalUnlock (pdata->hGFS_info);
}
exit3:
if ( pdata->file_type != FIO_AWD)
{
GlobalUnlock (pdata->hCX_info);
}
exit2:
if ( pdata->file_type != FIO_AWD)
{
GlobalUnlock (pdata->hCompressBuf);
}
exit1:
GlobalUnlock(input_fio);
exit0:
break;
case FIO_ANNO_DATA:
case FIO_HITIFF_DATA:
wStatus = SearchForPropList(hWnd, hFileID, (LPHANDLE)&hParent);
input_fio = hFileID;
if (wStatus == FIO_FILE_PROP_FOUND)
{
wStatus = SUCCESS;
}
if ( wStatus )
{
#ifdef OI_PERFORM_LOG
RecordIt("FILE", 5, LOG_EXIT, Exitrddata, NULL);
#endif
return (FIO_PROPERTY_LIST_ERROR);
}
if (!(pdata = (LP_FIO_DATA)GlobalLock(input_fio)))
{
#ifdef OI_PERFORM_LOG
RecordIt("FILE", 5, LOG_EXIT, Exitrddata, NULL);
#endif
return (FIO_PROPERTY_LIST_ERROR);
}
if (pdata->fio_flags & unDataType)
{
dwOptstuff[0] = *lplCount;
dwOptstuff[1] = (*lplStart); // offset from start of an. data
if (unDataType == FIO_ANNO_DATA)
{
dwOptstuff[1] += 4; // add 4 for my annotation header
}
dwOptstuff[2] = (DWORD)lpsBuffer;
/* Don't read 0 bytes (don't waste the network time!) */
if (dwOptstuff[0] != 0)
{
wStatus = wgfsopts(hWnd, pdata->filedes, SET,
(unDataType == FIO_ANNO_DATA)?
GET_ANNOTATION_DATA:GET_HITIFF_DATA,
(LPSTR)&dwOptstuff, &errcode);
}
else
{
wStatus = 0;
}
if (wStatus) /* GFS will set -1 if there's an errcode value */
{
wStatus = errcode;
}
else
{
if (dwOptstuff[0] < *lplCount) // update lplCout, lplStart
{
wStatus = FIO_EOF;
}
*lplCount = dwOptstuff[0];
*lplStart += dwOptstuff[0];
}
}
else
{
wStatus = FIO_EOF;
*lplCount = 0;
}
GlobalUnlock(input_fio);
break;
default:
wStatus = FIO_INVALID_DATA_TYPE;
}
#ifdef OI_PERFORM_LOG
RecordIt("FILE", 5, LOG_EXIT, Exitrddata, NULL);
#endif
return (wStatus);
}
/*************************************************************************
IMGFileReadRawm Me think'em this name'em is dumb'em too'em!
*************************************************************************/
// 9503.29 jar altered return to int
// WORD FAR PASCAL IMGFileReadRawm (
// window_handle, strip_index,
// this_many_bytes, buffer_address,
// bytes_remain, hprop)
//HWND window_handle;
//unsigned int strip_index; // Strip number to read data from.
//LPINT this_many_bytes; // NOTE: Used as in/out parm.
// // Input must be set to max number of bytes to read.
// // Output set to number of bytes actually read.
//LPSTR buffer_address; // Buffer to contain raw image data....
//
//long FAR * bytes_remain; // Output set to bytes remaining in strip.
//HANDLE hprop; // input handle for file data
int FAR PASCAL IMGFileReadRawm ( HWND window_handle, unsigned int strip_index,
LPINT this_many_bytes, LPSTR buffer_address,
long FAR *bytes_remain, HANDLE hprop)
{
// 9503.29 jar altered return to int
// WORD status;
int status;
FIO_HANDLE input_fio;
lp_INFO lpGFSInfo;
LP_FIO_DATA pdata;
HANDLE hParent;
#ifdef TIMESTAMP
timestmp((LPSTR)"Entry Point", (LPSTR)"IMGFileReadRawm",
(LPSTR)__FILE__, __LINE__, NULL, 0, NULL, 0);
#endif
if ( IsWindow ( window_handle ))
{
if ( bytes_remain == NULL || this_many_bytes == NULL ||
buffer_address == NULL )
{
#ifdef TIMESTAMP
timestmp((LPSTR)"Function Exit", (LPSTR)"IMGFileReadRawm",
(LPSTR)__FILE__, __LINE__, (LPSTR)"Function Returns: ", FIO_NULL_POINTER, NULL, 0);
#endif
return ( FIO_NULL_POINTER );
}
}
else
{
#ifdef TIMESTAMP
timestmp((LPSTR)"Function Exit", (LPSTR)"IMGFileReadRawm",
(LPSTR)__FILE__, __LINE__, (LPSTR)"Function Returns: ", FIO_INVALID_WINDOW_HANDLE, NULL, 0);
#endif
return ( FIO_INVALID_WINDOW_HANDLE );
}
/***** get window specific date and lock or error *****/
status = SearchForPropList(window_handle, hprop, (LPHANDLE)&hParent);
input_fio = hprop;
if (status != FIO_FILE_PROP_FOUND)
{
status = FIO_PROPERTY_LIST_ERROR;
#ifdef TIMESTAMP
timestmp((LPSTR)"Function Exit", (LPSTR)"IMGFileReadRawm",
(LPSTR)__FILE__, __LINE__, (LPSTR)"status", status, NULL, 0);
#endif
return(status);
}
status = SUCCESS;
if (!(pdata = (LP_FIO_DATA)GlobalLock (input_fio)))
{
status = FIO_GLOBAL_LOCK_FAILED;
goto exit1;
}
if (pdata->Open_type == OPEN_BINARY)// Only GFS read raw supported...
{
status = FIO_READ_ERROR;
}
else
{
if ((lpGFSInfo = (lp_INFO) GlobalLock ( pdata->hGFS_info )))
{
status = ReadTiffStripRaw (window_handle, lpGFSInfo, pdata,
strip_index, buffer_address,
this_many_bytes, bytes_remain);
GlobalUnlock (pdata->hGFS_info);
}
else
status = FIO_GLOBAL_LOCK_FAILED;
}
GlobalUnlock ( input_fio );
exit1:
#ifdef TIMESTAMP
timestmp((LPSTR)"Function Exit", (LPSTR)"IMGFileReadRawm",
(LPSTR)__FILE__, __LINE__, (LPSTR)"status", status, NULL, 0);
#endif
return (status);
}