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*/