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.
 
 
 
 
 
 

1193 lines
31 KiB

/* Exclude certain things in platform.h */
#define XCHUNK
#define XFI
#define XUT
#include "platform.h"
#include "sccio.h"
#include "sccfi.h"
#include "sodefs.h"
#ifdef WINDOWS
#define DECLSO VOID (SO_ENTRYMOD *)()
#endif /*WINDOWS*/
#ifdef MAC
#define DECLSO VOID (SO_ENTRYMOD *)()
#endif /*MAC*/
#ifdef OS2
#define DECLSO VOID (* SO_ENTRYMOD)()
#endif /*OS/2*/
/*
| Include viewer's data types and typedef HPROC
*/
#include VwInclude
typedef struct PROCtag
{
VwStreamDynamicType VwData;
SORTNS SoRtns;
DWORD User1;
DWORD User2;
LONG lTellOffset;
} NEAR * HPROC;
#include "vwdefs.h"
/*
| Include XIO defines, structures and macros
|
| Note: VSIO.H is VSCTOP specific and may use any
| of the VwStream #defines in vsp_???.h
*/
#include "vsio.h"
/*
| Do functions prototypes for Vw functions
*/
extern FILTER_DESC VwStreamIdName[];
#ifdef VwStreamStaticType
extern VwStreamStaticType VwStreamStaticName;
#endif
#ifdef VwStreamOpenFunc
#undef VwStreamOpenFunc
#define VwStreamOpenFunc VwStreamOpen
VW_ENTRYSC SHORT VW_ENTRYMOD VwStreamOpenFunc(SOFILE, SHORT, BYTE VWPTR *, SOFILTERINFO VWPTR * ,HPROC);
#endif
#ifdef VwStreamCloseFunc
#undef VwStreamCloseFunc
#define VwStreamCloseFunc VwStreamClose
VW_ENTRYSC VOID VW_ENTRYMOD VwStreamCloseFunc(SOFILE, HPROC);
#else
#undef VwStreamCloseFunc
#define VwStreamCloseFunc VwStreamClose
VW_ENTRYSC VOID VW_ENTRYMOD VwStreamCloseFunc(SOFILE, HPROC);
VW_ENTRYSC VOID VW_ENTRYMOD VwStreamCloseFunc(hFile,hProc)
SOFILE hFile;
HPROC hProc;
{
}
#endif
#ifdef VwStreamSectionFunc
#undef VwStreamSectionFunc
#define VwStreamSectionFunc VwStreamSection
VW_ENTRYSC SHORT VW_ENTRYMOD VwStreamSectionFunc(SOFILE, HPROC);
#endif
#ifdef VwStreamReadFunc
#undef VwStreamReadFunc
#define VwStreamReadFunc VwStreamRead
VW_ENTRYSC SHORT VW_ENTRYMOD VwStreamReadFunc(SOFILE, HPROC);
#endif
#ifdef VwStreamReadRecordFunc
#undef VwStreamReadRecordFunc
#define VwStreamReadRecordFunc VwStreamReadRecord
VW_ENTRYSC VOID VW_ENTRYMOD VwStreamReadRecordFunc(SOFILE, DWORD, HPROC);
#else
#define VwStreamReadRecordFunc VwStreamReadRecord
VW_ENTRYSC VOID VW_ENTRYMOD VwStreamReadRecordFunc(SOFILE, DWORD, HPROC);
VW_ENTRYSC VOID VW_ENTRYMOD VwStreamReadRecordFunc(hFile,dwData,hProc)
SOFILE hFile;
DWORD dwData;
HPROC hProc;
{
}
#endif
#ifdef VwDoSpecialFunc
#undef VwDoSpecialFunc
#define VwDoSpecialFunc VwDoSpecial
VW_ENTRYSC VOID VW_ENTRYMOD VwDoSpecialFunc(SOFILE,DWORD,DWORD,DWORD,DWORD,DWORD,HPROC);
#else
#define VwDoSpecialFunc VwDoSpecial
VW_ENTRYSC VOID VW_ENTRYMOD VwDoSpecialFunc(SOFILE,DWORD,DWORD,DWORD,DWORD,DWORD,HPROC);
VW_ENTRYSC VOID VW_ENTRYMOD VwDoSpecialFunc(hFile, dw1,dw2,dw3,dw4,dw5,hProc)
SOFILE hFile;
DWORD dw1;
DWORD dw2;
DWORD dw3;
DWORD dw4;
DWORD dw5;
HPROC hProc;
{
}
#endif
#ifdef VwStreamTellFunc
#undef VwStreamTellFunc
#define VwStreamTellFunc VwStreamTell
VW_ENTRYSC SHORT VW_ENTRYMOD VwStreamTellFunc(SOFILE, HPROC);
#endif
#ifdef VwStreamSeekFunc
#undef VwStreamSeekFunc
#define VwStreamSeekFunc VwStreamSeek
VW_ENTRYSC SHORT VW_ENTRYMOD VwStreamSeekFunc(SOFILE, HPROC);
#endif
#ifdef VwGetInfoFunc
#undef VwGetInfoFunc
#define VwGetInfoFunc VwGetInfo
VW_ENTRYSC BOOL VW_ENTRYMOD VwGetInfoFunc(VOID VWPTR *, WORD, HPROC);
#endif
#ifdef VwGetRtnsFunc
#undef VwGetRtnsFunc
#define VwGetRtnsFunc VwGetRtns
VW_ENTRYSC VOID VW_ENTRYMOD VwGetRtnsFunc(VWRTNS VWPTR *, WORD);
#endif
#ifdef VwGetDataFunc
#undef VwGetDataFunc
#define VwGetDataFunc VwGetData
VW_ENTRYSC VOID VW_ENTRYMOD VwGetDataFunc(VwStreamSaveType VWPTR *, HPROC);
#endif
#ifdef VwSetDataFunc
#undef VwSetDataFunc
#define VwSetDataFunc VwSetData
VW_ENTRYSC VOID VW_ENTRYMOD VwSetDataFunc(VwStreamSaveType VWPTR *, HPROC);
#endif
#ifdef VwStreamSectionType
#ifdef VwGetSectionDataFunc
#undef VwGetSectionDataFunc
#define VwGetSectionDataFunc VwGetSectionData
VW_ENTRYSC VOID VW_ENTRYMOD VwGetSectionDataFunc(VwStreamSectionType VWPTR *, HPROC);
#endif
#ifdef VwSetSectionDataFunc
#undef VwSetSectionDataFunc
#define VwSetSectionDataFunc VwSetSectionData
VW_ENTRYSC VOID VW_ENTRYMOD VwSetSectionDataFunc(VwStreamSectionType VWPTR *, HPROC);
#endif
#else
#ifdef VwGetSectionDataFunc
#undef VwGetSectionDataFunc
#endif
#define VwGetSectionDataFunc VwGetSectionData
VW_ENTRYSC VOID VW_ENTRYMOD VwGetSectionDataFunc(VOID VWPTR *, HPROC);
#ifdef VwSetSectionDataFunc
#undef VwSetSectionDataFunc
#endif
#define VwSetSectionDataFunc VwSetSectionData
VW_ENTRYSC VOID VW_ENTRYMOD VwSetSectionDataFunc(VOID VWPTR *, HPROC);
#endif
#ifdef VwLocalUpFunc
#undef VwLocalUpFunc
#define VwLocalUpFunc VwLocalUp
VW_ENTRYSC VOID VW_ENTRYMOD VwLocalUpFunc(HIOFILE, SOFILE VWPTR *, HPROC);
#endif
#ifdef VwLocalDownFunc
#undef VwLocalDownFunc
#define VwLocalDownFunc VwLocalDown
VW_ENTRYSC VOID VW_ENTRYMOD VwLocalDownFunc(SOFILE, HIOFILE VWPTR *, HPROC);
#endif
#ifdef VwAllocProcFunc
#undef VwAllocProcFunc
#define VwAllocProcFunc VwAllocProc
VW_ENTRYSC HPROC VW_ENTRYMOD VwAllocProcFunc(VOID);
#endif
#ifdef VwFreeProcFunc
#undef VwFreeProcFunc
#define VwFreeProcFunc VwFreeProc
VW_ENTRYSC VOID VW_ENTRYMOD VwFreeProcFunc(HPROC);
#endif
#define VwSetUserFunc VwSetUser
VW_ENTRYSC VOID VW_ENTRYMOD VwSetUserFunc(DWORD,DWORD,HPROC);
#define VwSetSoRtnFunc VwSetSoRtn
VW_ENTRYSC VOID VW_ENTRYMOD VwSetSoRtnFunc(SHORT, DECLSO, HPROC);
#ifdef VwStreamStaticType
#define Init VwStreamStaticName
#endif
#define Proc (hProc->VwData)
/*
| Make some standard library functions available
*/
#ifdef WIN16
void far * far _cdecl _fmemmove(void far *, const void far *, unsigned int);
void far * far _cdecl _fmemcpy(void far *, const void far *,unsigned int);
void far * far _cdecl _fmemset(void far *, int, unsigned int);
int _cdecl atoi(const char *);
long _cdecl atol(const char *);
int Vatoi(char far *);
long Vatol(char far *);
#define strcmp lstrcmp
#define strcmpi lstrcmpi
#define strcpy lstrcpy
#define strcat lstrcat
#define strlen lstrlen
#define memcpy _fmemcpy
#define memset _fmemset
#define memmove _fmemmove
#define memcmp _fmemcmp
int Vatoi(pStr)
char far * pStr;
{
static char locStr[20];
lstrcpy(locStr,pStr);
return(atoi(locStr));
}
long Vatol(pStr)
char far * pStr;
{
static char locStr[20];
lstrcpy(locStr,pStr);
return(atol(locStr));
}
#define atoi(s) Vatoi((char far *) s)
#define atol(s) Vatol((char far *) s)
#define itoa(num,str,x) _itoa(num,str,x)
#define ltoa(num,str,x) _ltoa(num,str,x)
#define SUAlloc(size,hProc) GlobalAlloc(GMEM_MOVEABLE,size)
#define SUFree(handle,hProc) GlobalFree(handle)
#define SULock(handle,hProc) ((VOID FAR *) GlobalLock(handle))
#define SUUnlock(handle,hProc) GlobalUnlock(handle)
#define SUReAlloc(handle,size,hProc) GlobalReAlloc(handle,size,0)
#define SUSeekEntry(hF,hProc)
#endif /*WIN16*/
#ifdef WIN32
HINSTANCE hInst;
BOOL WINAPI DllEntryPoint(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
hInst = hInstance;
return(TRUE);
}
#define SUAlloc(size,hProc) GlobalAlloc(GMEM_MOVEABLE,size)
#define SUFree(handle,hProc) GlobalFree(handle)
#define SULock(handle,hProc) ((VOID FAR *) GlobalLock(handle))
#define SUUnlock(handle,hProc) GlobalUnlock(handle)
#define SUReAlloc(handle,size,hProc) GlobalReAlloc(handle,size,0)
#define SUSeekEntry(hF,hProc)
#endif /*WIN32*/
#ifdef MAC
#include "vsctop.mac"
/*
| My versions of HLock and SetHandleSize return the Mac return code
| The regular versions don't because Apple didn't specify the
| Pascal versions with any return codes in Inside Macintosh II
*/
#pragma parameter __D0 MyHLock(__A0)
pascal unsigned short MyHLock(Handle h) = 0xA029;
#pragma parameter __D0 MySetHandleSize(__A0,__D0)
pascal unsigned short MySetHandleSize(Handle h,Size newSize) = 0xA024;
#pragma parameter __D0 MySetPtrSize(__A0,__D0)
pascal unsigned short MySetPtrSize(Ptr p,Size newSize) = 0xA020;
#define SUAlloc(size,hProc) NewHandleClear(size+4)
#define SUFree(handle,hProc) DisposHandle(handle)
#define SUReAlloc(handle,size,hProc) (MySetHandleSize(handle,size+4) == noErr ? (handle) : NULL)
#define SULock(handle,hProc) ( (*(DWORD *)*handle)++ == 0 ? (MyHLock(handle) == noErr ? ((*handle) + sizeof(DWORD)) : NULL) : ((*handle) + sizeof(DWORD)))
#define SUUnlock(handle,hProc) { if ((*(DWORD *)*handle) == 0) {DebugStr("\pSUUnlock: Lock count already 0");} else if ( --(*(DWORD *)*handle) == 0) { HUnlock(handle);} }
#define SUSeekEntry(hF,hProc)
#include <Packages.h>
#define itoa(num,str,x) {NumToString(num,str);p2cstr(str);}
#define ltoa(num,str,x) {NumToString(num,str);p2cstr(str);}
VW_ENTRYSC VOID VW_ENTRYMOD GetCRRoutines(pRtns,wLastRtn)
VWRTNS VWPTR * pRtns;
WORD wLastRtn;
{
VwGetRtnsFunc(pRtns,wLastRtn);
}
#endif /*MAC*/
#ifdef OS2
int atoi(const char *);
long atol(const char *);
#define strcmpi stricmp
#define itoa(num,str,x) _itoa(num,str,x)
#define ltoa(num,str,x) _ltoa(num,str,x)
#define SUAlloc(size,hProc) malloc(size)
#define SUFree(handle,hProc) free(handle)
#define SULock(handle,hProc) ((VOID FAR *)(handle))
#define SUUnlock(handle,hProc)
#define SUReAlloc(handle,size,hProc) realloc(handle,size)
#define SUSeekEntry(hF,hProc)
#endif /*OS/2*/
#ifdef VwStreamGenSeekName
VW_ENTRYSC SHORT VW_ENTRYMOD VwStreamSeekFunc(hFile,hProc)
SOFILE hFile;
HPROC hProc;
{
return(xseek(hFile,Proc.VwStreamSaveName.VwStreamGenSeekName,FR_BOF));
}
VW_ENTRYSC SHORT VW_ENTRYMOD VwStreamTellFunc(hFile,hProc)
SOFILE hFile;
HPROC hProc;
{
Proc.VwStreamSaveName.VwStreamGenSeekName = xtell(hFile);
return(0);
}
#endif
#ifdef WINDOWS
VW_ENTRYSC HPROC VW_ENTRYMOD VwAllocProcFunc()
{
HANDLE hData;
if ((hData = LocalAlloc(LMEM_FIXED | LMEM_ZEROINIT,sizeof(struct PROCtag))) == NULL)
return(NULL);
else
return((HPROC)LocalLock(hData));
}
VW_ENTRYSC VOID VW_ENTRYMOD VwFreeProcFunc(hProc)
HPROC hProc;
{
HANDLE hData;
#ifdef WIN16
if ((hData = LocalHandle((WORD)(VOID NEAR *)hProc)) != NULL)
LocalFree(hData);
#endif /*WIN16*/
#ifdef WIN32
if ((hData = LocalHandle((LPVOID)hProc)) != NULL)
LocalFree(hData);
#endif /*WIN32*/
}
#endif /*WINDOWS*/
#ifdef MAC
VW_ENTRYSC HPROC VW_ENTRYMOD VwAllocProcFunc()
{
return((HPROC)NewPtrClear(sizeof(struct PROCtag)));
}
VW_ENTRYSC VOID VW_ENTRYMOD VwFreeProcFunc(hProc)
HPROC hProc;
{
DisposPtr(hProc);
}
#endif /*MAC*/
#ifdef OS2
VW_ENTRYSC HPROC VW_ENTRYMOD VwAllocProcFunc()
{
PVOID pBaseAddr;
if (0==DosAllocMem (&pBaseAddr, sizeof (struct PROCtag), PAG_COMMIT | PAG_WRITE ) )
{
return ( (HPROC) pBaseAddr );
}
else
{
return NULL;
} /* endif */
}
VW_ENTRYSC VOID VW_ENTRYMOD VwFreeProcFunc(hProc)
HPROC hProc;
{
if (hProc != NULL)
DosFreeMem(hProc);
}
#endif /*OS/2*/
VW_ENTRYSC BOOL VW_ENTRYMOD VwGetInfoFunc(pInfo,wInfoId,hProc)
VOID VWPTR * pInfo;
WORD wInfoId;
HPROC hProc;
{
BOOL locRet;
WORD locIndex;
locRet = TRUE;
switch (wInfoId)
{
case VWINFO_CHECK:
*(DWORD VWPTR *)pInfo = 0x12345678;
break;
case VWINFO_SAVESIZE:
#ifdef VwStreamSaveType
*(WORD VWPTR *)pInfo = sizeof(VwStreamSaveType);
#else
*(WORD VWPTR *)pInfo = 0;
#endif
break;
case VWINFO_DYNAMICSIZE:
#ifdef VwStreamDynamicType
*(WORD VWPTR *)pInfo = sizeof(VwStreamDynamicType);
#else
*(WORD VWPTR *)pInfo = 0;
#endif
break;
case VWINFO_STATICSIZE:
#ifdef VwStreamStaticType
*(WORD VWPTR *)pInfo = sizeof(VwStreamStaticType);
#else
*(WORD VWPTR *)pInfo = 0;
#endif
break;
case VWINFO_SPECLEVEL:
*(WORD VWPTR *)pInfo = 400;
break;
case VWINFO_FILTERLEVEL:
*(WORD VWPTR *)pInfo = 410;
break;
case VWINFO_IDCOUNT:
*(WORD VWPTR *)pInfo = VwStreamIdCount;
break;
case VWINFO_IDS:
for (locIndex = 0; locIndex < VwStreamIdCount; locIndex++)
{
((WORD VWPTR *)pInfo)[locIndex] = VwStreamIdName[locIndex].FilterId;
}
break;
case VWINFO_DATE:
strcpy((BYTE VWPTR *)pInfo,__DATE__);
break;
case VWINFO_TIME:
strcpy((BYTE VWPTR *)pInfo,__TIME__);
break;
case VWINFO_USERSAVESIZE:
#ifdef VwStreamUserSaveType
*(WORD VWPTR *)pInfo = sizeof(VwStreamUserSaveType);
#else
*(WORD VWPTR *)pInfo = 0;
#endif
break;
case VWINFO_SECTIONSAVESIZE:
#ifdef VwStreamSectionType
*(WORD VWPTR *)pInfo = sizeof(VwStreamSectionType);
#else
*(WORD VWPTR *)pInfo = 0;
#endif
break;
default:
locRet = FALSE;
break;
}
return(locRet);
}
VW_ENTRYSC VOID VW_ENTRYMOD VwGetDataFunc(pSaveData,hProc)
VwStreamSaveType VWPTR * pSaveData;
HPROC hProc;
{
*pSaveData = Proc.VwStreamSaveName;
}
VW_ENTRYSC VOID VW_ENTRYMOD VwSetDataFunc(pSaveData,hProc)
VwStreamSaveType VWPTR * pSaveData;
HPROC hProc;
{
Proc.VwStreamSaveName = *pSaveData;
}
#ifdef VwStreamSectionType
VW_ENTRYSC VOID VW_ENTRYMOD VwGetSectionDataFunc(pSectionData,hProc)
VwStreamSectionType VWPTR * pSectionData;
HPROC hProc;
{
*pSectionData = Proc.VwStreamSectionName;
}
VW_ENTRYSC VOID VW_ENTRYMOD VwSetSectionDataFunc(pSectionData,hProc)
VwStreamSectionType VWPTR * pSectionData;
HPROC hProc;
{
Proc.VwStreamSectionName = *pSectionData;
}
#else
VW_ENTRYSC VOID VW_ENTRYMOD VwGetSectionDataFunc(pSectionData,hProc)
VOID VWPTR * pSectionData;
HPROC hProc;
{
}
VW_ENTRYSC VOID VW_ENTRYMOD VwSetSectionDataFunc(pSectionData,hProc)
VOID VWPTR * pSectionData;
HPROC hProc;
{
}
#endif
VOID FAR SODummy()
{
}
VW_ENTRYSC VOID VW_ENTRYMOD VwLocalUpFunc(hFile,phFile,hProc)
HIOFILE hFile;
SOFILE VWPTR * phFile;
HPROC hProc;
{
#ifndef VwBlockIOOnly
#ifndef VwBlockIOFile
*phFile = (SOFILE)xblocktochar(hFile);
#else
*phFile = (SOFILE)hFile;
#endif /*NOT VwBlockIOFile*/
#else
*phFile = (SOFILE)hFile;
#endif /*NOT VwBlockIOOnly*/
#ifdef WINDOWS
#define CAST (VOID FAR *)
#define CAST2 (VOID FAR *)
#endif /*WINDOWS*/
#ifdef MAC
#define CAST (VOID *)
#define CAST2 (VOID *)
#endif /*MAC*/
#ifdef OS2
#define CAST (VOID (* SO_ENTRYMOD)())
#define CAST2 (WORD (* SO_ENTRYMOD)())
#endif /*OS/2*/
hProc->SoRtns.SOPutChar = CAST SODummy;
hProc->SoRtns.SOPutCharX = CAST SODummy;
hProc->SoRtns.SOPutSpecialCharX = CAST SODummy;
hProc->SoRtns.SOPutCharAttr = CAST SODummy;
hProc->SoRtns.SOPutCharHeight = CAST SODummy;
hProc->SoRtns.SOPutParaAlign = CAST SODummy;
hProc->SoRtns.SOPutParaIndents = CAST SODummy;
hProc->SoRtns.SOStartTabStops = CAST SODummy;
hProc->SoRtns.SOEndTabStops = CAST SODummy;
hProc->SoRtns.SOPutTabStop = CAST SODummy;
hProc->SoRtns.SOPutMargins = CAST SODummy;
hProc->SoRtns.SOPutSubdocInfo = CAST SODummy;
hProc->SoRtns.SOPutBreak = CAST2 SODummy;
hProc->SoRtns.SOPutDataCell = CAST SODummy;
hProc->SoRtns.SOPutTextCell = CAST SODummy;
hProc->SoRtns.SOPutMoreText = CAST SODummy;
hProc->SoRtns.SOPutField = CAST SODummy;
hProc->SoRtns.SOPutVarField = CAST SODummy;
hProc->SoRtns.SOPutMoreVarField = CAST SODummy;
hProc->SoRtns.SOStartColumnInfo = CAST SODummy;
hProc->SoRtns.SOStartFieldInfo = CAST SODummy;
hProc->SoRtns.SOPutColumnInfo = CAST SODummy;
hProc->SoRtns.SOPutFieldInfo = CAST SODummy;
hProc->SoRtns.SOEndColumnInfo = CAST SODummy;
hProc->SoRtns.SOEndFieldInfo = CAST SODummy;
hProc->SoRtns.SOPutSectionType = CAST SODummy;
hProc->SoRtns.SOPutSectionName = CAST SODummy;
hProc->SoRtns.SOSetDateBase = CAST SODummy;
hProc->SoRtns.SOBailOut = CAST SODummy;
hProc->SoRtns.SOTagBegin = CAST SODummy;
hProc->SoRtns.SOTagEnd = CAST SODummy;
hProc->SoRtns.SOGetInfo = CAST SODummy;
hProc->SoRtns.SOPutString = CAST SODummy;
hProc->SoRtns.SUUserSaveData = CAST2 SODummy;
hProc->SoRtns.SUUserRetrieveData = CAST2 SODummy;
hProc->SoRtns.SOPutBitmapHeader = CAST SODummy;
hProc->SoRtns.SOStartPalette = CAST SODummy;
hProc->SoRtns.SOPutPaletteEntry = CAST SODummy;
hProc->SoRtns.SOEndPalette = CAST SODummy;
hProc->SoRtns.SOPutScanLineData = CAST2 SODummy;
hProc->SoRtns.SOStartFontTable = CAST SODummy;
hProc->SoRtns.SOPutFontTableEntry = CAST SODummy;
hProc->SoRtns.SOEndFontTable = CAST SODummy;
hProc->SoRtns.SOPutCharFontById = CAST SODummy;
hProc->SoRtns.SOPutCharFontByName = CAST SODummy;
hProc->SoRtns.SOPutParaSpacing = CAST SODummy;
hProc->SoRtns.SOPutArchiveField = CAST SODummy;
hProc->SoRtns.SOStartHdrInfo = CAST SODummy;
hProc->SoRtns.SOEndHdrInfo = CAST SODummy;
hProc->SoRtns.SOPutHdrEntry = CAST SODummy;
hProc->SoRtns.SOPutVectorHeader = CAST SODummy;
hProc->SoRtns.SOVectorObject = CAST SODummy;
hProc->SoRtns.SOVectorAttr = CAST SODummy;
hProc->SoRtns.SOBeginTable = CAST SODummy;
hProc->SoRtns.SOEndTable = CAST SODummy;
hProc->SoRtns.SOPutTableRowFormat = CAST SODummy;
hProc->SoRtns.SOPutTableCellInfo = CAST SODummy;
hProc->SoRtns.SOPutGraphicObject = CAST SODummy;
hProc->SoRtns.SOGoToPosition = CAST SODummy;
hProc->SoRtns.SODrawLine = CAST SODummy;
hProc->SoRtns.SOCellLayoutInfo = CAST SODummy;
hProc->SoRtns.SOBeginTag = CAST SODummy;
hProc->SoRtns.SOEndTag = CAST SODummy;
hProc->SoRtns.SOPutLanguage = CAST SODummy;
#undef CAST
}
VW_ENTRYSC VOID VW_ENTRYMOD VwLocalDownFunc(hFile,phFile,hProc)
SOFILE hFile;
HIOFILE VWPTR * phFile;
HPROC hProc;
{
#ifndef VwBlockIOOnly
#ifndef VwBlockIOFile
*phFile = (HIOFILE)xchartoblock((PVXIO)hFile);
#else /*NOT VwBlockIOFile*/
*phFile = (HIOFILE)hFile;
#endif
#else
*phFile = (HIOFILE)hFile;
#endif /*NOT VwBlockIOOnly*/
}
#ifdef WINDOWS
#define CAST (VOID FAR *)
#define CAST2 (VOID FAR *)
#define CASTIO (VOID FAR *)
#define SO_PFUNC SO_ENTRYMOD *
#endif /*WINDOWS*/
#ifdef MAC
#define CAST (VOID *)
#define CAST2 (VOID *)
#define CASTIO (VOID *)
#define SO_PFUNC SO_ENTRYMOD *
#endif /*MAC*/
#ifdef OS2
#define CAST (VOID (* SO_ENTRYMOD)())
#define CAST2 (WORD (* SO_ENTRYMOD)())
#define CASTIO (SHORT (* SO_ENTRYMOD)())
#define SO_PFUNC * SO_ENTRYMOD
#endif /*OS/2*/
VW_ENTRYSC VOID VW_ENTRYMOD VwSetSoRtnFunc(wRtn,pRtn,hProc)
SHORT wRtn;
VOID (SO_PFUNC pRtn)();
HPROC hProc;
{
if (pRtn == NULL)
pRtn = CAST SODummy;
switch (wRtn)
{
case SOPUTCHAR:
hProc->SoRtns.SOPutChar = CAST pRtn;
break;
case SOPUTCHARX:
hProc->SoRtns.SOPutCharX = CAST pRtn;
break;
case SOPUTSPECIALCHARX:
hProc->SoRtns.SOPutSpecialCharX = CAST pRtn;
break;
case SOPUTCHARATTR:
hProc->SoRtns.SOPutCharAttr = CAST pRtn;
break;
case SOPUTCHARHEIGHT:
hProc->SoRtns.SOPutCharHeight = CAST pRtn;
break;
case SOPUTPARAALIGN:
hProc->SoRtns.SOPutParaAlign = CAST pRtn;
break;
case SOPUTPARAINDENTS:
hProc->SoRtns.SOPutParaIndents = CAST pRtn;
break;
case SOSTARTTABSTOPS:
hProc->SoRtns.SOStartTabStops = CAST pRtn;
break;
case SOENDTABSTOPS:
hProc->SoRtns.SOEndTabStops = CAST pRtn;
break;
case SOPUTTABSTOP:
hProc->SoRtns.SOPutTabStop = CAST pRtn;
break;
case SOPUTMARGINS:
hProc->SoRtns.SOPutMargins = CAST pRtn;
break;
case SOPUTSUBDOCINFO:
hProc->SoRtns.SOPutSubdocInfo = CAST pRtn;
break;
case SOPUTBREAK:
hProc->SoRtns.SOPutBreak = CAST2 pRtn;
break;
case SOPUTDATACELL:
hProc->SoRtns.SOPutDataCell = CAST pRtn;
break;
case SOPUTTEXTCELL:
hProc->SoRtns.SOPutTextCell = CAST pRtn;
break;
case SOPUTMORETEXT:
hProc->SoRtns.SOPutMoreText = CAST pRtn;
break;
case SOPUTFIELD:
hProc->SoRtns.SOPutField = CAST pRtn;
break;
case SOPUTVARFIELD:
hProc->SoRtns.SOPutVarField = CAST pRtn;
break;
case SOPUTMOREVARFIELD:
hProc->SoRtns.SOPutMoreVarField = CAST pRtn;
break;
case SOSTARTCOLUMNINFO:
hProc->SoRtns.SOStartColumnInfo = CAST pRtn;
break;
case SOSTARTFIELDINFO:
hProc->SoRtns.SOStartFieldInfo = CAST pRtn;
break;
case SOPUTCOLUMNINFO:
hProc->SoRtns.SOPutColumnInfo = CAST pRtn;
break;
case SOPUTFIELDINFO:
hProc->SoRtns.SOPutFieldInfo = CAST pRtn;
break;
case SOENDCOLUMNINFO:
hProc->SoRtns.SOEndColumnInfo = CAST pRtn;
break;
case SOENDFIELDINFO:
hProc->SoRtns.SOEndFieldInfo = CAST pRtn;
break;
case SOPUTSECTIONTYPE:
hProc->SoRtns.SOPutSectionType = CAST pRtn;
break;
case SOPUTSECTIONNAME:
hProc->SoRtns.SOPutSectionName = CAST pRtn;
break;
case SOSETDATEBASE:
hProc->SoRtns.SOSetDateBase = CAST pRtn;
break;
case SOBAILOUT:
hProc->SoRtns.SOBailOut = CAST pRtn;
break;
case SOTAGBEGIN:
hProc->SoRtns.SOTagBegin = CAST pRtn;
break;
case SOTAGEND:
hProc->SoRtns.SOTagEnd = CAST pRtn;
break;
case SOGETINFO:
hProc->SoRtns.SOGetInfo = CAST pRtn;
break;
case SOPUTSTRING:
hProc->SoRtns.SOPutString = CAST pRtn;
break;
case SUUSERSAVEDATA:
hProc->SoRtns.SUUserSaveData = CAST2 pRtn;
break;
case SUUSERRETRIEVEDATA:
hProc->SoRtns.SUUserRetrieveData = CAST2 pRtn;
break;
case SOPUTBITMAPHEADER:
hProc->SoRtns.SOPutBitmapHeader = CAST pRtn;
break;
case SOSTARTPALETTE:
hProc->SoRtns.SOStartPalette = CAST pRtn;
break;
case SOPUTPALETTEENTRY:
hProc->SoRtns.SOPutPaletteEntry = CAST pRtn;
break;
case SOENDPALETTE:
hProc->SoRtns.SOEndPalette = CAST pRtn;
break;
case SOPUTSCANLINEDATA:
hProc->SoRtns.SOPutScanLineData = CAST2 pRtn;
break;
case SOSTARTFONTTABLE:
hProc->SoRtns.SOStartFontTable = CAST pRtn;
break;
case SOPUTFONTTABLEENTRY:
hProc->SoRtns.SOPutFontTableEntry = CAST pRtn;
break;
case SOENDFONTTABLE:
hProc->SoRtns.SOEndFontTable = CAST pRtn;
break;
case SOPUTCHARFONTBYID:
hProc->SoRtns.SOPutCharFontById = CAST pRtn;
break;
case SOPUTCHARFONTBYNAME:
hProc->SoRtns.SOPutCharFontByName = CAST pRtn;
break;
case SOPUTPARASPACING:
hProc->SoRtns.SOPutParaSpacing = CAST pRtn;
break;
case SOPUTARCHIVEFIELD:
hProc->SoRtns.SOPutArchiveField = CAST pRtn;
break;
case SOSTARTHDRINFO:
hProc->SoRtns.SOStartHdrInfo = CAST pRtn;
break;
case SOENDHDRINFO:
hProc->SoRtns.SOEndHdrInfo = CAST pRtn;
break;
case SOPUTHDRENTRY:
hProc->SoRtns.SOPutHdrEntry = CAST pRtn;
break;
case SOPUTVECTORHEADER:
hProc->SoRtns.SOPutVectorHeader = CAST pRtn;
break;
case SOVECTOROBJECT:
hProc->SoRtns.SOVectorObject = CAST pRtn;
break;
case SOVECTORATTR:
hProc->SoRtns.SOVectorAttr = CAST pRtn;
break;
case SOBEGINTABLE:
hProc->SoRtns.SOBeginTable = CAST pRtn;
break;
case SOENDTABLE:
hProc->SoRtns.SOEndTable = CAST pRtn;
break;
case SOPUTTABLEROWFORMAT:
hProc->SoRtns.SOPutTableRowFormat = CAST pRtn;
break;
case SOPUTTABLECELLINFO:
hProc->SoRtns.SOPutTableCellInfo = CAST pRtn;
break;
case SOPUTGRAPHICOBJECT:
hProc->SoRtns.SOPutGraphicObject = CAST pRtn;
break;
case SOGOTOPOSITION:
hProc->SoRtns.SOGoToPosition = CAST pRtn;
break;
case SODRAWLINE:
hProc->SoRtns.SODrawLine = CAST pRtn;
break;
case SOCELLLAYOUTINFO:
hProc->SoRtns.SOCellLayoutInfo = CAST pRtn;
break;
case SOBEGINTAG:
hProc->SoRtns.SOBeginTag = CAST pRtn;
break;
case SOENDTAG:
hProc->SoRtns.SOEndTag = CAST pRtn;
break;
case SOPUTLANGUAGE:
hProc->SoRtns.SOPutLanguage = CAST pRtn;
break;
}
#undef CAST
#undef CAST2
#undef CASTIO
}
VW_ENTRYSC VOID VW_ENTRYMOD VwSetUserFunc(dwUser1,dwUser2,hProc)
DWORD dwUser1;
DWORD dwUser2;
HPROC hProc;
{
hProc->User1 = dwUser1;
hProc->User2 = dwUser2;
}
VW_ENTRYSC VOID VW_ENTRYMOD VwGetRtnsFunc(pRtns,wLastRtn)
VWRTNS VWPTR * pRtns;
WORD wLastRtn;
{
#ifdef WINDOWS
#define FUNCTIONNAME(func) func
#define CAST (VOID FAR *)
#define CASTHPROC (VOID FAR *)
#endif /*WINDOWS*/
#ifdef MAC
#define FUNCTIONNAME(func) x##func
#define CAST (VOID *)
#define CASTHPROC (VOID * )
#endif /*MAC*/
#ifdef OS2
#define FUNCTIONNAME(func) func
#define CAST (VOID (* SO_ENTRYMOD)())
#define CASTHPROC (HPROC (* SO_ENTRYMOD)() )
#endif /*OS/2*/
#ifdef VwStreamOpenFunc
pRtns->StreamOpen = FUNCTIONNAME(VwStreamOpen);
#else
pRtns->StreamOpen = NULL;
#endif
#ifdef VwStreamSectionFunc
pRtns->StreamSection = FUNCTIONNAME(VwStreamSection);
#else
pRtns->StreamSection = NULL;
#endif
#ifdef VwStreamReadFunc
pRtns->StreamRead = FUNCTIONNAME(VwStreamRead);
#else
pRtns->StreamRead = NULL;
#endif
#ifdef VwStreamTellFunc
pRtns->StreamTell = FUNCTIONNAME(VwStreamTell);
#else
pRtns->StreamTell = NULL;
#endif
#ifdef VwStreamSeekFunc
pRtns->StreamSeek = FUNCTIONNAME(VwStreamSeek);
#else
pRtns->StreamSeek = NULL;
#endif
#ifdef VwGetInfoFunc
pRtns->GetInfo = FUNCTIONNAME(VwGetInfo);
#else
pRtns->GetInfo = NULL;
#endif
#ifdef VwGetDataFunc
pRtns->GetData = CAST FUNCTIONNAME(VwGetData);
#else
pRtns->GetData = NULL;
#endif
#ifdef VwSetDataFunc
pRtns->SetData = CAST FUNCTIONNAME(VwSetData);
#else
pRtns->SetData = NULL;
#endif
#ifdef VwLocalUpFunc
pRtns->LocalUp = FUNCTIONNAME(VwLocalUp);
#else
pRtns->LocalUp = NULL;
#endif
#ifdef VwLocalDownFunc
pRtns->LocalDown = FUNCTIONNAME(VwLocalDown);
#else
pRtns->LocalDown = NULL;
#endif
#ifdef VwAllocProcFunc
pRtns->AllocProc = CASTHPROC FUNCTIONNAME(VwAllocProc);
#else
pRtns->AllocProc = NULL;
#endif
#ifdef VwFreeProcFunc
pRtns->FreeProc = FUNCTIONNAME(VwFreeProc);
#else
pRtns->FreeProc = NULL;
#endif
#ifdef VwSetUserFunc
pRtns->SetUser = FUNCTIONNAME(VwSetUser);
#else
pRtns->SetUser = NULL;
#endif
#ifdef VwSetSoRtnFunc
pRtns->SetSoRtn = FUNCTIONNAME(VwSetSoRtn);
#else
pRtns->SetSoRtn = NULL;
#endif
#ifdef VwStreamCloseFunc
pRtns->StreamClose = FUNCTIONNAME(VwStreamClose);
#else
pRtns->StreamClose = NULL;
#endif
#ifdef VwStreamSectionType
#ifdef VwGetSectionDataFunc
pRtns->GetSectionData = CAST FUNCTIONNAME(VwGetSectionData);
#else
pRtns->GetSectionData = NULL;
#endif
#else
pRtns->GetSectionData = NULL;
#endif
#ifdef VwStreamSectionType
#ifdef VwSetSectionDataFunc
pRtns->SetSectionData = CAST FUNCTIONNAME(VwSetSectionData);
#else
pRtns->SetSectionData = NULL;
#endif
#else
pRtns->SetSectionData = NULL;
#endif
#ifdef VwStreamReadRecordFunc
pRtns->StreamReadRecord = FUNCTIONNAME(VwStreamReadRecord);
#else
pRtns->StreamReadRecord = NULL;
#endif
if (wLastRtn >= VWRTN_DOSPECIAL)
{
#ifdef VwDoSpecialFunc
pRtns->DoSpecial = FUNCTIONNAME(VwDoSpecial);
#else
pRtns->DoSpecial = NULL;
#endif
}
#undef CAST
#undef FUNCTIONNAME
#undef CASTHPROC
}
/*
| Filter macro for bitmap filters
*/
#define SetRGBPixel(pDest,pRGB) {*(BYTE VWPTR *)pDest++=((BYTE VWPTR *)pRGB)[2];*(BYTE VWPTR *)pDest++=((BYTE VWPTR *)pRGB)[1];*(BYTE VWPTR *)pDest++=*((BYTE VWPTR *)pRGB);}
/*
| SO routine macros
*/
#define SOPutChar(a,hP) (hP->SoRtns.SOPutChar)(a,hP->User1,hP->User2)
#define SOPutCharX(a,b,hP) (hP->SoRtns.SOPutCharX)(a,b,hP->User1,hP->User2)
#define SOPutSpecialCharX(a,b,hP) (hP->SoRtns.SOPutSpecialCharX)(a,b,hP->User1,hP->User2)
#define SOPutCharAttr(a,b,hP) (hP->SoRtns.SOPutCharAttr)(a,b,hP->User1,hP->User2)
#define SOPutCharHeight(a,hP) (hP->SoRtns.SOPutCharHeight)(a,hP->User1,hP->User2)
#define SOPutParaAlign(a,hP) (hP->SoRtns.SOPutParaAlign)(a,hP->User1,hP->User2)
#define SOPutParaIndents(a,b,c,hP) (hP->SoRtns.SOPutParaIndents)(a,b,c,hP->User1,hP->User2)
#define SOStartTabStops(hP) (hP->SoRtns.SOStartTabStops)(hP->User1,hP->User2)
#define SOEndTabStops(hP) (hP->SoRtns.SOEndTabStops)(hP->User1,hP->User2)
#define SOPutTabStop(a,hP) (hP->SoRtns.SOPutTabStop)(a,hP->User1,hP->User2)
#define SOPutMargins(a,b,hP) (hP->SoRtns.SOPutMargins)(a,b,hP->User1,hP->User2)
#define SOPutBreak(a,b,hP) (hP->SoRtns.SOPutBreak)(a,(DWORD)(b),hP->User1,hP->User2)
#define SOPutSubdocInfo(a,b,hP) (hP->SoRtns.SOPutSubdocInfo)(a,b,hP->User1,hP->User2)
#define SOPutTextCell(a,b,c,d,hP) (hP->SoRtns.SOPutTextCell)(a,b,c,d,hP->User1,hP->User2)
#define SOPutMoreText(a,b,c,hP) (hP->SoRtns.SOPutMoreText)(a,b,c,hP->User1,hP->User2)
#define SOPutDataCell(a,hP) (hP->SoRtns.SOPutDataCell)(a,hP->User1,hP->User2)
#define SOPutField(a,hP) (hP->SoRtns.SOPutField)(a,hP->User1,hP->User2)
#define SOPutVarField(a,b,c,hP) (hP->SoRtns.SOPutVarField)(a,b,c,hP->User1,hP->User2)
#define SOPutMoreVarField(a,b,c,hP) (hP->SoRtns.SOPutMoreVarField)(a,b,c,hP->User1,hP->User2)
#define SOStartColumnInfo(hP) (hP->SoRtns.SOStartColumnInfo)(hP->User1,hP->User2)
#define SOStartFieldInfo(hP) (hP->SoRtns.SOStartFieldInfo)(hP->User1,hP->User2)
#define SOPutColumnInfo(a,hP) (hP->SoRtns.SOPutColumnInfo)(a,hP->User1,hP->User2)
#define SOPutFieldInfo(a,hP) (hP->SoRtns.SOPutFieldInfo)(a,hP->User1,hP->User2)
#define SOEndColumnInfo(hP) (hP->SoRtns.SOEndColumnInfo)(hP->User1,hP->User2)
#define SOEndFieldInfo(hP) (hP->SoRtns.SOEndFieldInfo)(hP->User1,hP->User2)
#define SOPutSectionType(a,hP) (hP->SoRtns.SOPutSectionType)(a,hP->User1,hP->User2)
#define SOPutSectionName(a,hP) (hP->SoRtns.SOPutSectionName)(a,hP->User1,hP->User2)
#define SOSetDateBase(a,b,hP) (hP->SoRtns.SOSetDateBase)(a,b,hP->User1,hP->User2)
#define SOBailOut(a,hP) (hP->SoRtns.SOBailOut)(a,hP->User1,hP->User2)
#define SOTagBegin(a,hP) (hP->SoRtns.SOTagBegin)(a,hP->User1,hP->User2)
#define SOTagEnd(hP) (hP->SoRtns.SOTagEnd)(hP->User1,hP->User2)
#define SOGetInfo(a,b,hP) (hP->SoRtns.SOGetInfo)(a,b,hP->User1,hP->User2)
#define SUUserSaveData(a,hP) (hP->SoRtns.SUUserSaveData)(a,hP->User1,hP->User2)
#define SUUserRetrieveData(a,b,hP) (hP->SoRtns.SUUserRetrieveData)(a,b,hP->User1,hP->User2)
#define SOPutBitmapHeader(a,hP) (hP->SoRtns.SOPutBitmapHeader)(a,hP->User1,hP->User2)
#define SOStartPalette(hP) (hP->SoRtns.SOStartPalette)(hP->User1,hP->User2)
#define SOPutPaletteEntry(a,b,c,hP) (hP->SoRtns.SOPutPaletteEntry)(a,b,c,hP->User1,hP->User2)
#define SOEndPalette(hP) (hP->SoRtns.SOEndPalette)(hP->User1,hP->User2)
#define SOPutScanLineData(a,hP) (hP->SoRtns.SOPutScanLineData)(a,hP->User1,hP->User2)
#define SOPutCharFontById(a,hP) (hP->SoRtns.SOPutCharFontById)(a,hP->User1,hP->User2)
#define SOPutCharFontByName(a,b,hP) (hP->SoRtns.SOPutCharFontByName)(a,b,hP->User1,hP->User2)
#define SOPutParaSpacing(a,b,c,d,hP) (hP->SoRtns.SOPutParaSpacing)(a,b,c,d,hP->User1,hP->User2)
#define SOStartFontTable(hP) (hP->SoRtns.SOStartFontTable)(hP->User1,hP->User2)
#define SOPutFontTableEntry(a,b,c,hP) (hP->SoRtns.SOPutFontTableEntry)(a,b,c,hP->User1,hP->User2)
#define SOEndFontTable(hP) (hP->SoRtns.SOEndFontTable)(hP->User1,hP->User2)
#define SOPutArchiveField(a,b,c,hP) (hP->SoRtns.SOPutArchiveField)(a,b,c,hP->User1,hP->User2)
#define SOStartHdrInfo(hP) (hP->SoRtns.SOStartHdrInfo)(hP->User1,hP->User2)
#define SOEndHdrInfo(hP) (hP->SoRtns.SOEndHdrInfo)(hP->User1,hP->User2)
#define SOPutHdrEntry(a,b,c,hP) (hP->SoRtns.SOPutHdrEntry)(a,b,c,hP->User1,hP->User2)
#define SOPutVectorHeader(a,hP) (hP->SoRtns.SOPutVectorHeader)(a,hP->User1,hP->User2)
#define SOVectorObject(a,b,c,hP) (hP->SoRtns.SOVectorObject)(a,b,c,hP->User1,hP->User2)
#define SOVectorAttr(a,b,c,hP) (hP->SoRtns.SOVectorAttr)(a,b,c,hP->User1,hP->User2)
#define SOBeginTable(hP) (hP->SoRtns.SOBeginTable)(hP->User1,hP->User2)
#define SOEndTable(hP) (hP->SoRtns.SOEndTable)(hP->User1,hP->User2)
#define SOPutTableRowFormat(a,b,c,d,e,f,hP) (hP->SoRtns.SOPutTableRowFormat)(a,b,c,d,e,f,hP->User1,hP->User2)
#define SOPutTableCellInfo(a,hP) (hP->SoRtns.SOPutTableCellInfo)(a,hP->User1,hP->User2)
#define SOPutGraphicObject(a,hP) (hP->SoRtns.SOPutGraphicObject)(a,hP->User1,hP->User2)
#define SOGoToPosition(a,hP) (hP->SoRtns.SOGoToPosition)(a,hP->User1,hP->User2)
#define SODrawLine(a,b,c,d,e,hP) (hP->SoRtns.SODrawLine)(a,b,c,d,e,hP->User1,hP->User2)
#define SOCellLayoutInfo(a,hP) (hP->SoRtns.SOCellLayoutInfo)(a,hP->User1,hP->User2)
#define SOBeginTag(a,b,c,hp) (hp->SoRtns.SOBeginTag)(a,b,c,hp->User1,hp->User2)
#define SOEndTag(a,b,hp) (hp->SoRtns.SOEndTag)(a,b,hp->User1,hp->User2)
#define SOPutLanguage(a,hp) (hp->SoRtns.SOPutLanguage)(a,hp->User1,hp->User2)