SODEFS.H
/*------------------------------------------------------------------- 
|OS Dependent Area 
*/ 
 
#ifndef SODEFS_H 
#define SODEFS_H 
 
#ifdef WIN16 
#define SO_ENTRYSC 
#define SO_ENTRYMOD__export __far __cdecl 
typedef unsigned longSOINT32U; 
typedef signed longSOINT32S; 
#endif /*WIN16*/ 
 
#ifdef WIN32 
#define SO_ENTRYSC__declspec(dllexport) 
#define SO_ENTRYMOD__cdecl 
typedef unsigned longSOINT32U; 
typedef signed longSOINT32S; 
#define HUGE 
#endif /*WIN32*/ 
 
/*------------------------------------------------------------------- 
|OS Independent Area 
*/ 
 
#define SO_BEGINTOKEN0xFF 
 
#define SO_CHARATTR0 
#define SO_SPECIALCHAR1 
#define SO_CHARHEIGHT2 
#define SO_BREAK3 
#define SO_PARAALIGN4 
#define SO_PARAINDENT5 
#define SO_TABSTOPS6 
#define SO_MARGINS7 
#define SO_BEGINSUB8 
#define SO_ENDSUB9 
 
#define SO_CHARX12 
#define SO_TAGBEGIN13 
#define SO_TAGEND14 
 
#define SO_PARASPACING15 
#define SO_CHARFONTBYID 16 
#define SO_CHARFONTBYNAME17 
 
#define SO_TABLE18 
#define SO_TABLEEND21 
 
#define SO_GRAPHICOBJECT22 
 
#define SO_GOTOPOSITION 23 
#define SO_DRAWLINE24 
 
#define SO_ENDOFCHUNK0xFE 
 
 
#define SO_TEXTCELL10/* these two #defines should be in the chunker stuff */ 
#define SO_DATACELL11 
#define SO_EMPTYCELL15 
 
 
#define SO_CHTAB1 
#define SO_CHUNKNOWN2 
#define SO_CHSHYPHEN3 
#define SO_CHHPAGE4 
#define SO_CHHLINE5 
#define SO_CHHSPACE6 
#define SO_CHHHYPHEN7 
#define SO_CHPAGENUMBER 8 
#define SO_CHDATE9 
#define SO_CHTIME10 
#define SO_CHCELLTAB11 
 
 
/* NOTE:  There is code in chunker.c that relies on the fact that */ 
/* the value of the largest #define for a character attribute will */ 
/* not exceed 15. */ 
 
#define SO_BOLD 2 
#define SO_ITALIC3 
#define SO_UNDERLINE4 
#define SO_DUNDERLINE5 
#define SO_SMALLCAPS6 
#define SO_OUTLINE7 
#define SO_SHADOW8 
#define SO_CAPS 9 
#define SO_SUBSCRIPT10 
#define SO_SUPERSCRIPT11 
#define SO_STRIKEOUT12 
#define SO_WORDUNDERLINE13 
#define SO_DOTUNDERLINE 14 
 
#define SO_ON1 
#define SO_OFF0 
 
#define SO_YES1 
#define SO_NO0 
 
#define SO_STOP 1 
#define SO_CONTINUE0 
 
#define SO_ALIGNLEFT1 
#define SO_ALIGNRIGHT2 
#define SO_ALIGNCENTER3 
#define SO_ALIGNJUSTIFY 4 
 
#define SO_TABLEFT1 
#define SO_TABRIGHT2 
#define SO_TABCENTER3 
#define SO_TABCHAR4 
#define SO_TABEMPTY5 
 
#define SO_HEADER1 
#define SO_FOOTER2 
#define SO_FOOTNOTE3 
#define SO_COMMENT4 
 
#define SO_LEFT 1 
#define SO_RIGHT2 
#define SO_BOTH 3 
 
#define SO_WORDPROCESSOR120 
#define SO_SPREADSHEET121 
#define SO_DATABASE122 
 
#define SO_PARAGRAPHS0 
#define SO_CELLS1 
#define SO_FIELDS2 
#define SO_BITMAP4 
#define SO_ARCHIVE5 
#define SO_VECTOR6 
 
#define SO_PARABREAK1 
#define SO_EOFBREAK2 
#define SO_SECTIONBREAK 3 
#define SO_CELLBREAK4 
#define SO_RECORDBREAK5 
#define SO_SUBDOCBEGINBREAK6 
#define SO_SUBDOCENDBREAK7 
#define SO_SCANLINEBREAK8 
#define SO_ARCHIVEBREAK 9 
#define SO_VECTORBREAK10 
#define SO_TABLEROWBREAK19 
#define SO_TABLECELLBREAK20 
 
 
#define SOERROR_GENERAL 0 
#define SOERROR_BADFILE 1 
#define SOERROR_EOF2 
 
#define SO_CELLLEFT0 
#define SO_CELLRIGHT1 
#define SO_CELLCENTER2 
#define SO_CELLFILL3 
 
#define SO_CELLBOLD1 
#define SO_CELLITALIC2 
#define SO_CELLUNDERLINE4 
#define SO_CELLSTRIKEOUT8 
 
#define SO_CELLINT32S0 
#define SO_CELLINT32U1 
#define SO_CELLIEEE4I2 
#define SO_CELLIEEE4M3 
#define SO_CELLIEEE8I4 
#define SO_CELLIEEE8M5 
#define SO_CELLIEEE10I6 
#define SO_CELLIEEE10M7 
#define SO_CELLBCD8I8 
#define SO_CELLEMPTY9 
#define SO_CELLERROR10 
#define SO_FIELDTEXTFIX 11 
#define SO_FIELDTEXTVAR 12 
 
 
#define SO_CELLNUMBER0 
#define SO_CELLDOLLARS1 
#define SO_CELLPERCENT2 
#define SO_CELLEXPONENT 3 
#define SO_CELLDECIMAL4 
#define SO_CELLDATETIME 5 
#define SO_CELLDATE6 
#define SO_CELLTIME7 
#define SO_CELLBOOL8 
 
#define SO_CELLNEG_MINUS0 
#define SO_CELLNEG_PARENBIT0 
#define SO_CELLNEG_MINUSREDBIT1 
#define SO_CELLNEG_PARENREDBIT2 
 
 
#define SO_CELL1000SEP_NONE0 
#define SO_CELL1000SEP_COMMABIT3 
 
/* MASK = 0xF0, bits 4,5,6,7 */ 
#define SO_CELLMULT_MASK0xF0 
 
#define SO_CELLMULT_10 
#define SO_CELLMULT_010x10 
#define SO_CELLMULT_50000x20 
#define SO_CELLMULT_500 0x30 
#define SO_CELLMULT_050x40 
#define SO_CELLMULT_005 0x50 
#define SO_CELLMULT_00050x60 
#define SO_CELLMULT_000050x70 
#define SO_CELLMULT_06250x80 
#define SO_CELLMULT_0156250x90 
#define SO_CELLMULT_00010xA0 
 
#define SO_CELLDATESEP_SLASHBIT8 
#define SO_CELLDATESEP_MINUSBIT9 
#define SO_CELLDATESEP_PERIODBIT10 
#define SO_CELLDATESEP_SPACEBIT11 
#define SO_CELLDATESEP_NONE0 
 
#define SO_CELLMONTH_FULLBIT12 
#define SO_CELLMONTH_ABBREVBIT13 
#define SO_CELLMONTH_NUMBERBIT14 
#define SO_CELLMONTH_NONE0 
 
#define SO_CELLYEAR_FULLBIT15L 
#define SO_CELLYEAR_ABBREVBIT16L 
#define SO_CELLYEAR_NONE0 
 
#define SO_HHMMBITBIT17L 
#define SO_HHMMSSBITBIT18L 
#define SO_AMPMBITBIT19L 
#define SO_HMSBITBIT20L 
 
#define SO_CELLTIME_HHMM24SO_HHMMBIT 
#define SO_CELLTIME_HHMMSS24SO_HHMMSSBIT 
#define SO_CELLTIME_HHMMAM(SO_HHMMBIT | SO_AMPMBIT) 
#define SO_CELLTIME_HHMMSSAM(SO_HHMMSSBIT | SO_AMPMBIT) 
#define SO_CELLTIME_HHMMHMS(SO_HHMMBIT | SO_HMSBIT) 
#define SO_CELLTIME_HHMMSSHMS(SO_HHMMSSBIT | SO_HMSBIT) 
#define SO_CELLTIME_NONE0 
 
#define SO_CELLDAY_NUMBERBIT21L 
#define SO_CELLDAY_NONE 0 
 
#define SO_CELLDAYOFWEEK_FULLBIT22L 
#define SO_CELLDAYOFWEEK_ABBREV BIT23L 
#define SO_CELLDAYOFWEEK_NONE0 
 
/* The following values are stored in consecutive 3-bit pieces of an integer. */ 
 
/* MASK = 0x07 */ 
#define SO_CELLDAYOFWEEK_SHIFT0 
#define SO_CELLDAYOFWEEK_MASK0x07 
#define SO_CELLDAYOFWEEK_11 
#define SO_CELLDAYOFWEEK_22 
#define SO_CELLDAYOFWEEK_33 
#define SO_CELLDAYOFWEEK_44 
#define SO_CELLDAYOFWEEK_55 
 
/* MASK = 0x38 */ 
#define SO_CELLMONTH_SHIFT3 
#define SO_CELLMONTH_MASK0x38 
#define SO_CELLMONTH_18/* (1<<3) */ 
#define SO_CELLMONTH_216/* (2<<3) */ 
#define SO_CELLMONTH_324/* (3<<3) */ 
#define SO_CELLMONTH_432/* (4<<3) */ 
#define SO_CELLMONTH_540/* (5<<3) */ 
 
/* MASK = 0x1C0 */ 
#define SO_CELLDAY_SHIFT6 
#define SO_CELLDAY_MASK 0x1C0 
#define SO_CELLDAY_164/* (1<<6) */ 
#define SO_CELLDAY_2128/* (2<<6) */ 
#define SO_CELLDAY_3192/* (3<<6) */ 
#define SO_CELLDAY_4256/* (4<<6) */ 
#define SO_CELLDAY_5320/* (5<<6) */ 
 
/* MASK = 0xE00 */ 
#define SO_CELLYEAR_SHIFT9 
#define SO_CELLYEAR_MASK0xE00 
#define SO_CELLYEAR_1512/* (1<<9) */ 
#define SO_CELLYEAR_21024/* (2<<9) */ 
#define SO_CELLYEAR_31536/* (3<<9) */ 
#define SO_CELLYEAR_42048/* (4<<9) */ 
#define SO_CELLYEAR_52560  /* (5<<9) */ 
 
/* MASK = 0x7000 */ 
#define SO_CELLTIME_SHIFT12 
#define SO_CELLTIME_MASK0x7000 
#define SO_CELLTIME_14096  /* (1<<12) */ 
#define SO_CELLTIME_28192  /* (2<<12) */ 
#define SO_CELLTIME_312288 /* (3<<12) */ 
#define SO_CELLTIME_416384 /* (4<<12) */ 
#define SO_CELLTIME_520480 /* (5<<12) */ 
 
 
/* 
 | Character sets. 
*/ 
 
#define SO_PC1 
#define SO_WINDOWS3 
#define SO_DBCS5 
 
/* 
| SOSetDateBase FLAGS 
*/ 
 
#define SO_LOTUSHELL0x0001 
 
/* 
| SOGetInfo Ids 
*/ 
 
#define SOINFO_COLUMNRANGE  1 
#define SOINFO_STARTRECORD  2 
 
/* 
| SOPutCharX & SOPutSpecialCHarX FLAGS 
*/ 
 
#define SO_COUNTBIT0x0001 
#define SO_LIMITEDITBIT 0x0002 
#define SO_HIDDENBIT0x0004 
 
#define SO_COUNTSO_COUNTBIT 
#define SO_NOCOUNTSO_LIMITEDITBIT 
#define SO_LIMITEDITSO_LIMITEDITBIT 
#define SO_DELETESO_COUNTBIT 
#define SO_NODELETE0 
#define SO_HIDDEN(SO_HIDDENBIT | SO_LIMITEDITBIT) 
#define SO_NOHIDDEN0x0000 
 
 
/* 
| font family 
*/ 
 
#define SO_FAMILYUNKNOWN1 
#define SO_FAMILYROMAN2 
#define SO_FAMILYSWISS3 
#define SO_FAMILYMODERN 4 
#define SO_FAMILYSCRIPT 5 
#define SO_FAMILYDECORATIVE6 
#define SO_FAMILYSYMBOL 7 
 
#define SO_FAMILYWINDOWS0x1000 
 
#define SO_CHARSET_SHIFTJIS0x2000 
#define SO_CHARSET_HANGEUL0x4000 
#define SO_CHARSET_CHINESEBIG50x8000 
 
/* 
| line spacing types 
*/ 
 
#define SO_HEIGHTAUTO1 
#define SO_HEIGHTATLEAST2 
#define SO_HEIGHTEXACTLY3 
 
/* 
| position flags 
*/ 
#define SOPOS_FROMLEFTEDGE0x01 
#define SOPOS_FROMTOPEDGE0x02 
#define SOPOS_FROMBASELINE0x04 
 
typedef struct SOPAGEPOSITIONtag 
{ 
DWORD dwFlags; 
LONG lXOffset; 
LONG lYOffset; 
} SOPAGEPOSITION, VWPTR * PSOPAGEPOSITION; 
 
/* 
| Bitmap filter definitions 
*/ 
 
/* wImageFlags */ 
#define SO_BOTTOMTOTOP0x0001 
#define SO_GRAYSCALE0x0002 
#define SO_BLACKANDWHITE0x0004 
#define SO_COLORPALETTE 0x0008 
#define SO_RGBCOLOR0x0010 
#define SO_BGRCOLOR0x0020 
#define SO_WHITEZERO0x0040 
 
 
 
/* 
| Archive filter definitions 
*/ 
 
#define SO_ARCENDOFRECORD0xFFFF 
 
#define SOARC_FILENAME1 
#define SOARC_FILEDATE2 
#define SOARC_FILETIME3 
#define SOARC_FILEPATH4 
#define SOARC_COMPRESSIONTYPE5 
#define SOARC_FILECOMMENT6 
#define SOARC_FILEMODDATE7 
#define SOARC_FILEMODTIME8 
#define SOARC_FILESIZE9 
#define SOARC_FILECOMPRESSSIZE10 
#define SOARC_FILECRC11 
#define SOARC_BUFFERSIZE12 
#define SOARC_CHECKSUM13 
#define SOARC_FILEOS14 
#define SOARC_ENCRYPTED 15 
 
 
/* 
| Vector graphics stuff. 
*/ 
 
/* 
| Macros 
*/ 
 
#ifdef WINDOWS 
#define SORGB(r,g,b) ((SOCOLORREF)(((BYTE)(r)|((DWORD)(BYTE)(g)<<8))|(((DWORD)(BYTE)(b))<<16))) 
#endif 
 
#define SOPALETTERGB(r,g,b)   (0x02000000L | SORGB(r,g,b)) 
#define SOPALETTEINDEX(i)     ((SOCOLORREF)(0x01000000L | (DWORD)(WORD)(i))) 
#define SOANGLETENTHS(n) ((SOANGLE)(n)) 
#define SOSETRATIO(m,n) ((SORATIO)(((SORATIO)m<<16)|(SORATIO)(n))) 
 
#define SOREDFROMRGB(rgb) (BYTE)(rgb&0x000000FF) 
#define SOGREENFROMRGB(rgb) (BYTE)((rgb&0x0000FF00)>>8) 
#define SOBLUEFROMRGB(rgb) (BYTE)((rgb&0x00FF0000)>>16) 
 
typedef DWORD SOCOLORREF; 
typedef SHORTSOANGLE; 
typedef DWORD SORATIO; 
 
typedef struct SORECTtag 
{ 
SHORT left; 
SHORT top; 
SHORT right; 
SHORT bottom; 
} SORECT, VWPTR *PSORECT; 
 
typedef struct SOPOINTtag 
{ 
SHORT x; 
SHORT y; 
} SOPOINT, VWPTR *PSOPOINT; 
 
 
#define SOLF_FACESIZE  32 
typedef struct SOLOGFONTtag 
{ 
    SHORT     lfHeight; 
    SHORT     lfWidth; 
    SHORT     lfEscapement; 
    SHORT     lfOrientation; 
    SHORT     lfWeight; 
    BYTE    lfItalic; 
    BYTE    lfUnderline; 
    BYTE    lfStrikeOut; 
    BYTE    lfCharSet; 
    BYTE    lfOutPrecision; 
    BYTE    lfClipPrecision; 
    BYTE    lfQuality; 
    BYTE    lfPitchAndFamily; 
    CHAR    lfFaceName[SOLF_FACESIZE]; 
} SOLOGFONT, VWPTR *PSOLOGFONT; 
 
/* lfWeight values */ 
#define SOLF_FW_NORMAL    400 
#define SOLF_FW_BOLD700 
 
/* lfCharSet */ 
#define SOLF_ANSI_CHARSET0 
#define SOLF_SYMBOL_CHARSET2 
#define SOLF_OEM_CHARSET255 
 
/* lfOutPrecision */ 
#define SOLF_OUT_DEFAULT_PRECIS 0 
 
/* lfClipPrecision */ 
#define SOLF_CLIP_DEFAULT_PRECIS0 
#define SOLF_CLIP_LH_ANGLES0x10 
 
/* lfQuality */ 
#define SOLF_DEFAULT_QUALITY0 
#define SOLF_DRAFT_QUALITY1 
#define SOLF_PROOF_QUALITY2 
 
/* PitchAndFamily pitch values (low 4 bits) */ 
#define SOLF_DEFAULT_PITCH0x00 
#define SOLF_FIXED_PITCH0x01 
#define SOLF_VARIABLE_PITCH0x02 
 
/* PitchAndFamily family values (high 4 bits) */ 
#define SOLF_FF_DECORATIVE0x00 
#define SOLF_FF_DONTCARE0x10 
#define SOLF_FF_MODERN0x20 
#define SOLF_FF_ROMAN0x30 
#define SOLF_FF_SCRIPT0x40 
#define SOLF_FF_SWISS0x50 
 
typedef struct SOLOGPENtag 
{ 
SHORT loPenStyle; 
SOPOINT loWidth; 
SOCOLORREF loColor; 
} SOLOGPEN, VWPTR *PSOLOGPEN; 
 
/* Pen Styles */ 
#define SOPS_SOLID    0 
#define SOPS_DASH1 
#define SOPS_DOT      2 
#define SOPS_DASHDOT 3 
#define SOPS_DASHDOTDOT       4 
#define SOPS_NULL    5 
#define SOPS_INSIDEFRAME    6 
 
typedef struct SOLOGBRUSHtag 
{ 
WORD lbStyle; 
SOCOLORREF lbColor; 
SHORT lbHatch; 
} SOLOGBRUSH, VWPTR *PSOLOGBRUSH; 
 
/* Brush Styles */ 
#define SOBS_SOLID    0 
#define SOBS_NULL    1 
#define SOBS_HOLLOWSOBS_NULL 
#define SOBS_HATCHED 2 
#define SOBS_PATTERN 3 
#define SOBS_INDEXED 4 
#define SOBS_DIBPATTERN  5 
 
/* Hatch Styles */ 
#define SOHS_HORIZONTAL       0 
#define SOHS_VERTICAL    1 
#define SOHS_FDIAGONAL      2 
#define SOHS_BDIAGONAL      3 
#define SOHS_CROSS 4 
#define SOHS_DIAGCROSS      5 
 
 
typedef struct SOVECTORHEADERtag 
{ 
WORD wStructSize; 
SORECT  BoundingRect; 
WORD wHDpi; 
WORD wVDpi; 
WORD wImageFlags; 
SOCOLORREF BkgColor; 
} SOVECTORHEADER, VWPTR *PSOVECTORHEADER; 
 
/* wImageFlags values */ 
#define SO_VECTORRGBCOLORBIT0 
#define SO_VECTORCOLORPALETTEBIT1 
#define SO_YISUPBIT2 
#define SO_XISLEFTBIT3 
 
typedef struct SOARCINFOtag 
{ 
SORECT  Rect; 
SOANGLE StartAngle; 
SOANGLE EndAngle; 
} SOARCINFO, VWPTR *PSOARCINFO; 
 
typedef struct SOTEXTINRECTtag 
{ 
SORECT  Rect; 
WORD wFormat; 
SHORT nTextLength; 
} SOTEXTINRECT, VWPTR *PSOTEXTINRECT; 
 
/* wFormat values */ 
#define SODT_TOP    0x0000 
#define SODT_LEFT    0x0000 
#define SODT_CENTER0x0001 
#define SODT_RIGHT    0x0002 
#define SODT_VCENTER 0x0004 
#define SODT_BOTTOM0x0008 
#define SODT_WORDBREAK 0x0010 
#define SODT_SINGLELINE  0x0020 
#define SODT_EXPANDTABS  0x0040 
#define SODT_TABSTOP 0x0080 
#define SODT_NOCLIP0x0100 
#define SODT_EXTERNALLEADING  0x0200 
#define SODT_CALCRECT 0x0400 
#define SODT_NOPREFIX 0x0800 
#define SODT_INTERNAL 0x1000 
 
/* PolyFillMode values */ 
#define SOPF_ALTERNATE 1 
#define SOPF_WINDING 2 
 
/* DrawMode values */ 
#define SOR2_BLACK 1 
#define SOR2_NOTMERGEPEN      2 
#define SOR2_MASKNOTPEN       3 
#define SOR2_NOTCOPYPEN       4 
#define SOR2_MASKPENNOT       5 
#define SOR2_NOT      6 
#define SOR2_XORPEN  7 
#define SOR2_NOTMASKPEN       8 
#define SOR2_MASKPEN 9 
#define SOR2_NOTXORPEN      10 
#define SOR2_NOP      11 
#define SOR2_MERGENOTPEN      12 
#define SOR2_COPYPEN 13 
#define SOR2_MERGEPENNOT      14 
#define SOR2_MERGEPEN    15 
#define SOR2_WHITE 16 
 
typedef struct SOTEXTATPOINTtag 
{ 
SOPOINT Point; 
WORD wFormat; 
SHORT nTextLength; 
} SOTEXTATPOINT, VWPTR *PSOTEXTATPOINT; 
 
typedef struct SOTEXTATARCANGLEtag 
{ 
SOARCINFO ArcInfo; 
WORD wFormat; 
SHORT nTextLength; 
} SOTEXTATARCANGLE, VWPTR *PSOTEXTATARCANGLE; 
 
/* Text Alignment Options */ 
#define SOTA_NOUPDATECP   0x0000 
#define SOTA_UPDATECP  0x0001 
#define SOTA_LEFT 0x0000 
#define SOTA_RIGHT 0x0002 
#define SOTA_CENTER0x0006 
#define SOTA_TOP0x0000 
#define SOTA_BOTTOM0x0008 
#define SOTA_BASELINE  0x0018 
 
typedef structSOSPOLYINFOtag 
{ 
WORD wFormat; 
SHORT nPoints; 
} SOPOLYINFO, VWPTR *PSOPOLYINFO; 
 
/* Poly object types */ 
#define SOPT_POLYLINE1 
#define SOPT_POLYGON2 
#define SOPT_BEZIEROPEN 3 
#define SOPT_BEZIERCLOSE4 
#define SOPT_SPLINEOPEN 5 
#define SOPT_SPLINECLOSE6 
#define SOPT_CPPOLYLINE 7/* Current Point polys */ 
#define SOPT_CPPOLYGON8 
 
/* Background mode values */ 
#define SOBK_TRANSPARENT1 
#define SOBK_OPAQUE2 
 
 
typedef structSOCPTEXTATPOINTtag 
{ 
WORD wFormat; 
SHORT nTextLength; 
} SOCPTEXTATPOINT,VWPTR *PSOCPTEXTATPOINT; 
 
typedef struct SOCPARCANGLEtag 
{ 
SOPOINT Center; 
SOANGLE SweepAngle; 
} SOCPARCANGLE, VWPTR *PSOCPARCANGLE; 
 
typedef struct SOCPPIEANGLEtag 
{ 
SOPOINT Radius; 
SOANGLE StartAngle; 
SOANGLE SweepAngle; 
} SOCPPIEANGLE, VWPTR *PSOCPPIEANGLE; 
 
typedef struct SOTRANSFORMtag 
{ 
WORD wTransformFlags; 
SOPOINT Origin; 
SHORT xOffset; 
SHORT yOffset; 
SORATIO xScale; 
SORATIO yScale; 
SORATIO xSkew; 
SORATIO ySkew; 
SOANGLE RotationAngle; 
} SOTRANSFORM, VWPTR *PSOTRANSFORM; 
 
/* Transformation flags */ 
#define SOTF_NOTRANSFORMBIT0 
#define SOTF_ROTATEBIT1 
#define SOTF_XOFFSETBIT2 
#define SOTF_YOFFSETBIT3 
#define SOTF_XSCALEBIT4 
#define SOTF_YSCALEBIT5 
#define SOTF_XSKEWBIT6 
#define SOTF_YSKEWBIT7 
 
/* Possible values for the clip mode */ 
#define SO_DONOTCLIP0 
#define SO_CLIPTOPATH1 
 
/* Possible values for the point relation attribute */ 
#define SOPR_ABSOLUTE0 
#define SOPR_RELATIVE1 
 
/* Possible values for the wDrawPathFlags */ 
#define SODP_STROKEBIT0 
#define SODP_FILLBIT1 
 
typedef struct SOGROUPINFOtag 
{ 
WORD wStructSize; 
SORECT  BoundingRect; 
SHORT nTransforms; 
} SOGROUPINFO, VWPTR *PSOGROUPINFO; 
 
typedef struct SOPATHINFOtag 
{ 
WORD wStructSize; 
SORECT  BoundingRect; 
SHORT nTransforms; 
} SOPATHINFO, VWPTR *PSOPATHINFO; 
 
#define SOFF_FIXUPBOUNDSBIT0 
 
typedef struct SOFRAMEINFOtag 
{ 
SORECT  BoundingRect; 
WORD wFlags; 
WORD OriginalWidth; 
SOANGLE RotationAngle; 
SOPOINT ReferencePoint; 
} SOFRAMEINFO, VWPTR *PSOFRAMEINFO; 
 
typedef struct SOMPARAINDENTStag 
{ 
SHORT FirstLineIndent; 
SHORT LeftIndent; 
SHORT RightIndent; 
} SOMPARAINDENTS, VWPTR *PSOMPARAINDENTS; 
 
typedef struct SOMPARASPACINGtag 
{ 
WORD LineSpaceAdjust; 
WORD ParaSpaceAdjust; 
} SOMPARASPACING, VWPTR *PSOMPARASPACING; 
 
/* Maximum Points provided by a filter in one SOPOINTS object call */ 
#define SOMAXPOINTS128 
 
/* SOVectorAttr Id's */ 
#define SO_SELECTFONT0x100 
#define SO_SELECTPEN0x101 
#define SO_SELECTBRUSH0x102 
#define SO_POLYFILLMODE 0x103 
#define SO_TEXTCHAREXTRA0x104 
#define SO_DRAWMODE0x105 
#define SO_TEXTCOLOR0x106 
#define SO_BKMODE0x107 
#define SO_BKCOLOR0x108 
#define SO_OBJECTTRANSFORM0x109 
#define SO_CLIPMODE0x10A 
#define SO_POINTRELATION0x10B 
#define SO_MPARAINDENT0x10C 
#define SO_MPARAALIGN0x10D 
#define SO_MPARASPACING 0x10E 
 
/* SOVectorObject Id's */ 
#define SO_ARC0x300 
#define SO_CHORD0x301 
#define SO_TEXTINRECT0x302 
#define SO_ELLIPSE0x303 
#define SO_FLOODFILL0x304 
#define SO_LINE 0x305 
#define SO_PIE0x306 
#define SO_STARTPOLY0x307 
#define SO_ENDPOLY0x308 
#define SO_RECTANGLE0x309 
#define SO_BEGINPATH0x30A 
#define SO_ENDPATH0x30B 
#define SO_CLOSESUBPATH 0x30C 
#define SO_DRAWPATH0x30D 
#define SO_BEGINGROUP0x30E 
#define SO_ENDGROUP0x30F 
#define SO_ROUNDRECT0x310 
#define SO_SETPIXEL0x311 
#define SO_TEXTATPOINT0x312 
#define SO_POINTS0x313 
#define SO_ARCANGLE0x314 
#define SO_CHORDANGLE0x315 
#define SO_PIEANGLE0x316 
#define SO_CPSET0x317 
#define SO_CPLINE0x318 
#define SO_CPRECTANGLE0x319 
#define SO_CPTEXTATPOINT0x31A 
#define SO_CPELLIPSE0x31B 
#define SO_CPARCTRIPLE0x31C 
#define SO_CPARCANGLE0x31D 
#define SO_CPPIEANGLE0x31E 
#define SO_ARCCLOCKWISE 0x31F 
#define SO_ARCANGLECLOCKWISE0x320 
#define SO_TEXTATARCANGLE0x321 
#define SO_BEGINSYMBOL0x322 
#define SO_ENDSYMBOL0x323 
#define SO_BEGINTEXTFRAME0x324 
#define SO_ENDTEXTFRAME 0x325 
#define SO_TEXTINPARA0x326 
#define SO_PARAEND0x327 
 
#defineSO_ARCTRIPLE0x328 
#defineSO_PIETRIPLE0x329 
#defineSO_CHORDTRIPLE0x32A 
#defineSO_ELLIPSERADII0x32B 
#defineSO_ARCRADII0x32C 
#defineSO_PIERADII0x32D 
#defineSO_CHORDRADII0x32E 
 
 
#define SO_VECTORENDOFCHUNK0xFFFF 
 
/* 
| SO Header info 
*/ 
#define SOHDR_ARCNUMFILES1 
#define SOHDR_ARCCREATEDATE2 
#define SOHDR_ARCMODTIME3 
#define SOHDR_ARCTYPE4 
#define SOHDR_ARCOS5 
#define SOHDR_ARCCOMMENT6 
#define SOHDR_ARCVERSION7 
 
 
/* 
|  Bored-er definitions 
*/ 
 
#define SO_BORDERSINGLE 0x0000// Default 
#define SO_BORDERNONE0x0001 
#define SO_BORDERDOUBLE 0x0002 
#define SO_BORDERHAIRLINE0x0004 
#define SO_BORDERTHICK0x0008 
#define SO_BORDERSHADOW 0x0010 
#define SO_BORDERDOTTED 0x0020 
#define SO_BORDERPRIORITY0x0040 
 
/* 
| Table stuff. 
*/ 
#define SO_MERGELEFT0x0001 
#define SO_MERGERIGHT0x0002 
#define SO_MERGEABOVE0x0004 
#define SO_MERGEBELOW0x0008 
 
typedef struct SOBORDERtag 
{ 
WORD wWidth; // Width of border in twips 
SOCOLORREF rgbColor; // Color of border 
WORD wFlags; // Specifies the type of border and the edges to which it applies. 
 
} SOBORDER, VWPTR * PSOBORDER; 
 
 
 
typedef struct SOTABLECELLINFOtag 
{ 
WORD wWidth; // Width of the cell, in twips 
WORD wMerge; // Bitfield that indicates whether the cell should be merged with any of the cells around it.Possible flags are SO_MERGELEFT, SO_MERGERIGHT, SO_MERGEABOVE, and SO_MERGEBELOW. 
WORD wShading; // Intensity value for background shading, in range of 0-255, where a value of zero indicates that there is no background shading. 
SOBORDER LeftBorder; // Specifies left border 
SOBORDER RightBorder; // Specifies right border 
SOBORDER TopBorder; // Specifies top border 
SOBORDER BottomBorder; // Specifies bottom border 
 
} SOTABLECELLINFO, VWPTR * PSOTABLECELLINFO, HUGE * HPSOTABLECELLINFO; 
 
 
/* 
| SOTAB structure 
*/ 
 
typedef struct SOTABtag 
{ 
WORD wType; 
WORD wChar; 
WORD wLeader; 
DWORD dwOffset; 
} SOTAB, VWPTR * PSOTAB; 
 
/* 
| SOFILTERINFO structure 
*/ 
 
typedef struct SOFILTERINFOtag 
{ 
WORD wFilterType; 
WORD wFilterCharSet; 
CHAR szFilterName[32]; 
} SOFILTERINFO, VWPTR * PSOFILTERINFO; 
 
/* 
| SOCOLUMN structure 
*/ 
 
typedef struct SOCOLUMNtag 
{ 
WORD wStructSize; 
LONG dwWidth; 
CHAR szName[40]; 
} SOCOLUMN, VWPTR * PSOCOLUMN; 
 
/* 
| SOFIELD structure 
*/ 
 
typedef struct SOFIELDtag 
{ 
WORD wStructSize; 
LONG dwWidth; 
CHAR szName[40]; 
WORD wStorage; 
WORD wDisplay; 
DWORD dwSubDisplay; 
WORD wPrecision; 
WORD wAlignment; 
} SOFIELD, VWPTR * PSOFIELD; 
 
/* 
| SOTEXTCELL structure 
*/ 
 
typedef struct SOTEXTCELLtag 
{ 
WORD wStructSize; 
WORD wAlignment; 
WORD wAttribute; 
} SOTEXTCELL, VWPTR * PSOTEXTCELL; 
 
/* 
| SODATACELL structure 
*/ 
 
typedef union SONUMBERUNIONtag 
{ 
SOINT32S  Int32S; 
SOINT32U  Int32U; 
BYTE  IEEE4[4]; 
BYTE  IEEE8[8]; 
BYTE  IEEE10[10]; 
BYTE  BCD8[8]; 
} SONUMBERUNION, VWPTR * PSONUMBERUNION; 
 
typedef struct SODATACELLtag 
{ 
WORD wStructSize; 
WORD wStorage; 
WORD wDisplay; 
DWORD dwSubDisplay; 
WORD wPrecision; 
WORD wAlignment; 
WORD wAttribute; 
/* 
union 
{ 
SOINT32S  Int32S; 
SOINT32U  Int32U; 
BYTE  IEEE4[4]; 
BYTE  IEEE8[8]; 
BYTE  IEEE10[10]; 
BYTE  BCD8[8]; 
} uStorage; 
*/ 
SONUMBERUNIONuStorage; 
} SODATACELL, VWPTR * PSODATACELL; 
 
typedef VOID FAR * SOFILE; 
 
/* Bitmap graphics header */ 
typedef struct tagSOBITMAPHEADER 
{ 
WORD wStructSize; 
WORD wImageFlags; 
WORD wImageWidth; 
WORD wImageLength; 
WORD wTileWidth; 
WORD wTileLength; 
WORD wBitsPerPixel; 
WORD wNPlanes; 
WORD wHDpi; 
WORD wVDpi; 
/** 
WORD wEncoding; 
WORD wImageLeft; 
WORD wImageTop; 
WORD wHScreenSize; 
WORD wVScreenSize; 
**/ 
}SOBITMAPHEADER, VWPTR * PSOBITMAPHEADER; 
 
/* 
|Structure defined for the DO special function for ARCHIVE formats 
*/ 
 
typedef struct tagSODOSPECIALARC 
{ 
SOFILE  hOutFile; 
HANDLE  hFileName; 
LPSTR lpFileName; 
WORD wOptFlags; 
WORD wRecordNum; 
DWORD dwIndex; 
} SODOSPECIALARC, VWPTR * PSODOSPECIALARC; 
 
 
/* 
 | 
 | Embedded objects 
 | 
*/ 
 
 
 
#define SO_MAINTAINASPECT0x0001// image aspect ratio is preserved 
#define SO_CENTERIMAGE0x0002// if set, image is centered in its final rectangle. 
 
#define SOOBJECT_GRAPHIC0x0001 
#define SOOBJECT_OLE0x0002 
#define SOOBJECT_GRAPHIC_AND_OLE0x0003 
 
#define SOOBJECT_OLESTATIC0x0001 
 
typedef struct SOOBJECTLOCtag 
{ 
BOOL bLink; 
BYTE szFile[144]; 
DWORD dwOffset; 
DWORD dwLength; 
} SOOBJECTLOC, VWPTR * PSOOBJECTLOC; 
 
typedef struct SOGRAPHICtag 
{ 
WORD wId; 
DWORD dwOrgHeight; 
DWORD dwOrgWidth; 
LONG lCropTop; 
LONG lCropLeft; 
LONG lCropBottom; 
LONG lCropRight; 
DWORD dwFinalHeight; 
DWORD dwFinalWidth; 
SOBORDER soLeftBorder; 
SOBORDER soTopBorder; 
SOBORDER soBottomBorder; 
SOBORDER soRightBorder; 
DWORD dwFlags; 
} SOGRAPHIC, VWPTR * PSOGRAPHIC; 
 
typedef struct SOGRAPHICOBJECTtag 
{ 
WORD wStructSize; 
DWORD dwFlags; 
DWORD dwType; 
SOGRAPHIC soGraphic; 
SOOBJECTLOC soGraphicLoc; 
SOOBJECTLOC soOLELoc; 
} SOGRAPHICOBJECT, VWPTR * PSOGRAPHICOBJECT; 
 
 
#define SOPUTCHAR1 
#define SOPUTCHARX2 
#define SOPUTSPECIALCHARX3 
#define SOPUTCHARATTR4 
#define SOPUTCHARHEIGHT 5 
#define SOPUTPARAALIGN6 
#define SOPUTPARAINDENTS7 
#define SOSTARTTABSTOPS 8 
#define SOENDTABSTOPS9 
#define SOPUTTABSTOP10 
#define SOPUTMARGINS11 
#define SOPUTSUBDOCINFO 12 
#define SOPUTBREAK13 
#define SOPUTDATACELL14 
#define SOPUTTEXTCELL15 
#define SOPUTMORETEXT16 
#define SOPUTFIELD17 
#define SOPUTVARFIELD18 
#define SOPUTMOREVARFIELD19 
#define SOSTARTCOLUMNINFO20 
#define SOSTARTFIELDINFO21 
#define SOPUTCOLUMNINFO 22 
#define SOPUTFIELDINFO23 
#define SOENDCOLUMNINFO 24 
#define SOENDFIELDINFO25 
#define SOPUTSECTIONTYPE26 
#define SOPUTSECTIONNAME27 
#define SOSETDATEBASE28 
#define SOBAILOUT29 
#define SOTAGBEGIN30 
#define SOTAGEND31 
#define SOGETINFO32 
#define SOPUTSTRING33 
#define SUUSERSAVEDATA34 
#define SUUSERRETRIEVEDATA35 
#define SOPUTBITMAPHEADER36 
#define SOSTARTPALETTE37 
#define SOPUTPALETTEENTRY38 
#define SOENDPALETTE39 
#define SOPUTSCANLINEDATA40 
#define SOSTARTFONTTABLE41 
#define SOPUTFONTTABLEENTRY42 
#define SOENDFONTTABLE43 
#define SOPUTCHARFONTBYID44 
#define SOPUTCHARFONTBYNAME45 
#define SOPUTPARASPACING46 
#define SOPUTARCHIVEFIELD47 
#define SOSTARTHDRINFO48 
#define SOENDHDRINFO49 
#define SOPUTHDRENTRY50 
#define SOPUTVECTORHEADER51 
#define SOVECTOROBJECT52 
#define SOVECTORATTR53 
#define SOBEGINTABLE54 
#define SOENDTABLE55 
#define SOPUTTABLEROWFORMAT56 
#define SOPUTTABLECELLINFO57 
#define SOPUTGRAPHICOBJECT58 
#define SOGOTOPOSITION59 
#define SODRAWLINE60 
 
typedef struct SORTNStag 
{ 
VOID (SO_ENTRYMOD * SOPutChar    )(WORD, DWORD, DWORD); 
VOID (SO_ENTRYMOD * SOPutCharX      )(WORD, WORD, DWORD, DWORD); 
VOID (SO_ENTRYMOD * SOPutSpecialCharX )(WORD, WORD, DWORD, DWORD); 
VOID (SO_ENTRYMOD * SOPutCharAttr     )(WORD, WORD, DWORD, DWORD); 
VOID (SO_ENTRYMOD * SOPutCharHeight   )(WORD, DWORD, DWORD); 
VOID (SO_ENTRYMOD * SOPutParaAlign    )(WORD, DWORD, DWORD); 
VOID (SO_ENTRYMOD * SOPutParaIndents  )(DWORD, DWORD, DWORD, DWORD, DWORD); 
VOID (SO_ENTRYMOD * SOStartTabStops   )(DWORD, DWORD); 
VOID (SO_ENTRYMOD * SOEndTabStops     )(DWORD, DWORD); 
VOID (SO_ENTRYMOD * SOPutTabStop     )(PSOTAB, DWORD, DWORD); 
VOID (SO_ENTRYMOD * SOPutMargins     )(DWORD, DWORD, DWORD, DWORD); 
VOID (SO_ENTRYMOD * SOPutSubdocInfo   )(WORD, WORD, DWORD, DWORD); 
WORD (SO_ENTRYMOD * SOPutBreak      )(WORD, DWORD, DWORD, DWORD); 
VOID (SO_ENTRYMOD * SOPutTextCell     )(PSOTEXTCELL,WORD,CHAR VWPTR *,WORD,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOPutMoreText     )(WORD,CHAR VWPTR *,WORD,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOPutDataCell     )(PSODATACELL,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOPutField      )(VOID VWPTR *,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOPutVarField     )(VOID VWPTR *,WORD,WORD,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOPutMoreVarField )(VOID VWPTR *,WORD,WORD,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOStartColumnInfo )(DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOStartFieldInfo  )(DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOPutColumnInfo   )(PSOCOLUMN,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOPutFieldInfo    )(PSOFIELD,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOEndColumnInfo   )(DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOEndFieldInfo    )(DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOPutSectionType  )(WORD,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOPutSectionName  )(CHAR VWPTR *,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOSetDateBase     )(DWORD,WORD,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOBailOut    )(WORD,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOTagBegin      )(DWORD,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOTagEnd  )(DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOGetInfo    )(WORD,VOID VWPTR *,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOPutString     )(LPSTR, WORD, DWORD, DWORD); 
WORD (SO_ENTRYMOD * SUUserSaveData    )(VOID VWPTR *,DWORD,DWORD); 
WORD (SO_ENTRYMOD * SUUserRetrieveData)(WORD,VOID VWPTR *,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOPutBitmapHeader )(PSOBITMAPHEADER, DWORD, DWORD); 
VOID (SO_ENTRYMOD * SOStartPalette    )(DWORD, DWORD); 
VOID (SO_ENTRYMOD * SOPutPaletteEntry )(CHAR,CHAR,CHAR,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOEndPalette     )(DWORD,DWORD); 
WORD (SO_ENTRYMOD * SOPutScanLineData )(VOID VWPTR *,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOStartFontTable )(DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOPutFontTableEntry)(DWORD,WORD,LPSTR,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOEndFontTable )(DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOPutCharFontById )(DWORD,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOPutCharFontByName)(WORD,LPSTR,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOPutParaSpacing )(WORD,DWORD,DWORD,DWORD,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOPutArchiveField )(WORD,WORD,LPSTR,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOStartHdrInfo )(DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOEndHdrInfo )(DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOPutHdrEntry )(LPSTR,LPSTR,WORD,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOPutVectorHeader )(PSOVECTORHEADER,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOVectorObject )(SHORT,WORD,VOID VWPTR *,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOVectorAttr )(SHORT,WORD,VOID VWPTR *,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOBeginTable )(DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOEndTable  )(DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOPutTableRowFormat)(LONG,WORD,WORD,WORD,WORD,WORD,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOPutTableCellInfo  )(PSOTABLECELLINFO,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOPutGraphicObject  )(PSOGRAPHICOBJECT,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SOGoToPosition )(PSOPAGEPOSITION,DWORD,DWORD); 
VOID (SO_ENTRYMOD * SODrawLine  )(PSOPAGEPOSITION,SOCOLORREF,WORD,DWORD,DWORD,DWORD,DWORD); 
} SORTNS; 
 
#endif /*SO_DEFS.H*/