#include "switches.hxx"

//
// Note:  To currently debug shared libraries on PPC, the LIBRARY clause must be of the form xxx.dll.dll
//	  The ouput from the linker must be xxx.dll, and the name in the 'cfrg' segment must be xxx.dll
//
#if OE_MACPPC
LIBRARY         		MicrosoftOLE2AutomationLib
#else  // OE_MACPPC
LIBRARY         		OLEAUT32
#endif // OE_MACPPC

#if OE_WIN
// DESCRIPTION			'OLE Automation Library'
// CODE            		EXECUTE READ SHARED
;DATA				READ WRITE
#endif

EXPORTS

    ; (Not used in Win32)
    ;WEP			@0	RESIDENTNAME

    ; DLL Support API
    DllGetClassObject			PRIVATE

    ; BSTR API (ANSI)
    ;
    SysAllocString			@2
    SysReAllocString			@3
    SysAllocStringLen			@4
    SysReAllocStringLen 		@5
    SysFreeString			@6
    SysStringLen			@7
#ifdef EXTERNAL_MEM
    SysSetAllocator         @324
#endif

    ; VARIANT API
    ;
    VariantInit				@8
    VariantClear			@9
    VariantCopy				@10
    VariantCopyInd			@11
    VariantChangeType			@12

    ; VARIANT TIME API
    ;
    VariantTimeToDosDateTime		@13
    DosDateTimeToVariantTime		@14

    ; SAFEARRAY API
    ;
    SafeArrayCreate			@15
    SafeArrayDestroy			@16
    SafeArrayGetDim			@17
    SafeArrayGetElemsize		@18
    SafeArrayGetUBound			@19
    SafeArrayGetLBound			@20
    SafeArrayLock			@21
    SafeArrayUnlock			@22
    SafeArrayAccessData			@23
    SafeArrayUnaccessData		@24
    SafeArrayGetElement			@25
    SafeArrayPutElement			@26
    SafeArrayCopy			@27

    ; IDispatch helpers/implementation
    ;
    DispGetParam			@28
    DispGetIDsOfNames			@29
    DispInvoke				@30
    CreateDispTypeInfo			@31
    CreateStdDispatch			@32

    ; Active Object API
    ;
#if OE_MAC
// marked these as private, since we don't want them in the import lib anymore
    RegisterActiveObject		@33 PRIVATE
    RevokeActiveObject			@34 PRIVATE
    GetActiveObject			@35 PRIVATE
#else //OE_MAC
    RegisterActiveObject		@33
    RevokeActiveObject			@34
    GetActiveObject			@35
#endif //OE_MAC

    ; additional SafeArray APIs
    ;
    SafeArrayAllocDescriptor		@36
    SafeArrayAllocData			@37
    SafeArrayDestroyDescriptor		@38
    SafeArrayDestroyData		@39
    SafeArrayRedim			@40
#if !OE_MAC
    SafeArrayAllocDescriptorEx		@41
    SafeArrayCreateEx				@42
    SafeArrayCreateVectorEx			@43
    SafeArraySetRecordInfo			@44
    SafeArrayGetRecordInfo			@45
    SafeArraySetIID					@57
    SafeArrayGetIID					@67
    SafeArrayGetVartype				@77
#endif // OE_MAC

    ; Numeric parsing routines
    ;
    VarParseNumFromStr			@46
    VarNumFromParseNum			@47

    ; low-level VARTYPE coersion API
    ;
    VarI2FromUI1			@48
    VarI2FromI4				@49
    VarI2FromR4				@50 
    VarI2FromR8				@51
    VarI2FromCy				@52
    VarI2FromDate			@53
    VarI2FromStr			@54
    VarI2FromDisp			@55
    VarI2FromBool			@56
    VarI2FromI1 			@205
    VarI2FromUI2 			@206
    VarI2FromUI4 			@207
    VarI2FromDec			@208

    VarI4FromUI1			@58
    VarI4FromI2				@59
    VarI4FromR4				@60
    VarI4FromR8				@61
    VarI4FromCy				@62
    VarI4FromDate			@63
    VarI4FromStr			@64
    VarI4FromDisp			@65
    VarI4FromBool			@66
    VarI4FromI1 			@209
    VarI4FromUI2 			@210
    VarI4FromUI4 			@211
    VarI4FromDec			@212

    VarR4FromUI1			@68
    VarR4FromI2				@69
    VarR4FromI4				@70
    VarR4FromR8				@71
    VarR4FromCy				@72
    VarR4FromDate			@73
    VarR4FromStr			@74
    VarR4FromDisp			@75
    VarR4FromBool			@76
    VarR4FromI1 			@213
    VarR4FromUI2 			@214
    VarR4FromUI4 			@215
    VarR4FromDec			@216

    VarR8FromUI1			@78
    VarR8FromI2				@79
    VarR8FromI4				@80
    VarR8FromR4				@81
    VarR8FromCy				@82
    VarR8FromDate			@83
    VarR8FromStr			@84
    VarR8FromDisp			@85
    VarR8FromBool			@86
    VarR8FromI1 			@217
    VarR8FromUI2 			@218
    VarR8FromUI4 			@219
    VarR8FromDec			@220

    VarDateFromUI1			@88
    VarDateFromI2			@89
    VarDateFromI4			@90
    VarDateFromR4			@91
    VarDateFromR8			@92
    VarDateFromCy			@93
    VarDateFromStr			@94
    VarDateFromDisp			@95
    VarDateFromBool			@96
    VarDateFromI1 			@221
    VarDateFromUI2 			@222
    VarDateFromUI4 			@223
    VarDateFromDec			@224

    VarCyFromUI1			@98
    VarCyFromI2				@99
    VarCyFromI4				@100
    VarCyFromR4				@101
    VarCyFromR8				@102
    VarCyFromDate=VarCyFromR8		@103
    VarCyFromStr			@104
    VarCyFromDisp			@105
    VarCyFromBool=VarCyFromI2		@106
    VarCyFromI1 			@225
    VarCyFromUI2 			@226
    VarCyFromUI4 			@227
    VarCyFromDec			@228

    VarBstrFromUI1			@108
    VarBstrFromI2			@109
    VarBstrFromI4			@110
    VarBstrFromR4			@111
    VarBstrFromR8			@112
    VarBstrFromCy			@113
    VarBstrFromDate			@114
    VarBstrFromDisp			@115
    VarBstrFromBool			@116
    VarBstrFromI1 			@229
    VarBstrFromUI2 			@230
    VarBstrFromUI4 			@231
    VarBstrFromDec			@232

    VarBoolFromUI1			@118
    VarBoolFromI2			@119
    VarBoolFromI4			@120
    VarBoolFromR4			@121
    VarBoolFromR8			@122
    VarBoolFromDate			@123
    VarBoolFromCy			@124
    VarBoolFromStr			@125
    VarBoolFromDisp			@126
    VarBoolFromI1 			@233
    VarBoolFromUI2 			@234
    VarBoolFromUI4 			@235
    VarBoolFromDec			@236

    VarUI1FromI2			@130
    VarUI1FromI4			@131
    VarUI1FromR4			@132
    VarUI1FromR8			@133
    VarUI1FromCy			@134
    VarUI1FromDate			@135
    VarUI1FromStr			@136
    VarUI1FromDisp			@137
    VarUI1FromBool			@138
    VarUI1FromI1 			@237
    VarUI1FromUI2 			@238
    VarUI1FromUI4 			@239
    VarUI1FromDec			@240

    VarDecFromUI1			@190
    VarDecFromI2			@191
    VarDecFromI4			@192
    VarDecFromR4			@193
    VarDecFromR8			@194
    VarDecFromDate			@195
    VarDecFromCy			@196
    VarDecFromStr			@197
    VarDecFromDisp			@198
    VarDecFromBool			@199
    VarDecFromI1 			@241
    VarDecFromUI2 			@242
    VarDecFromUI4 			@243

    VarI1FromUI1			@244
    VarI1FromI2			        @245
    VarI1FromI4			        @246
    VarI1FromR4			        @247
    VarI1FromR8			        @248
    VarI1FromDate			@249
    VarI1FromCy			        @250
    VarI1FromStr			@251
    VarI1FromDisp			@252
    VarI1FromBool			@253
    VarI1FromUI2 			@254
    VarI1FromUI4 			@255
    VarI1FromDec 			@256

    VarUI2FromUI1			@257
    VarUI2FromI2			@258
    VarUI2FromI4			@259
    VarUI2FromR4			@260
    VarUI2FromR8			@261
    VarUI2FromDate			@262
    VarUI2FromCy			@263
    VarUI2FromStr			@264
    VarUI2FromDisp			@265
    VarUI2FromBool			@266
    VarUI2FromI1 			@267
    VarUI2FromUI4 			@268
    VarUI2FromDec 			@269

    VarUI4FromUI1			@270
    VarUI4FromI2			@271
    VarUI4FromI4			@272
    VarUI4FromR4			@273
    VarUI4FromR8			@274
    VarUI4FromDate			@275
    VarUI4FromCy			@276
    VarUI4FromStr			@277
    VarUI4FromDisp			@278
    VarUI4FromBool			@279
    VarUI4FromI1 			@280
    VarUI4FromUI2 			@281
    VarUI4FromDec 			@282

#if OE_WIN32
    BSTR_UserSize           @283
    BSTR_UserMarshal        @284
    BSTR_UserUnmarshal      @285
    BSTR_UserFree           @286

    VARIANT_UserSize        @287
    VARIANT_UserMarshal     @288
    VARIANT_UserUnmarshal   @289
    VARIANT_UserFree        @290

    LPSAFEARRAY_UserSize    @291
    LPSAFEARRAY_UserMarshal @292
    LPSAFEARRAY_UserUnmarshal @293
    LPSAFEARRAY_UserFree    @294
    LPSAFEARRAY_Size        @295
    LPSAFEARRAY_Marshal     @296
    LPSAFEARRAY_Unmarshal   @297

    UserHWND_from_local     @380
    UserHWND_to_local       @381
    UserHWND_free_inst      @382
    UserHWND_free_local     @383

    UserBSTR_from_local     @384
    UserBSTR_to_local       @385
    UserBSTR_free_inst      @386
    UserBSTR_free_local     @387

    UserVARIANT_from_local  @388
    UserVARIANT_to_local    @389
    UserVARIANT_free_inst   @390
    UserVARIANT_free_local  @391

    UserEXCEPINFO_from_local @392
    UserEXCEPINFO_to_local   @393
    UserEXCEPINFO_free_inst  @394
    UserEXCEPINFO_free_local @395

    UserMSG_from_local      @396
    UserMSG_to_local        @397
    UserMSG_free_inst       @398
    UserMSG_free_local      @399
#endif //OE_WIN32

    ; IIDs
    ;
#if OE_MACPPC		// These shouldn't have been exported, but we
			// can't remove them or we will break compatibility
			// with old apps.  Made them private so that new apps
			// won't bind through the DLL anymore.
    IID_IDispatch			@144  PRIVATE
    IID_IEnumVARIANT			@145  PRIVATE
#endif

    ; Not needed in combined DLL's
    DispCallFunc			@146

    ; Variant Coersion API Extension
    ;
    VariantChangeTypeEx			@147

    ; SAFEARRAY APIs
    ;
    SafeArrayPtrOfIndex			@148

#if OE_WIN32
    ; BSTR Byte APIs
    ;
    SysStringByteLen			@149
    SysAllocStringByteLen		@150
    ;SysReAllocStringByteLen 		@151
#endif //OE_WIN32

    ; Type librarary APIs
    CreateTypeLib          		@160
    LoadTypeLib            		@161
    LoadRegTypeLib         		@162
    RegisterTypeLib        		@163
    QueryPathOfRegTypeLib  		@164
    LHashValOfNameSys	     		@165
#if OE_WIN32
    LHashValOfNameSysA     		@166
#endif //OE_WIN32

    ; New API's for OA94
    OaBuildVersion			@170

    ; New API's for OA96
    ClearCustData			@171

// UNDONE: collapse all the ordinals in order to save space

    CreateTypeLib2			@180
#if OE_WIN32
//UNDONE: temporary until Forms^3 stops demand-loading this
    OACreateTypeLib2=CreateTypeLib2
#endif //OE_WIN32

    LoadTypeLibEx                       @183

#if OE_WIN32
    SystemTimeToVariantTime             @184
    VariantTimeToSystemTime             @185
#endif  // OE_WIN32

    UnRegisterTypeLib                   @186

    ; Rich error APIs
    GetErrorInfo			@200
    SetErrorInfo			@201
    CreateErrorInfo			@202

    DllRegisterServer           	PRIVATE
    DllUnregisterServer         	PRIVATE

#if !OE_MAC
    GetRecordInfoFromGuids          @322
    GetRecordInfoFromTypeInfo       @323
#endif

; CALENDAR_SUPPORT ; Date Pack/Unpack APIs.
	VarDateFromUdate @330
	VarDateFromUdateEx @319
	VarUdateFromDate @331
; CALENDAR_SUPPORT ; API to access the Secondary month names
	GetAltMonthNames @332

    ; Mac Specific Entry Points
#if OE_MACPPC

    ; TypeLib
    LoadTypeLibFSp			@300
    QueryTypeLibFolder			@301
    RegisterTypeLibFolder		@302

// UNDONE: these should really be private, but the other DLLs need to call them.
// UNDONE: Maybe build 2 import libs, one internal, and one external?
    MemAlloc				@350
    MemFree				@351

    // Needed by OAREM
    ErrSysAllocStringLen		@352
    ErrSysAllocString			@353
    SafeArraySize			@354

    // Needed by OATLB
    InitAppData				@355
    g_pappdata				@356
    LoadTypeLib1LockBytes		@357

    // Needed by OARARE
    IsJapan				@358
    IsDBCS				@359

    ; NLS
// marked these as private, since we don't want them in the import lib anymore
    CompareStringA=Thunk_CompareStringA			@403 PRIVATE
    LCMapStringA=Thunk_LCMapStringA      		@400 PRIVATE
    GetLocaleInfoA=Thunk_GetLocaleInfoA			@404 PRIVATE
    GetStringTypeA=Thunk_GetStringTypeA			@405 PRIVATE
    GetSystemDefaultLangID=Thunk_GetSystemDefaultLangID	@406 PRIVATE
    GetUserDefaultLangID=Thunk_GetUserDefaultLangID	@407 PRIVATE
    GetSystemDefaultLCID=Thunk_GetSystemDefaultLCID	@408 PRIVATE
    GetUserDefaultLCID=Thunk_GetUserDefaultLCID		@409 PRIVATE
#endif

    ; DLL support API
    DllCanUnloadNow                     PRIVATE

    ; new SafeArray APIs
    SafeArrayCreateVector		@411
    SafeArrayCopyData			@412

    ; Vector <-> Bstr conversion APIs
    VectorFromBstr			@413
    BstrFromVector			@414

#if !OE_MAC
    ; Standard-Types entry points
    OleIconToCursor			@415
    OleCreatePropertyFrameIndirect	@416
    OleCreatePropertyFrame		@417
    OleLoadPicture			@418
    OleLoadPictureEx		@401
    OleCreatePictureIndirect		@419
    OleCreateFontIndirect		@420
    OleTranslateColor			@421
    OleLoadPictureFile			@422
    OleLoadPictureFileEx		@402
    OleSavePictureFile			@423
    OleLoadPicturePath                  @424

    ; Format entry points
    VarFormat					@87
    VarFormatDateTime			@97
    VarFormatNumber				@107
    VarFormatPercent			@117
    VarFormatCurrency			@127
    VarWeekdayName				@128
    VarMonthName				@129
    VarFormatFromTokens			@139
    VarTokenizeFormatString		@140

	; Variant math
	VarAdd						@141
	VarAnd						@142
	VarDiv						@143
	VarEqv						@152
	VarIdiv						@153
	VarImp						@154
	VarMod						@155
	VarMul						@156
	VarOr						@157
	VarPow						@158
	VarSub						@159
	VarXor						@167
	VarAbs						@168
	VarFix						@169
	VarInt						@172
	VarNeg						@173
	VarNot						@174
	VarRound					@175
	VarCmp						@176
	VarDecAdd					@177
	VarDecDiv					@178
	VarDecMul					@179
	VarDecSub					@181
	VarDecAbs					@182
	VarDecFix					@187
	VarDecInt					@188
	VarDecNeg					@189
	VarDecRound					@203
	VarDecCmp					@204
	VarDecCmpR8					@298
	VarCyAdd					@299
	VarCyMul					@303
	VarCyMulI4					@304
	VarCySub					@305
	VarCyAbs					@306
	VarCyFix					@307
	VarCyInt					@308
	VarCyNeg					@309
	VarCyRound					@310
	VarCyCmp					@311
	VarCyCmpR8					@312
	VarBstrCat					@313
	VarBstrCmp					@314
	VarR8Pow					@315
	VarR4CmpR8					@316
	VarR8Round					@317
	VarCat						@318
#endif

//
// Note:  If you plan to add more entry points, please fill in the holes
// we already have, i.e., select numbers that are smaller than 423.
// This way, we don't increase the DLL image size for entry points.

