VSCTOP.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:28k
源码类别:

Windows编程

开发平台:

Visual C++

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