/********************** START OF SPECIFICATIONS ****************************/
/*                                                                         */
/* Module Name: MInstall.h                                                 */
/*                                                                         */
/* DESCRIPTIVE NAME: Defines for creation of Installation Device Specific  */
/*                   Dlls.                                                 */
/*                                                                         */
/* ABSTRACT: This file contains information necessary for the creation of  */
/*           device specific Dlls. A message based interface exists so     */
/*           that theses Dlls can do such things as change config.sys,     */
/*           update the MME.INI file, and create WPS Objects.              */
/*                                                                         */
/* Copyright (c) International Business Machines Corporation 1990,1991     */
/*                         All Rights Reserved                             */
/*                                                                         */
/*********************** END OF SPECIFICATIONS *****************************/

#ifndef __MINSTALL_H_
#define __MINSTALL_H_

#define MAX_SETUP_STRING      1000     /* Longest setup string including   */
                                       /*   expanded macros                */

#define MAX_FOLDER_NAME       150      /* Longest desktop folder name      */

#define MAX_RESPONSE_LENGTH   256      /* Max device specific DLL response */

/* XLATOFF */
#pragma pack(4)
/* XLATON */

/***************************************************************************/
/* This is a function pointer prototype that describes the entry point     */
/* into the device specific DLL.                                           */
/*                                                                         */
/* Parameters:  HWND - Owner handle.                                       */
/*              PSZ  - Source path.                                        */
/*              PSZ  - Destination Drive (drive letter, colon - eg.  "X:") */
/*              PSZ  - Dll input parms in script file (DLL specific)       */
/*              HWND - Object window that receives message to do MCI and   */
/*                     CONFIG.SYS work.                                    */
/*              PSZ  - PSZ used for response file. (Is a CHAR [256] and    */
/*                     used for IN/OUT)                                    */
/***************************************************************************/
typedef ULONG APIENTRY VENDORFUNCTION(HWND,
                                          PSZ,
                                          PSZ,
                                          PSZ,
                                          HWND,
                                          PSZ);

typedef VENDORFUNCTION  * PVENDORFUNCTION;

/***************************************************************************/
/* MM_DISPATCHVARS and MM_DISPATCHMESSAGES() are two macros used by Device */
/* specific DLL's to keep the user interface responsive while they are     */
/* doing updates to MME.INI, config.sys, etc . . . This is necessary       */
/* because the device specific dll's are executing in install's msg queue  */
/* thread (thread 1).                                                      */
/*                                                                         */
/* MM_DISPATCHVARS should be declared in the scope required for the        */
/* MM_DISPATCHMESSAGES() macro to use them.                                */
/*                                                                         */
/* MM_DISPATHMESSAGES() should be used before and after every I/O intensive*/
/* operation.                                                              */
/*                                                                         */
/* An example would be:                                                    */
/*                                                                         */
/* void IOIntensive()                                                      */
/*    {                                                                    */
/*    MM_DISPATCHVARS;                                                     */
/*                                                                         */
/*    MM_DISPATHMESSAGES();                                                */
/*    DiskIO();                                                            */
/*    MM_DISPATHMESSAGES();                                                */
/*    }                                                                    */
/*                                                                         */
/* Please set the mouse pointer to SPTR_WAIT during operations lasting     */
/* than 1 second.                                                          */
/***************************************************************************/
#define MM_DISPATCHVARS        HAB MM_hab_ = WinQueryAnchorBlock(HWND_DESKTOP);\
                               QMSG MM_qmsg_

#define MM_DISPATCHMESSAGES()  while (WinPeekMsg(MM_hab_,                   \
                                                 &MM_qmsg_,                 \
                                                 (HWND)NULL,                \
                                                 0,                         \
                                                 0,                         \
                                                 PM_NOREMOVE))              \
                                  {                                         \
                                  WinGetMsg(MM_hab_, &MM_qmsg_, NULL, 0, 0);\
                                  WinDispatchMsg(MM_hab_, &MM_qmsg_);       \
                                  }

/***************************************************************************/
/* IM_MCI_EXTENDED_SYSINFO - Maps to MCI_SYSINFO.                          */
/*                                                                         */
/* mp1 = msg;                                                              */
/* mp2 = pvoid;                                                            */
/*                                                                         */
/* This will map to:                                                       */
/*         sysinfo.dwItem       = (ULONG)LONGFROMMP(mp1);                  */
/*         sysinfo.pSysInfoParm = PVOIDFROMMP(mp2);                        */
/*         mciSendCommand((USHORT)0,                                       */
/*                        (USHORT)MCI_SYSINFO,                             */
/*                        (ULONG)MCI_SYSINFO_ITEM,                         */
/*                        (ULONG)&sysinfo,                                 */
/*                        (USHORT)0);                                      */
/***************************************************************************/
#define IM_MCI_EXTENDED_SYSINFO     0x057E

/* XLATOFF */
#pragma pack(1)
/* XLATON */

typedef struct _INSTIOPROC
   {
   CHAR  fccIOProc[5];
   CHAR  szDLLName[CCHMAXPATH];
   CHAR  szProcName[32];  /* [128] */
   ULONG ulFlags;                          /* feature 5508 */
   ULONG ulExtendLen;                      /* feature 5508 */
   ULONG ulMediaType;                      /* feature 5508 */
   ULONG ulIOProcType;                     /* feature 5508 */
   CHAR  szDefExt[4];                      /* feature 5508 */
   } INSTIOPROC;

typedef INSTIOPROC *PINSTIOPROC;

typedef struct _INSTCODECINIFILEINFO         /* codecinifileinfo            */
   {                                                       /* feature 5572 */
   ULONG       ulStructLen;                  /* length of this structure    */
                                                           /* feature 5572 */
   CHAR        fcc[5];                       /* File Format ID              */
                                                           /* feature 5572 */
   CHAR        szDLLName[CCHMAXPATH];        /* DLL name string             */
                                                           /* feature 5572 */
   CHAR        szProcName[32];               /* Procedure name string       */
                                                           /* feature 5572 */
/* ULONG       ulCompressType;   */          /* Compression Type            */
   union
                                                           /* feature 5572 */
      {
      ULONG  ulCodecCompType;
                                                           /* feature 5572 */
      CHAR   fccCodecCompType[5];
      } x;
                                                           /* feature 5572 */
   ULONG       ulCompressSubType;            /* Compression SubType         */
                                                           /* feature 5572 */
   ULONG       ulMediaType;                  /* Media type                  */
                                                           /* feature 5572 */
   ULONG       ulCapsFlags;                  /* capabilities flags          */
                                                           /* feature 5572 */
   ULONG       ulFlags;                      /* flags                       */
                                                           /* feature 5572 */
   CHAR        szHWID[32];                   /* specific information        */
                                                           /* feature 5572 */
   ULONG       ulMaxSrcBufLen;               /* max source buffer length    */
                                                           /* feature 5572 */
   ULONG       ulSyncMethod;                  /* Synchronization method      */
                                                           /* feature 5572 */
   ULONG       ulReserved1;                  /* Reserved1                   */
                                                           /* feature 5572 */
   ULONG       ulXalignment;                 /* x alignment - video only    */
                                                           /* feature 5572 */
   ULONG       ulYalignment;                 /* y alignment - video only    */
                                                           /* feature 5572 */
   CHAR        szSpecInfo[32];               /* specific information        */
                                                           /* feature 5572 */
   } INSTCODECINIFILEINFO;
                                                           /* feature 5572 */

typedef INSTCODECINIFILEINFO * PINSTCODECINIFILEINFO;
                                                           /* feature 5572 */

/* XLATOFF */
#pragma pack( )
/* XLATON */

/***************************************************************************/
/* IM_MMIO_INSTALL - Install an IO-Proc                                    */
/*                                                                         */
/* mp1 = 0;                        ** Not used                             */
/* mp2 = (PINSTIOPROC)&instioproc; ** pointer to the INSTIOPROC struct     */
/***************************************************************************/
#define IM_MMIO_INSTALL    0x057F

/***************************************************************************/
/* IM_SPI_INSTALL - Install stream protocol information                    */
/*                                                                         */
/* mp1 = 0;                ** Not used                                     */
/* mp2 = (PSZ)pszDllPath;  ** Fully qualified path of a SPI resource DLL   */
/***************************************************************************/
#define IM_SPI_INSTALL     0x0580

#define INST_MAXCLASSNAME   256
#define INST_MAXTITLE       256
#define INST_MAXSETUPSTRING 1024
#define INST_MAXLOCATION    256


typedef struct _INSTOBJECTDATA
   {
   CHAR  achClassName[INST_MAXCLASSNAME];
   CHAR  achTitle[INST_MAXTITLE];
   CHAR  achSetupString[INST_MAXSETUPSTRING];
   CHAR  achLocation[INST_MAXLOCATION];
   ULONG ulFlags;
   } INSTOBJECTDATA;

typedef INSTOBJECTDATA *PINSTOBJECTDATA;

/***************************************************************************/
/* IM_CREATE_WPS_OBJECT - Install a folder and its contents                */
/*                                                                         */
/* mp1 = 0;                ** Not used                                     */
/* mp2 = MPFROMP(pinstOBJECTdata);                                         */
/***************************************************************************/
#define IM_CREATE_WPS_OBJECT  0x0571

/***************************************************************************/
/* IM_DESTROY_WPS_OBJECT - Install a folder and its contents               */
/*                                                                         */
/* mp1 = 0;                ** Not used                                     */
/* mp2 = MPFROMP(HOBJECT); ** or "<OBJECT_ID>"                             */
/***************************************************************************/
#define IM_DESTROY_WPS_OBJECT  0x0572

/***************************************************************************/
/* IM_LOG_ERROR - Write a message to the log file.                         */
/*                                                                         */
/* mp1 = (PSZ)pszStatement;   ** Should end with a '\n' and be NULL        */
/*                            **  terminated                               */
/* mp2 = 0;                   ** Unused                                    */
/***************************************************************************/
#define IM_LOG_ERROR       0x0573

/***************************************************************************/
/* CONFIGDATA - Pointer to this structure is passed in mp1 in all CONFIG   */
/*              messages.                                                  */
/***************************************************************************/
typedef struct _CONFIGDATA
   {
   LONG lLine;
   LONG lBufferLen;
   PSZ  pszBuffer;
   BOOL fAdd;
   } CONFIGDATA;

typedef CONFIGDATA *PCONFIGDATA;

/***************************************************************************/
/* IM_CONFIGENUMERATE - Get a line from the config.sys file.               */
/*                                                                         */
/* mp1 = (PCONFIGDATA)pconfdata;                                           */
/* mp2 = 0                                                                 */
/***************************************************************************/
#define IM_CONFIGENUMERATE 0x0574

/***************************************************************************/
/* IM_CONFIGUPDATE - Update an entry in the config.sys file.               */
/*                                                                         */
/* mp1 = (PCONFIGDATA)pconfdata;                                           */
/* mp2 = 0                                                                 */
/***************************************************************************/
#define IM_CONFIGUPDATE    0x0575

/***************************************************************************/
/* IM_CONFIGMERGE - Merge data into an existing config.sys entry.          */
/*                                                                         */
/* mp1 = (PCONFIGDATA)pconfdata;                                           */
/* mp2 = 0                                                                 */
/***************************************************************************/
#define IM_CONFIGMERGE     0x0576

/***************************************************************************/
/* IM_CONFIGEREPLACE - Replace an entry that exists in config.sys.         */
/*                                                                         */
/* mp1 = (PCONFIGDATA)pconfdata;                                           */
/* mp2 = 0                                                                 */
/***************************************************************************/
#define IM_CONFIGREPLACE   0x0577

/***************************************************************************/
/* IM_CONFIGNEW - Add a line to the config.sys file.                       */
/*                                                                         */
/* mp1 = (PCONFIGDATA)pconfdata;                                           */
/* mp2 = 0                                                                 */
/***************************************************************************/
#define IM_CONFIGNEW       0x0578

/***************************************************************************/
/* IM_CONFIGDELETE - Delete a line (REM it out) from the config.sys file.  */
/*                                                                         */
/* mp1 = (PCONFIGDATA)pconfdata;                                           */
/* mp2 = 0                                                                 */
/***************************************************************************/
#define IM_CONFIGDELETE    0x0579

/***************************************************************************/
/* IM_CONFIGQUERYCHANGED - Returns TRUE if config.sys has changed else     */
/*                         FALSE.                                          */
/*                                                                         */
/* mp1 = 0                                                                 */
/* mp2 = 0                                                                 */
/***************************************************************************/
#define IM_CONFIGQUERYCHANGED    0x057A


typedef struct _MIDIMAPINSTALLDATA
   {
   CHAR  achIniName[CCHMAXPATH];
   CHAR  achAppName[1024];
   CHAR  achKeyName[1024];
   CHAR  achDllName[CCHMAXPATH];
   ULONG ulResourceID;
   } MIDIMAPINSTALLDATA;

typedef MIDIMAPINSTALLDATA *PMIDIMAPINSTALLDATA;

/***************************************************************************/
/* IM_MIDIMAP_INSTALL - Install a midi map.                                */
/*                                                                         */
/* mp1 = 0;                ** Not used                                     */
/* mp2 = MPFROMP(pmidimapinstalldata);                                     */
/*                                                                         */
/* Return 0 on success, else error occurred.                               */
/***************************************************************************/
#define IM_MIDIMAP_INSTALL 0x057B

typedef struct _INSTMCISENDCOMMAND
   {
   USHORT wDeviceID;
   USHORT wMessage;
   ULONG  dwParam1;
   ULONG  dwParam2;
   USHORT wUserParm;
   } INSTMCISENDCOMMAND;

typedef INSTMCISENDCOMMAND *PINSTMCISENDCOMMAND;

/***************************************************************************/
/* IM_MCI_SEND_COMMAND - Send an MCI command                               */
/*                                                                         */
/* mp1 = 0;                ** Not used                                     */
/* mp2 = MPFROMP(PINSTMCISENDCOMMAND);                                     */
/*                                                                         */
/* Return mciSendCommand result.                                           */
/***************************************************************************/
#define IM_MCI_SEND_COMMAND         0x057C

typedef struct _INSTEAJOIN
   {
   CHAR achFileName[CCHMAXPATH];
   CHAR achEAFileName[CCHMAXPATH];
   } INSTEAJOIN;

typedef INSTEAJOIN *PINSTEAJOIN;

/***************************************************************************/
/* IM_EA_JOIN                                                              */
/*                                                                         */
/* mp1 = 0;                ** Not used                                     */
/* mp2 = MPFROMP(PINSTEAJOIN);                                             */
/*                                                                         */
/* Return EA join result.                                                  */
/***************************************************************************/
#define IM_EA_JOIN                  0x057D

typedef struct _INSTEALONGNAMEJOIN
   {
   CHAR achLongName[CCHMAXPATH];
   CHAR achLongFileName[CCHMAXPATH];
   CHAR achEALongFileName[CCHMAXPATH];
   } INSTEALONGNAMEJOIN;

typedef INSTEALONGNAMEJOIN *PINSTEALONGNAMEJOIN;

/***************************************************************************/
/* IM_EA_LONG_NAME_JOIN                                                    */
/*                                                                         */
/* mp1 = 0;                ** Not used                                     */
/* mp2 = MPFROMP(PINSTEALONGNAMEJOIN);                                     */
/*                                                                         */
/* Return EA long name creation result.                                    */
/***************************************************************************/
#define IM_EA_LONG_NAME_JOIN                  0x0581
                                                           /* feature 6302 */
#define IM_QUERYPATH                          0x0582


/***************************************************************************/
/* IM_CODECINSTALL - Install a Codec-Proc                                  */
/*                                                                         */
/* mp1 = 0;                        ** Not used                             */
/* mp2 = (PINSTCODECINIFILEINFO)&instioproc;                               */
/*                                 ** pointer to the INSTIOPROC struct     */
/*                                                         /* feature 5572 */
/***************************************************************************/
#define IM_CODEC1INSTALL                       0x0583
                                                           /* feature 5572 */
#define IM_CODEC2INSTALL                       0x0584
                                                           /* feature 5572 */

#ifndef NO_ERROR
#define NO_ERROR 0
#endif

#define CFGERR_BASE                    0xFF00
#define CFGERR_START                   (CFGERR_BASE + 1)

#define CFGERR_OPENFAILED              (CFGERR_START +  1)
#define CFGERR_OUTOFMEMORY             (CFGERR_START +  2)
#define CFGERR_INVALIDPARAMETER        (CFGERR_START +  3)
#define CFGERR_INVALIDENUMFLAG         (CFGERR_START +  4)
#define CFGERR_ATTOP                   (CFGERR_START +  5)
#define CFGERR_ATBOTTOM                (CFGERR_START +  6)
#define CFGERR_BUFFEROVERFLOW          (CFGERR_START +  7)
#define CFGERR_LINENOTFOUND            (CFGERR_START +  8)
#define CFGERR_CANTPARSEBUFFER         (CFGERR_START +  9)
#define CFGERR_VARIABLENOTFOUND        (CFGERR_START + 10)

/* Line positions */
#define CONFIG_TOP      -1
#define CONFIG_BOTTOM   -2
#define CONFIG_NEXT     -3
#define CONFIG_PREV     -4
#define CONFIG_CURRENT  -5

/* XLATOFF */
#pragma pack( )
/* XLATON */

#endif /* #ifndef __MINSTALL_H_ */

