home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / winui / shell / fparser / vsctop.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-02-03  |  27.7 KB  |  1,036 lines

  1. #ifdef WIN32
  2. #define WINDOWS
  3. #endif
  4.  
  5. #ifdef _WINDOWS /* MS C 7.0 predefined */
  6. #ifndef WIN32
  7. #define WINDOWS
  8. #define WIN16
  9. #endif
  10. #endif
  11.  
  12. #ifdef WINDOWS
  13. #pragma message("Windows")
  14. #endif
  15.  
  16. #ifdef WIN16
  17. #pragma message("Win16")
  18. #endif
  19.  
  20. #ifdef WIN32
  21. #pragma message("Win32")
  22. #endif
  23.  
  24.     /*
  25.     |     Include windows and scc definitions
  26.     */
  27.  
  28. #include "entry.h"
  29. #include "stdlib.h"
  30. #include <windows.h>
  31.  
  32. typedef signed char  *    LPCHAR;
  33. typedef signed short  *    LPSHORT;
  34.  
  35. typedef DWORD HIOFILE;
  36. #define HUGE    
  37.  
  38.  
  39. #define xseek _llseek
  40. #define xtell _ltell
  41. #define xopen _lopen
  42. #define xclose _lclose
  43. #define xread  _lread
  44.  
  45. // #include "sccfi.h"
  46.  
  47. /*
  48. |
  49. |   Typedef for FI information and get structure
  50. |
  51. */
  52.  
  53. typedef struct FIINFOtag
  54.    {
  55.    WORD      fiId;            /* FI Id */
  56.    WORD      fiFlags;            /* flags for the Id */
  57.    BYTE      fiName[26];        /* name of the Id, for example "WordPerfect 5.0" */
  58.    } FIINFO;
  59.  
  60. typedef struct FIGETSTRUCTtag
  61.    {
  62.    HANDLE   gsRes;
  63.    WORD     gsIndex;
  64.    } FIGETSTRUCT;
  65.  
  66. #include "sodefs.h"
  67.  
  68. #ifdef WINDOWS
  69. #define DECLSO    VOID (SO_ENTRYMOD *)()
  70. #endif /*WINDOWS*/
  71.  
  72.     /*
  73.     |    Include viewer's data types and typedef HPROC
  74.     */
  75.  
  76. #include VwInclude
  77.  
  78. typedef struct PROCtag
  79.     {
  80.     VwStreamDynamicType    VwData;
  81.     SORTNS                    SoRtns;
  82.     DWORD                        User1;
  83.     DWORD                        User2;
  84.     LONG                        lTellOffset;
  85.     } NEAR * HPROC;
  86.  
  87. #include "vwdefs.h"
  88.  
  89.     /*
  90.     |    Do functions prototypes for Vw functions
  91.     */
  92.  
  93. extern    FILTER_DESC    VwStreamIdName[];
  94.  
  95. #ifdef VwStreamStaticType
  96. extern    VwStreamStaticType VwStreamStaticName;
  97. #endif
  98.  
  99. #ifdef VwStreamOpenFunc
  100. #undef VwStreamOpenFunc
  101. #define VwStreamOpenFunc            VwStreamOpen
  102. VW_ENTRYSC SHORT VW_ENTRYMOD    VwStreamOpenFunc(SOFILE, SHORT, BYTE VWPTR *, SOFILTERINFO VWPTR * ,HPROC);
  103. #endif
  104.  
  105. #ifdef VwStreamCloseFunc
  106.  
  107. #undef VwStreamCloseFunc
  108. #define VwStreamCloseFunc        VwStreamClose
  109. VW_ENTRYSC VOID VW_ENTRYMOD    VwStreamCloseFunc(SOFILE, HPROC);
  110.  
  111. #else
  112.  
  113. #undef VwStreamCloseFunc
  114. #define VwStreamCloseFunc        VwStreamClose
  115. VW_ENTRYSC VOID VW_ENTRYMOD    VwStreamCloseFunc(SOFILE, HPROC);
  116. VW_ENTRYSC VOID VW_ENTRYMOD VwStreamCloseFunc(hFile,hProc)
  117. SOFILE            hFile;
  118. HPROC            hProc;
  119. {
  120. }
  121.  
  122. #endif
  123.  
  124. #ifdef VwStreamSectionFunc
  125. #undef VwStreamSectionFunc
  126. #define VwStreamSectionFunc            VwStreamSection
  127. VW_ENTRYSC SHORT VW_ENTRYMOD    VwStreamSectionFunc(SOFILE, HPROC);
  128. #endif
  129.  
  130. #ifdef VwStreamReadFunc        
  131. #undef VwStreamReadFunc        
  132. #define VwStreamReadFunc        VwStreamRead
  133. VW_ENTRYSC SHORT VW_ENTRYMOD    VwStreamReadFunc(SOFILE, HPROC);
  134. #endif
  135.  
  136. #ifdef VwStreamReadRecordFunc
  137.  
  138. #undef VwStreamReadRecordFunc
  139. #define VwStreamReadRecordFunc    VwStreamReadRecord
  140. VW_ENTRYSC VOID VW_ENTRYMOD        VwStreamReadRecordFunc(SOFILE, DWORD, HPROC);
  141.  
  142. #else
  143.  
  144. #define VwStreamReadRecordFunc    VwStreamReadRecord
  145. VW_ENTRYSC VOID VW_ENTRYMOD    VwStreamReadRecordFunc(SOFILE, DWORD, HPROC);
  146. VW_ENTRYSC VOID VW_ENTRYMOD    VwStreamReadRecordFunc(hFile,dwData,hProc)
  147. SOFILE    hFile;
  148. DWORD    dwData;
  149. HPROC    hProc;
  150. {
  151. }
  152.  
  153. #endif
  154.  
  155. #ifdef VwDoSpecialFunc
  156.  
  157. #undef VwDoSpecialFunc
  158. #define VwDoSpecialFunc            VwDoSpecial
  159. VW_ENTRYSC VOID VW_ENTRYMOD    VwDoSpecialFunc(SOFILE,DWORD,DWORD,DWORD,DWORD,DWORD,HPROC);
  160.  
  161. #else
  162.  
  163. #define VwDoSpecialFunc            VwDoSpecial
  164. VW_ENTRYSC VOID VW_ENTRYMOD    VwDoSpecialFunc(SOFILE,DWORD,DWORD,DWORD,DWORD,DWORD,HPROC);
  165. VW_ENTRYSC VOID VW_ENTRYMOD     VwDoSpecialFunc(hFile, dw1,dw2,dw3,dw4,dw5,hProc)
  166. SOFILE        hFile;
  167. DWORD        dw1;
  168. DWORD        dw2;
  169. DWORD        dw3;
  170. DWORD        dw4;
  171. DWORD        dw5;
  172. HPROC        hProc;
  173. {
  174. }
  175. #endif
  176.  
  177. #ifdef VwStreamTellFunc            
  178. #undef VwStreamTellFunc            
  179. #define VwStreamTellFunc        VwStreamTell
  180. VW_ENTRYSC SHORT VW_ENTRYMOD    VwStreamTellFunc(SOFILE, HPROC);
  181. #endif
  182.  
  183. #ifdef VwStreamSeekFunc            
  184. #undef VwStreamSeekFunc            
  185. #define VwStreamSeekFunc        VwStreamSeek
  186. VW_ENTRYSC SHORT VW_ENTRYMOD    VwStreamSeekFunc(SOFILE, HPROC);
  187. #endif
  188.  
  189. #ifdef VwGetInfoFunc    
  190. #undef VwGetInfoFunc    
  191. #define VwGetInfoFunc        VwGetInfo
  192. VW_ENTRYSC BOOL VW_ENTRYMOD    VwGetInfoFunc(VOID VWPTR *, WORD, HPROC);
  193. #endif
  194.  
  195. #ifdef VwGetRtnsFunc    
  196. #undef VwGetRtnsFunc    
  197. #define VwGetRtnsFunc        VwGetRtns
  198. VW_ENTRYSC VOID VW_ENTRYMOD VwGetRtnsFunc(VWRTNS VWPTR *, WORD);
  199. #endif
  200.  
  201. #ifdef VwGetDataFunc    
  202. #undef VwGetDataFunc    
  203. #define VwGetDataFunc        VwGetData
  204. VW_ENTRYSC VOID VW_ENTRYMOD    VwGetDataFunc(VwStreamSaveType VWPTR *, HPROC);
  205. #endif
  206.  
  207. #ifdef VwSetDataFunc    
  208. #undef VwSetDataFunc    
  209. #define VwSetDataFunc        VwSetData
  210. VW_ENTRYSC VOID VW_ENTRYMOD    VwSetDataFunc(VwStreamSaveType VWPTR *, HPROC);
  211. #endif
  212.  
  213. #ifdef VwStreamSectionType
  214.  
  215. #ifdef VwGetSectionDataFunc    
  216. #undef VwGetSectionDataFunc    
  217. #define VwGetSectionDataFunc        VwGetSectionData
  218. VW_ENTRYSC VOID VW_ENTRYMOD    VwGetSectionDataFunc(VwStreamSectionType VWPTR *, HPROC);
  219. #endif
  220.  
  221. #ifdef VwSetSectionDataFunc
  222. #undef VwSetSectionDataFunc
  223. #define VwSetSectionDataFunc        VwSetSectionData
  224. VW_ENTRYSC VOID VW_ENTRYMOD    VwSetSectionDataFunc(VwStreamSectionType VWPTR *, HPROC);
  225. #endif
  226.  
  227. #else
  228.  
  229. #ifdef VwGetSectionDataFunc    
  230. #undef VwGetSectionDataFunc    
  231. #endif
  232. #define VwGetSectionDataFunc        VwGetSectionData
  233. VW_ENTRYSC VOID VW_ENTRYMOD    VwGetSectionDataFunc(VOID VWPTR *, HPROC);
  234.  
  235. #ifdef VwSetSectionDataFunc
  236. #undef VwSetSectionDataFunc
  237. #endif
  238. #define VwSetSectionDataFunc        VwSetSectionData
  239. VW_ENTRYSC VOID VW_ENTRYMOD    VwSetSectionDataFunc(VOID VWPTR *, HPROC);
  240.  
  241. #endif
  242.  
  243. #ifdef VwLocalUpFunc    
  244. #undef VwLocalUpFunc    
  245. #define VwLocalUpFunc        VwLocalUp
  246. VW_ENTRYSC VOID VW_ENTRYMOD    VwLocalUpFunc(HIOFILE, SOFILE VWPTR *, HPROC);
  247. #endif
  248.  
  249. #ifdef VwLocalDownFunc    
  250. #undef VwLocalDownFunc    
  251. #define VwLocalDownFunc        VwLocalDown
  252. VW_ENTRYSC VOID VW_ENTRYMOD    VwLocalDownFunc(SOFILE, HIOFILE VWPTR *, HPROC);
  253. #endif
  254.  
  255. #ifdef VwAllocProcFunc    
  256. #undef VwAllocProcFunc    
  257. #define VwAllocProcFunc    VwAllocProc
  258. VW_ENTRYSC HPROC VW_ENTRYMOD    VwAllocProcFunc(VOID);
  259. #endif
  260.  
  261. #ifdef VwFreeProcFunc
  262. #undef VwFreeProcFunc
  263. #define VwFreeProcFunc    VwFreeProc
  264. VW_ENTRYSC VOID VW_ENTRYMOD    VwFreeProcFunc(HPROC);
  265. #endif
  266.  
  267. #define VwSetUserFunc    VwSetUser
  268. VW_ENTRYSC VOID VW_ENTRYMOD VwSetUserFunc(DWORD,DWORD,HPROC);
  269.  
  270. #define VwSetSoRtnFunc    VwSetSoRtn
  271. VW_ENTRYSC VOID VW_ENTRYMOD VwSetSoRtnFunc(SHORT, DECLSO, HPROC);
  272.  
  273. #ifdef VwStreamStaticType
  274. #define Init    VwStreamStaticName
  275. #endif
  276.  
  277. #define Proc (hProc->VwData)
  278.  
  279.     /*
  280.     | Make some standard library functions available
  281.     */
  282.  
  283. #ifdef WIN16
  284.  
  285. void far * far _cdecl _fmemmove(void far *, const void far *,    unsigned int);
  286. void far * far _cdecl _fmemcpy(void far *, const void far *,unsigned int);
  287. void far * far _cdecl _fmemset(void far *, int, unsigned int);
  288. int _cdecl atoi(const char *);
  289. long _cdecl atol(const char *);
  290. int Vatoi(char far *);
  291. long Vatol(char far *);
  292.  
  293. #define strcmp    lstrcmp
  294. #define strcmpi    lstrcmpi
  295. #define strcpy    lstrcpy
  296. #define strcat    lstrcat
  297. #define strlen    lstrlen
  298. #define memcpy    _fmemcpy
  299. #define memset    _fmemset
  300. #define memmove    _fmemmove
  301.  
  302. int Vatoi(pStr)
  303. char far * pStr;
  304. {
  305. static char locStr[20];
  306.  
  307.     lstrcpy(locStr,pStr);
  308.     return(atoi(locStr));
  309. }
  310.  
  311. long Vatol(pStr)
  312. char far * pStr;
  313. {
  314. static char locStr[20];
  315.  
  316.     lstrcpy(locStr,pStr);
  317.     return(atol(locStr));
  318. }
  319.  
  320. #define atoi(s)    Vatoi((char far *) s)
  321. #define atol(s)    Vatol((char far *) s)
  322.  
  323. #define itoa(num,str,x)    _itoa(num,str,x)
  324. #define ltoa(num,str,x)    _ltoa(num,str,x)
  325.  
  326. #define SUAlloc(size,hProc)                GlobalAlloc(GMEM_MOVEABLE,size)
  327. #define SUFree(handle,hProc)                GlobalFree(handle)
  328. #define SULock(handle,hProc)                ((VOID FAR *) GlobalLock(handle))
  329. #define SUUnlock(handle,hProc)            GlobalUnlock(handle)
  330. #define SUReAlloc(handle,size,hProc)    GlobalReAlloc(handle,size,0)
  331.  
  332. #define SUSeekEntry(hF,hProc)
  333.  
  334. #endif /*WIN16*/
  335.  
  336. #ifdef WIN32
  337.  
  338. #define SUAlloc(size,hProc)                GlobalAlloc(GMEM_MOVEABLE,size)
  339. #define SUFree(handle,hProc)                GlobalFree(handle)
  340. #define SULock(handle,hProc)                ((VOID FAR *) GlobalLock(handle))
  341. #define SUUnlock(handle,hProc)            GlobalUnlock(handle)
  342. #define SUReAlloc(handle,size,hProc)    GlobalReAlloc(handle,size,0)
  343.  
  344. #define SUSeekEntry(hF,hProc)
  345.  
  346. #endif /*WIN32*/
  347.  
  348. #ifdef WINDOWS
  349.  
  350. VW_ENTRYSC HPROC VW_ENTRYMOD VwAllocProcFunc()
  351. {
  352. HANDLE    hData;
  353.  
  354.     if ((hData = LocalAlloc(LMEM_FIXED | LMEM_ZEROINIT,sizeof(struct PROCtag))) == NULL)
  355.         return(NULL);
  356.     else
  357.         return((HPROC)LocalLock(hData));
  358. }
  359.  
  360. VW_ENTRYSC VOID VW_ENTRYMOD VwFreeProcFunc(hProc)
  361. HPROC    hProc;
  362. {
  363. HANDLE    hData;
  364.  
  365. #ifdef WIN16
  366.     if ((hData = LocalHandle((WORD)(VOID NEAR *)hProc)) != NULL)
  367.         LocalFree(hData);
  368. #endif /*WIN16*/
  369.  
  370. #ifdef WIN32
  371.     if ((hData = LocalHandle((LPVOID)hProc)) != NULL)
  372.         LocalFree(hData);
  373. #endif /*WIN32*/
  374.         
  375. }
  376.  
  377. #endif /*WINDOWS*/
  378.  
  379.  
  380. VW_ENTRYSC BOOL VW_ENTRYMOD VwGetInfoFunc(pInfo,wInfoId,hProc)
  381. VOID VWPTR *                pInfo;
  382. WORD                            wInfoId;
  383. HPROC                        hProc;
  384. {
  385. BOOL    locRet;
  386. WORD    locIndex;
  387.  
  388.     locRet = TRUE;
  389.  
  390.     switch (wInfoId)
  391.         {
  392.         case VWINFO_CHECK:
  393.             *(DWORD VWPTR *)pInfo = 0x12345678;
  394.             break;
  395.  
  396.         case VWINFO_SAVESIZE:
  397. #ifdef VwStreamSaveType
  398.             *(WORD VWPTR *)pInfo = sizeof(VwStreamSaveType);
  399. #else
  400.             *(WORD VWPTR *)pInfo = 0;
  401. #endif
  402.             break;
  403.  
  404.         case VWINFO_DYNAMICSIZE:
  405. #ifdef VwStreamDynamicType
  406.             *(WORD VWPTR *)pInfo = sizeof(VwStreamDynamicType);
  407. #else
  408.             *(WORD VWPTR *)pInfo = 0;
  409. #endif
  410.             break;
  411.  
  412.         case VWINFO_STATICSIZE:
  413. #ifdef VwStreamStaticType
  414.             *(WORD VWPTR *)pInfo = sizeof(VwStreamStaticType);
  415. #else
  416.             *(WORD VWPTR *)pInfo = 0;
  417. #endif
  418.             break;
  419.  
  420.         case VWINFO_SPECLEVEL:
  421.             *(WORD VWPTR *)pInfo = 400;
  422.             break;
  423.  
  424.         case VWINFO_FILTERLEVEL:
  425.             *(WORD VWPTR *)pInfo = 410;
  426.             break;
  427.  
  428.         case VWINFO_IDCOUNT:
  429.             *(WORD VWPTR *)pInfo = VwStreamIdCount;
  430.             break;
  431.  
  432.         case VWINFO_IDS:
  433.             for (locIndex = 0; locIndex < VwStreamIdCount; locIndex++)
  434.                 {
  435.                 ((WORD VWPTR *)pInfo)[locIndex] = VwStreamIdName[locIndex].FilterId;
  436.                 }
  437.             break;
  438.  
  439.         case VWINFO_DATE:
  440.             strcpy((BYTE VWPTR *)pInfo,__DATE__);
  441.             break;
  442.  
  443.         case VWINFO_TIME:
  444.             strcpy((BYTE VWPTR *)pInfo,__TIME__);
  445.             break;
  446.  
  447.         case VWINFO_USERSAVESIZE:
  448. #ifdef VwStreamUserSaveType
  449.             *(WORD VWPTR *)pInfo = sizeof(VwStreamUserSaveType);
  450. #else
  451.             *(WORD VWPTR *)pInfo = 0;
  452. #endif
  453.             break;
  454.  
  455.         case VWINFO_SECTIONSAVESIZE:
  456. #ifdef VwStreamSectionType
  457.             *(WORD VWPTR *)pInfo = sizeof(VwStreamSectionType);
  458. #else
  459.             *(WORD VWPTR *)pInfo = 0;
  460. #endif
  461.             break;
  462.  
  463.         default:
  464.             locRet = FALSE;
  465.             break;
  466.         }
  467.  
  468.     return(locRet);
  469. }
  470.  
  471. VW_ENTRYSC VOID VW_ENTRYMOD VwGetDataFunc(pSaveData,hProc)
  472. VwStreamSaveType VWPTR *    pSaveData;
  473. HPROC                            hProc;
  474. {
  475.     *pSaveData = Proc.VwStreamSaveName;
  476. }
  477.  
  478. VW_ENTRYSC VOID VW_ENTRYMOD VwSetDataFunc(pSaveData,hProc)
  479. VwStreamSaveType VWPTR *    pSaveData;
  480. HPROC                            hProc;
  481. {
  482.     Proc.VwStreamSaveName = *pSaveData;
  483. }
  484.  
  485. #ifdef VwStreamSectionType
  486.  
  487. VW_ENTRYSC VOID VW_ENTRYMOD VwGetSectionDataFunc(pSectionData,hProc)
  488. VwStreamSectionType VWPTR *    pSectionData;
  489. HPROC                                hProc;
  490. {
  491.     *pSectionData = Proc.VwStreamSectionName;
  492. }
  493.  
  494. VW_ENTRYSC VOID VW_ENTRYMOD VwSetSectionDataFunc(pSectionData,hProc)
  495. VwStreamSectionType VWPTR *    pSectionData;
  496. HPROC                                hProc;
  497. {
  498.     Proc.VwStreamSectionName = *pSectionData;
  499. }
  500.  
  501. #else
  502.  
  503. VW_ENTRYSC VOID VW_ENTRYMOD VwGetSectionDataFunc(pSectionData,hProc)
  504. VOID VWPTR *    pSectionData;
  505. HPROC            hProc;
  506. {
  507. }
  508.  
  509. VW_ENTRYSC VOID VW_ENTRYMOD VwSetSectionDataFunc(pSectionData,hProc)
  510. VOID VWPTR *    pSectionData;
  511. HPROC            hProc;
  512. {
  513. }
  514.  
  515. #endif
  516.  
  517. VOID FAR SODummy()
  518. {
  519. }
  520.  
  521. VW_ENTRYSC VOID VW_ENTRYMOD VwLocalUpFunc(hFile,phFile,hProc)
  522. HIOFILE                    hFile;
  523. SOFILE VWPTR *        phFile;
  524. HPROC                    hProc;
  525. {
  526.     *phFile = (SOFILE)hFile;
  527.  
  528. #ifdef WINDOWS
  529. #define CAST    (VOID FAR *)
  530. #define CAST2    (VOID FAR *)
  531. #endif /*WINDOWS*/
  532.  
  533.     hProc->SoRtns.SOPutChar = CAST SODummy;
  534.     hProc->SoRtns.SOPutCharX = CAST SODummy;
  535.     hProc->SoRtns.SOPutSpecialCharX = CAST SODummy;
  536.     hProc->SoRtns.SOPutCharAttr = CAST SODummy;
  537.     hProc->SoRtns.SOPutCharHeight = CAST SODummy;
  538.     hProc->SoRtns.SOPutParaAlign = CAST SODummy;
  539.     hProc->SoRtns.SOPutParaIndents = CAST SODummy;
  540.     hProc->SoRtns.SOStartTabStops = CAST SODummy;
  541.     hProc->SoRtns.SOEndTabStops = CAST SODummy;
  542.     hProc->SoRtns.SOPutTabStop = CAST SODummy;
  543.     hProc->SoRtns.SOPutMargins = CAST SODummy;
  544.     hProc->SoRtns.SOPutSubdocInfo = CAST SODummy;
  545.     hProc->SoRtns.SOPutBreak = CAST2 SODummy;
  546.     hProc->SoRtns.SOPutDataCell = CAST SODummy;
  547.     hProc->SoRtns.SOPutTextCell = CAST SODummy;
  548.     hProc->SoRtns.SOPutMoreText = CAST SODummy;
  549.     hProc->SoRtns.SOPutField = CAST SODummy;
  550.     hProc->SoRtns.SOPutVarField = CAST SODummy;
  551.     hProc->SoRtns.SOPutMoreVarField = CAST SODummy;
  552.     hProc->SoRtns.SOStartColumnInfo = CAST SODummy;
  553.     hProc->SoRtns.SOStartFieldInfo = CAST SODummy;
  554.     hProc->SoRtns.SOPutColumnInfo = CAST SODummy;
  555.     hProc->SoRtns.SOPutFieldInfo = CAST SODummy;
  556.     hProc->SoRtns.SOEndColumnInfo = CAST SODummy;
  557.     hProc->SoRtns.SOEndFieldInfo = CAST SODummy;
  558.     hProc->SoRtns.SOPutSectionType = CAST SODummy;
  559.     hProc->SoRtns.SOPutSectionName = CAST SODummy;
  560.     hProc->SoRtns.SOSetDateBase = CAST SODummy;
  561.     hProc->SoRtns.SOBailOut = CAST SODummy;
  562.     hProc->SoRtns.SOTagBegin = CAST SODummy;
  563.     hProc->SoRtns.SOTagEnd = CAST SODummy;
  564.     hProc->SoRtns.SOGetInfo = CAST SODummy;
  565.     hProc->SoRtns.SOPutString = CAST SODummy;
  566.     hProc->SoRtns.SUUserSaveData = CAST2 SODummy;
  567.     hProc->SoRtns.SUUserRetrieveData = CAST2 SODummy;
  568.     hProc->SoRtns.SOPutBitmapHeader  = CAST SODummy;
  569.     hProc->SoRtns.SOStartPalette  = CAST SODummy;
  570.     hProc->SoRtns.SOPutPaletteEntry  = CAST SODummy;
  571.     hProc->SoRtns.SOEndPalette = CAST SODummy;
  572.     hProc->SoRtns.SOPutScanLineData = CAST2 SODummy;
  573.     hProc->SoRtns.SOStartFontTable = CAST SODummy;
  574.     hProc->SoRtns.SOPutFontTableEntry = CAST SODummy;
  575.     hProc->SoRtns.SOEndFontTable = CAST SODummy;
  576.     hProc->SoRtns.SOPutCharFontById = CAST SODummy;
  577.     hProc->SoRtns.SOPutCharFontByName = CAST SODummy;
  578.     hProc->SoRtns.SOPutParaSpacing = CAST SODummy;
  579.     hProc->SoRtns.SOPutArchiveField = CAST SODummy;
  580.     hProc->SoRtns.SOStartHdrInfo = CAST SODummy;
  581.     hProc->SoRtns.SOEndHdrInfo = CAST SODummy;
  582.     hProc->SoRtns.SOPutHdrEntry = CAST SODummy;
  583.     hProc->SoRtns.SOPutVectorHeader = CAST SODummy;
  584.     hProc->SoRtns.SOVectorObject = CAST SODummy;
  585.     hProc->SoRtns.SOVectorAttr = CAST SODummy;
  586.     hProc->SoRtns.SOBeginTable = CAST SODummy;
  587.     hProc->SoRtns.SOEndTable = CAST SODummy;             
  588.     hProc->SoRtns.SOPutTableRowFormat = CAST SODummy;
  589.     hProc->SoRtns.SOPutTableCellInfo = CAST SODummy;     
  590.     hProc->SoRtns.SOPutGraphicObject = CAST SODummy;
  591.     hProc->SoRtns.SOGoToPosition = CAST SODummy;
  592.     hProc->SoRtns.SODrawLine = CAST SODummy;
  593.  
  594. #undef CAST
  595. }
  596.  
  597.  
  598. VW_ENTRYSC VOID VW_ENTRYMOD VwLocalDownFunc(hFile,phFile,hProc)
  599. SOFILE                hFile;
  600. HIOFILE VWPTR *    phFile;
  601. HPROC                hProc;
  602. {
  603.     *phFile = (HIOFILE)hFile;
  604. }
  605.  
  606.  
  607. #ifdef WINDOWS
  608. #define CAST    (VOID FAR *)
  609. #define CAST2    (VOID FAR *)
  610. #define CASTIO    (VOID FAR *)
  611. #define SO_PFUNC    SO_ENTRYMOD *
  612. #endif /*WINDOWS*/
  613.  
  614.  
  615. VW_ENTRYSC VOID VW_ENTRYMOD VwSetSoRtnFunc(wRtn,pRtn,hProc)
  616. SHORT                wRtn;
  617. VOID                (SO_PFUNC pRtn)();
  618. HPROC            hProc;
  619. {
  620.     if (pRtn == NULL)
  621.         pRtn = SODummy;
  622.  
  623.  
  624.     switch (wRtn)
  625.         {
  626.         case SOPUTCHAR:
  627.             hProc->SoRtns.SOPutChar = CAST pRtn;
  628.             break;
  629.         case SOPUTCHARX:
  630.             hProc->SoRtns.SOPutCharX = CAST pRtn;
  631.             break;
  632.         case SOPUTSPECIALCHARX:
  633.             hProc->SoRtns.SOPutSpecialCharX = CAST pRtn;
  634.             break;
  635.         case SOPUTCHARATTR:
  636.             hProc->SoRtns.SOPutCharAttr = CAST pRtn;
  637.             break;
  638.         case SOPUTCHARHEIGHT:
  639.             hProc->SoRtns.SOPutCharHeight = CAST pRtn;
  640.             break;
  641.         case SOPUTPARAALIGN:
  642.             hProc->SoRtns.SOPutParaAlign = CAST pRtn;
  643.             break;
  644.         case SOPUTPARAINDENTS:
  645.             hProc->SoRtns.SOPutParaIndents = CAST pRtn;
  646.             break;
  647.         case SOSTARTTABSTOPS:
  648.             hProc->SoRtns.SOStartTabStops = CAST pRtn;
  649.             break;
  650.         case SOENDTABSTOPS:
  651.             hProc->SoRtns.SOEndTabStops = CAST pRtn;
  652.             break;
  653.         case SOPUTTABSTOP:
  654.             hProc->SoRtns.SOPutTabStop = CAST pRtn;
  655.             break;
  656.         case SOPUTMARGINS:
  657.             hProc->SoRtns.SOPutMargins = CAST pRtn;
  658.             break;
  659.         case SOPUTSUBDOCINFO:
  660.             hProc->SoRtns.SOPutSubdocInfo = CAST pRtn;
  661.             break;
  662.         case SOPUTBREAK:
  663.             hProc->SoRtns.SOPutBreak = CAST2 pRtn;
  664.             break;
  665.         case    SOPUTDATACELL:
  666.             hProc->SoRtns.SOPutDataCell = CAST pRtn;
  667.             break;
  668.         case    SOPUTTEXTCELL:    
  669.             hProc->SoRtns.SOPutTextCell = CAST pRtn;
  670.             break;
  671.         case    SOPUTMORETEXT:    
  672.             hProc->SoRtns.SOPutMoreText = CAST pRtn;
  673.             break;
  674.         case    SOPUTFIELD:        
  675.             hProc->SoRtns.SOPutField = CAST pRtn;
  676.             break;
  677.         case    SOPUTVARFIELD:    
  678.             hProc->SoRtns.SOPutVarField = CAST pRtn;
  679.             break;
  680.         case    SOPUTMOREVARFIELD:
  681.             hProc->SoRtns.SOPutMoreVarField = CAST pRtn;
  682.             break;
  683.         case    SOSTARTCOLUMNINFO:
  684.             hProc->SoRtns.SOStartColumnInfo = CAST pRtn;
  685.             break;
  686.         case    SOSTARTFIELDINFO:    
  687.             hProc->SoRtns.SOStartFieldInfo = CAST pRtn;
  688.             break;
  689.         case    SOPUTCOLUMNINFO:    
  690.             hProc->SoRtns.SOPutColumnInfo = CAST pRtn;
  691.             break;
  692.         case    SOPUTFIELDINFO:    
  693.             hProc->SoRtns.SOPutFieldInfo = CAST pRtn;
  694.             break;
  695.         case    SOENDCOLUMNINFO:    
  696.             hProc->SoRtns.SOEndColumnInfo = CAST pRtn;
  697.             break;
  698.         case    SOENDFIELDINFO:    
  699.             hProc->SoRtns.SOEndFieldInfo = CAST pRtn;
  700.             break;
  701.         case    SOPUTSECTIONTYPE:
  702.             hProc->SoRtns.SOPutSectionType = CAST pRtn;
  703.             break;
  704.         case    SOPUTSECTIONNAME:
  705.             hProc->SoRtns.SOPutSectionName = CAST pRtn;
  706.             break;
  707.         case    SOSETDATEBASE:
  708.             hProc->SoRtns.SOSetDateBase = CAST pRtn;
  709.             break;
  710.         case    SOBAILOUT:
  711.             hProc->SoRtns.SOBailOut = CAST pRtn;
  712.             break;
  713.         case    SOTAGBEGIN:
  714.             hProc->SoRtns.SOTagBegin = CAST pRtn;
  715.             break;
  716.         case    SOTAGEND:
  717.             hProc->SoRtns.SOTagEnd = CAST pRtn;
  718.             break;
  719.         case    SOGETINFO:
  720.             hProc->SoRtns.SOGetInfo = CAST pRtn;
  721.             break;
  722.         case    SOPUTSTRING:
  723.             hProc->SoRtns.SOPutString = CAST pRtn;
  724.             break;
  725.         case    SUUSERSAVEDATA:
  726.             hProc->SoRtns.SUUserSaveData = CAST2 pRtn;
  727.             break;
  728.         case    SUUSERRETRIEVEDATA:
  729.             hProc->SoRtns.SUUserRetrieveData = CAST2 pRtn;
  730.             break;
  731.         case    SOPUTBITMAPHEADER:
  732.             hProc->SoRtns.SOPutBitmapHeader = CAST pRtn;
  733.             break;
  734.         case    SOSTARTPALETTE:
  735.             hProc->SoRtns.SOStartPalette  = CAST pRtn;
  736.             break;
  737.         case    SOPUTPALETTEENTRY:
  738.             hProc->SoRtns.SOPutPaletteEntry = CAST pRtn;
  739.             break;
  740.         case    SOENDPALETTE:
  741.             hProc->SoRtns.SOEndPalette = CAST pRtn;
  742.             break;
  743.         case    SOPUTSCANLINEDATA:
  744.             hProc->SoRtns.SOPutScanLineData = CAST2 pRtn;
  745.             break;
  746.         case    SOSTARTFONTTABLE:
  747.             hProc->SoRtns.SOStartFontTable = CAST pRtn;
  748.             break;
  749.         case    SOPUTFONTTABLEENTRY:
  750.             hProc->SoRtns.SOPutFontTableEntry = CAST pRtn;
  751.             break;
  752.         case    SOENDFONTTABLE:
  753.             hProc->SoRtns.SOEndFontTable = CAST pRtn;
  754.             break;
  755.         case    SOPUTCHARFONTBYID:
  756.             hProc->SoRtns.SOPutCharFontById = CAST pRtn;
  757.             break;
  758.         case    SOPUTCHARFONTBYNAME:
  759.             hProc->SoRtns.SOPutCharFontByName = CAST pRtn;
  760.             break;
  761.         case    SOPUTPARASPACING:
  762.             hProc->SoRtns.SOPutParaSpacing = CAST pRtn;
  763.             break;
  764.         case    SOPUTARCHIVEFIELD:
  765.             hProc->SoRtns.SOPutArchiveField = CAST pRtn;
  766.             break;
  767.         case    SOSTARTHDRINFO:
  768.             hProc->SoRtns.SOStartHdrInfo = CAST pRtn;
  769.             break;
  770.         case    SOENDHDRINFO:
  771.             hProc->SoRtns.SOEndHdrInfo = CAST pRtn;
  772.             break;
  773.         case    SOPUTHDRENTRY:
  774.             hProc->SoRtns.SOPutHdrEntry = CAST pRtn;
  775.             break;
  776.         case    SOPUTVECTORHEADER:
  777.             hProc->SoRtns.SOPutVectorHeader = CAST pRtn;
  778.             break;
  779.         case    SOVECTOROBJECT:
  780.             hProc->SoRtns.SOVectorObject = CAST pRtn;
  781.             break;
  782.         case    SOVECTORATTR:
  783.             hProc->SoRtns.SOVectorAttr = CAST pRtn;
  784.             break;
  785.         case SOBEGINTABLE:
  786.             hProc->SoRtns.SOBeginTable = CAST pRtn;
  787.             break;
  788.         case SOENDTABLE:
  789.             hProc->SoRtns.SOEndTable = CAST pRtn;             
  790.             break;
  791.         case SOPUTTABLEROWFORMAT:
  792.             hProc->SoRtns.SOPutTableRowFormat = CAST pRtn;
  793.             break;
  794.         case SOPUTTABLECELLINFO:
  795.             hProc->SoRtns.SOPutTableCellInfo = CAST pRtn;     
  796.             break;
  797.         case SOPUTGRAPHICOBJECT:
  798.             hProc->SoRtns.SOPutGraphicObject = CAST pRtn;
  799.             break;
  800.         case SOGOTOPOSITION:
  801.             hProc->SoRtns.SOGoToPosition = CAST pRtn;
  802.             break;
  803.         case SODRAWLINE:
  804.             hProc->SoRtns.SODrawLine = CAST pRtn;
  805.             break;
  806.         }
  807.  
  808. #undef CAST
  809. #undef CAST2
  810. #undef CASTIO
  811. }
  812.  
  813.  
  814. VW_ENTRYSC VOID VW_ENTRYMOD VwSetUserFunc(dwUser1,dwUser2,hProc)
  815. DWORD    dwUser1;
  816. DWORD    dwUser2;
  817. HPROC    hProc;
  818. {
  819.     hProc->User1 = dwUser1;
  820.     hProc->User2 = dwUser2;
  821. }
  822.  
  823.  
  824. VW_ENTRYSC VOID VW_ENTRYMOD VwGetRtnsFunc(pRtns,wLastRtn)
  825. VWRTNS VWPTR * pRtns;
  826. WORD              wLastRtn;
  827. {
  828.  
  829. #ifdef WINDOWS
  830. #define FUNCTIONNAME(func) func
  831. #define CAST    (VOID FAR *)
  832. #define CASTHPROC (VOID FAR *)
  833. #endif /*WINDOWS*/
  834.  
  835. #ifdef VwStreamOpenFunc
  836.     pRtns->StreamOpen = FUNCTIONNAME(VwStreamOpen);
  837. #else
  838.     pRtns->StreamOpen = NULL;
  839. #endif
  840.  
  841. #ifdef VwStreamSectionFunc
  842.     pRtns->StreamSection = FUNCTIONNAME(VwStreamSection);
  843. #else
  844.     pRtns->StreamSection = NULL;
  845. #endif
  846.  
  847. #ifdef VwStreamReadFunc
  848.     pRtns->StreamRead = FUNCTIONNAME(VwStreamRead);
  849. #else
  850.     pRtns->StreamRead = NULL;
  851. #endif
  852.  
  853. #ifdef VwStreamTellFunc
  854.     pRtns->StreamTell = FUNCTIONNAME(VwStreamTell);
  855. #else
  856.     pRtns->StreamTell = NULL;
  857. #endif
  858.  
  859. #ifdef VwStreamSeekFunc
  860.     pRtns->StreamSeek    = FUNCTIONNAME(VwStreamSeek);
  861. #else
  862.     pRtns->StreamSeek    = NULL;
  863. #endif
  864.  
  865. #ifdef VwGetInfoFunc
  866.     pRtns->GetInfo = FUNCTIONNAME(VwGetInfo);
  867. #else
  868.     pRtns->GetInfo = NULL;
  869. #endif
  870.  
  871. #ifdef VwGetDataFunc
  872.     pRtns->GetData = CAST FUNCTIONNAME(VwGetData);
  873. #else
  874.     pRtns->GetData = NULL;
  875. #endif
  876.  
  877. #ifdef VwSetDataFunc
  878.     pRtns->SetData = CAST FUNCTIONNAME(VwSetData);
  879. #else
  880.     pRtns->SetData = NULL;
  881. #endif
  882.  
  883. #ifdef VwLocalUpFunc
  884.     pRtns->LocalUp = FUNCTIONNAME(VwLocalUp);
  885. #else
  886.     pRtns->LocalUp = NULL;
  887. #endif
  888.  
  889. #ifdef VwLocalDownFunc
  890.     pRtns->LocalDown = FUNCTIONNAME(VwLocalDown);
  891. #else
  892.     pRtns->LocalDown = NULL;
  893. #endif
  894.  
  895. #ifdef VwAllocProcFunc
  896.     pRtns->AllocProc =  CASTHPROC FUNCTIONNAME(VwAllocProc);
  897. #else
  898.     pRtns->AllocProc = NULL;
  899. #endif
  900.  
  901. #ifdef VwFreeProcFunc
  902.     pRtns->FreeProc = FUNCTIONNAME(VwFreeProc);
  903. #else
  904.     pRtns->FreeProc = NULL;
  905. #endif
  906.  
  907. #ifdef VwSetUserFunc
  908.     pRtns->SetUser = FUNCTIONNAME(VwSetUser);
  909. #else
  910.     pRtns->SetUser = NULL;
  911. #endif
  912.  
  913. #ifdef VwSetSoRtnFunc
  914.     pRtns->SetSoRtn = FUNCTIONNAME(VwSetSoRtn);
  915. #else
  916.     pRtns->SetSoRtn = NULL;
  917. #endif
  918.  
  919. #ifdef VwStreamCloseFunc
  920.     pRtns->StreamClose = FUNCTIONNAME(VwStreamClose);
  921. #else
  922.     pRtns->StreamClose = NULL;
  923. #endif
  924.  
  925. #ifdef VwStreamSectionType
  926. #ifdef VwGetSectionDataFunc
  927.     pRtns->GetSectionData = CAST FUNCTIONNAME(VwGetSectionData);
  928. #else
  929.     pRtns->GetSectionData = NULL;
  930. #endif
  931. #else
  932.     pRtns->GetSectionData = NULL;
  933. #endif
  934.  
  935. #ifdef VwStreamSectionType
  936. #ifdef VwSetSectionDataFunc
  937.     pRtns->SetSectionData = CAST FUNCTIONNAME(VwSetSectionData);
  938. #else
  939.     pRtns->SetSectionData = NULL;
  940. #endif
  941. #else
  942.     pRtns->SetSectionData = NULL;
  943. #endif
  944.  
  945. #ifdef VwStreamReadRecordFunc
  946.     pRtns->StreamReadRecord = FUNCTIONNAME(VwStreamReadRecord);
  947. #else
  948.     pRtns->StreamReadRecord = NULL;
  949. #endif
  950.  
  951.     if (wLastRtn >= VWRTN_DOSPECIAL)
  952.         {
  953. #ifdef VwDoSpecialFunc
  954.     pRtns->DoSpecial = FUNCTIONNAME(VwDoSpecial);
  955. #else
  956.     pRtns->DoSpecial = NULL;
  957. #endif
  958.         }
  959.  
  960. #undef CAST
  961. #undef FUNCTIONNAME
  962. #undef CASTHPROC
  963. }
  964.  
  965.     /*
  966.     | Filter macro for bitmap filters
  967.     */
  968.  
  969. #define    SetRGBPixel(pDest,pRGB)    {*(BYTE VWPTR *)pDest++=((BYTE VWPTR *)pRGB)[2];*(BYTE VWPTR *)pDest++=((BYTE VWPTR *)pRGB)[1];*(BYTE VWPTR *)pDest++=*((BYTE VWPTR *)pRGB);}
  970.  
  971.  
  972.     /*
  973.     |    SO routine macros
  974.     */
  975.  
  976. #define SOPutChar(a,hP)              (hP->SoRtns.SOPutChar)(a,hP->User1,hP->User2)
  977. #define SOPutCharX(a,b,hP)             (hP->SoRtns.SOPutCharX)(a,b,hP->User1,hP->User2)
  978. #define SOPutSpecialCharX(a,b,hP)         (hP->SoRtns.SOPutSpecialCharX)(a,b,hP->User1,hP->User2)
  979. #define SOPutCharAttr(a,b,hP)             (hP->SoRtns.SOPutCharAttr)(a,b,hP->User1,hP->User2)
  980. #define SOPutCharHeight(a,hP)             (hP->SoRtns.SOPutCharHeight)(a,hP->User1,hP->User2)
  981. #define SOPutParaAlign(a,hP)               (hP->SoRtns.SOPutParaAlign)(a,hP->User1,hP->User2)
  982. #define SOPutParaIndents(a,b,c,hP)        (hP->SoRtns.SOPutParaIndents)(a,b,c,hP->User1,hP->User2)
  983. #define SOStartTabStops(hP)                (hP->SoRtns.SOStartTabStops)(hP->User1,hP->User2)
  984. #define SOEndTabStops(hP)            (hP->SoRtns.SOEndTabStops)(hP->User1,hP->User2)
  985. #define SOPutTabStop(a,hP)             (hP->SoRtns.SOPutTabStop)(a,hP->User1,hP->User2)
  986. #define SOPutMargins(a,b,hP)               (hP->SoRtns.SOPutMargins)(a,b,hP->User1,hP->User2)
  987. #define SOPutBreak(a,b,hP)             (hP->SoRtns.SOPutBreak)(a,(DWORD)(b),hP->User1,hP->User2)
  988. #define SOPutSubdocInfo(a,b,hP)          (hP->SoRtns.SOPutSubdocInfo)(a,b,hP->User1,hP->User2)
  989. #define SOPutTextCell(a,b,c,d,hP)         (hP->SoRtns.SOPutTextCell)(a,b,c,d,hP->User1,hP->User2)
  990. #define SOPutMoreText(a,b,c,hP)          (hP->SoRtns.SOPutMoreText)(a,b,c,hP->User1,hP->User2)
  991. #define SOPutDataCell(a,hP)                (hP->SoRtns.SOPutDataCell)(a,hP->User1,hP->User2)
  992. #define SOPutField(a,hP)             (hP->SoRtns.SOPutField)(a,hP->User1,hP->User2)
  993. #define SOPutVarField(a,b,c,hP)          (hP->SoRtns.SOPutVarField)(a,b,c,hP->User1,hP->User2)
  994. #define SOPutMoreVarField(a,b,c,hP)         (hP->SoRtns.SOPutMoreVarField)(a,b,c,hP->User1,hP->User2)
  995. #define SOStartColumnInfo(hP)             (hP->SoRtns.SOStartColumnInfo)(hP->User1,hP->User2)
  996. #define SOStartFieldInfo(hP)               (hP->SoRtns.SOStartFieldInfo)(hP->User1,hP->User2)
  997. #define SOPutColumnInfo(a,hP)             (hP->SoRtns.SOPutColumnInfo)(a,hP->User1,hP->User2)
  998. #define SOPutFieldInfo(a,hP)               (hP->SoRtns.SOPutFieldInfo)(a,hP->User1,hP->User2)
  999. #define SOEndColumnInfo(hP)                (hP->SoRtns.SOEndColumnInfo)(hP->User1,hP->User2)
  1000. #define SOEndFieldInfo(hP)             (hP->SoRtns.SOEndFieldInfo)(hP->User1,hP->User2)
  1001. #define SOPutSectionType(a,hP)             (hP->SoRtns.SOPutSectionType)(a,hP->User1,hP->User2)
  1002. #define SOPutSectionName(a,hP)             (hP->SoRtns.SOPutSectionName)(a,hP->User1,hP->User2)
  1003. #define SOSetDateBase(a,b,hP)             (hP->SoRtns.SOSetDateBase)(a,b,hP->User1,hP->User2)
  1004. #define SOBailOut(a,hP)              (hP->SoRtns.SOBailOut)(a,hP->User1,hP->User2)
  1005. #define SOTagBegin(a,hP)             (hP->SoRtns.SOTagBegin)(a,hP->User1,hP->User2)
  1006. #define SOTagEnd(hP)                 (hP->SoRtns.SOTagEnd)(hP->User1,hP->User2)
  1007. #define SOGetInfo(a,b,hP)            (hP->SoRtns.SOGetInfo)(a,b,hP->User1,hP->User2)
  1008. #define SUUserSaveData(a,hP)               (hP->SoRtns.SUUserSaveData)(a,hP->User1,hP->User2)
  1009. #define SUUserRetrieveData(a,b,hP)        (hP->SoRtns.SUUserRetrieveData)(a,b,hP->User1,hP->User2)
  1010. #define SOPutBitmapHeader(a,hP)          (hP->SoRtns.SOPutBitmapHeader)(a,hP->User1,hP->User2)
  1011. #define SOStartPalette(hP)             (hP->SoRtns.SOStartPalette)(hP->User1,hP->User2)
  1012. #define SOPutPaletteEntry(a,b,c,hP)         (hP->SoRtns.SOPutPaletteEntry)(a,b,c,hP->User1,hP->User2)
  1013. #define SOEndPalette(hP)             (hP->SoRtns.SOEndPalette)(hP->User1,hP->User2)
  1014. #define SOPutScanLineData(a,hP)          (hP->SoRtns.SOPutScanLineData)(a,hP->User1,hP->User2)
  1015. #define SOPutCharFontById(a,hP)          (hP->SoRtns.SOPutCharFontById)(a,hP->User1,hP->User2)
  1016. #define SOPutCharFontByName(a,b,hP)         (hP->SoRtns.SOPutCharFontByName)(a,b,hP->User1,hP->User2)
  1017. #define SOPutParaSpacing(a,b,c,d,hP)            (hP->SoRtns.SOPutParaSpacing)(a,b,c,d,hP->User1,hP->User2)
  1018. #define SOStartFontTable(hP)               (hP->SoRtns.SOStartFontTable)(hP->User1,hP->User2)
  1019. #define SOPutFontTableEntry(a,b,c,hP)           (hP->SoRtns.SOPutFontTableEntry)(a,b,c,hP->User1,hP->User2)
  1020. #define SOEndFontTable(hP)             (hP->SoRtns.SOEndFontTable)(hP->User1,hP->User2)
  1021. #define SOPutArchiveField(a,b,c,hP)         (hP->SoRtns.SOPutArchiveField)(a,b,c,hP->User1,hP->User2)
  1022. #define SOStartHdrInfo(hP)             (hP->SoRtns.SOStartHdrInfo)(hP->User1,hP->User2)
  1023. #define SOEndHdrInfo(hP)             (hP->SoRtns.SOEndHdrInfo)(hP->User1,hP->User2)
  1024. #define SOPutHdrEntry(a,b,c,hP)          (hP->SoRtns.SOPutHdrEntry)(a,b,c,hP->User1,hP->User2)
  1025. #define SOPutVectorHeader(a,hP)          (hP->SoRtns.SOPutVectorHeader)(a,hP->User1,hP->User2)
  1026. #define SOVectorObject(a,b,c,hP)         (hP->SoRtns.SOVectorObject)(a,b,c,hP->User1,hP->User2)
  1027. #define SOVectorAttr(a,b,c,hP)             (hP->SoRtns.SOVectorAttr)(a,b,c,hP->User1,hP->User2)
  1028. #define SOBeginTable(hP)             (hP->SoRtns.SOBeginTable)(hP->User1,hP->User2)
  1029. #define SOEndTable(hP)                 (hP->SoRtns.SOEndTable)(hP->User1,hP->User2)
  1030. #define SOPutTableRowFormat(a,b,c,d,e,f,hP)  (hP->SoRtns.SOPutTableRowFormat)(a,b,c,d,e,f,hP->User1,hP->User2)
  1031. #define SOPutTableCellInfo(a,hP)         (hP->SoRtns.SOPutTableCellInfo)(a,hP->User1,hP->User2)
  1032. #define SOPutGraphicObject(a,hP)         (hP->SoRtns.SOPutGraphicObject)(a,hP->User1,hP->User2)
  1033. #define SOGoToPosition(a,hP)               (hP->SoRtns.SOGoToPosition)(a,hP->User1,hP->User2)
  1034. #define SODrawLine(a,b,c,d,e,hP)         (hP->SoRtns.SODrawLine)(a,b,c,d,e,hP->User1,hP->User2)
  1035.  
  1036.