/*static char *SCCSID = "@(#)propp.h	6.3 91/06/24";*/
/***    propp.h - PRIVATE VDM properties definitions
 *
 *      SCCSID = @(#)propp.h	6.3 91/06/24
 *
 *      IBM/Microsoft Confidential
 *
 *      Copyright (c) IBM Corporation 1987, 1989
 *      Copyright (c) Microsoft Corporation 1987, 1989
 *
 *      All Rights Reserved
 *
 *      Title:
 *          Kernel VDM Properties private definitions
 *
 *      Modification History:
 *          03-Nov-1989 bens    Initial version.
 *
 *   -  002     3/22/91   Mark Rogalski,   IBM
 *      CP20 DCR 1360  Add DOS=HIGH support
 *
;***********************************************************************;BN011;
; 19Jun91 - G.L.Fulk                                                    ;BN011;
; Add support for a DOS ONLY "FILES=" statement in CONFIG.SYS.          ;BN011;
;***********************************************************************;BN011;
 *
 */


/***LT+ VDMINITCONFIG - Sysinit_Create_DOS_Mode configuration structure
 *
 *      SysInit_Create_DOS_Mode passes this structure to VDMMInit at
 *      initialization time to allow communication with the
 *      nonfatal error handler thread.  To signal that a nonfatal error
 *      has occurred, the following steps must be taken:
 *
 *          1.  Fill pFailureBuf with a failure cause, if applicable.
 *          2.  Store the error code through pusErrorCode.
 *          3.  Set hsemErrHBusy.
 *          4.  Clear hsemBufEmpty.
 *          5.  Wait for hsemErrHBusy to clear.
 *
 *      When VDMMInit receives the structure, all pointers are still 16:16.
 *      It is incumbent upon VDMMInit to convert non-semaphore pointers
 *      before dereferencing them.
 */

#define RMSIZE_DEFAULT          640
#define CFCBS_DEFAULT           16
#define CFCBS_NOCLOSE_DEFAULT   8


typedef struct vdminitconfig_s {
    ULONG   ulcbFailureBuf; // Length of failure cause buffer in bytes
    PSZ     pFailureBuf;    // Failure cause buffer.  VDMMInit fills this
                            // buffer with the failure cause before returning
                            // (if the error was fatal) or signalling the
                            // nonfatal error handler.
    PUSHORT pusErrorCode;   // If the error was nonfatal, the error code
                            // is stored here before signalling the nonfatal
                            // error handler.
    ULONG   hsemBufEmpty;   // Semaphore to clear when the failure cause
                            // buffer has been loaded with information.
    ULONG   hsemErrHBusy;   // Semaphore to wait on to let the nonfatal error
                            // handler do its thing.
} VDMINITCONFIG;

typedef VDMINITCONFIG *PVDMINITCONFIG;  /* pVDMInitconfig */
/*end*/


/***LT+ VDMCONFIG - Configuration structure from SysInit to VDMMInit
 *
 *      SysInit passes information parsed out of CONFIG.SYS to MVDM
 *      initialization.
 */

typedef struct vdmconfig_s {
    PSZ     pszSHELL;       // VDM shell pathname + arguments (excluding /C)
                            //   whatever follows "SHELL=" in CONFIG.SYS;
                            //   if NULL, VDMM assumes "X:\COMMAND.COM /P"

    USHORT  usRMSIZE;       // VDM size
                            //   whatever follows "RMSIZE=" in CONFIG.SYS;
                            //   if ZERO, VDMM assumes RMSIZE_DEFAULT

    USHORT  nFCBs;          // Maximum open FCBs
                            //   whatever follows "FCBS=" in CONFIG.SYS;
                            //   if USHRT_MAX, VDMM assumes CFCBS_DEFAULT

    USHORT  nFCBsNoClose;   // Maximum uncloseable FCBs
                            //   whatever follows "FCBS=n," in CONFIG.SYS;
                            //   if USHRT_MAX, VDMM assumes CFCBS_NOCLOSE_DEFAULT

    USHORT  nFILES;         // Maximum open File handles                   /*BN011*/
                            //   whatever follows "FILES=" in CONFIG.SYS;  /*BN011*/
                            //   if USHRT_MAX, VDMM assumes DefaultFilesCount/*BN011*/
                                                                           /*BN011*/
    USHORT  iBREAK;         // VDM initial BREAK setting
                            //   IBREAK_ON if BREAK=ON, IBREAK_OFF if BREAK=OFF
                            //   if IBREAK_DEFAULT, VDMM assumes OFF

    USHORT  Dos_Flags;      // flags from DOS= statement   ;BN002

    PSZZ    pszzDOSDDs;     // VDM DOS DD list
                            //   <DDpathname parameters>\0
                            //   ...
                            //   <DDpathname parameters>\0
                            //   \0
                            //   which are collected from all the
                            //   "DEVICE=<DDpathname>" strings in CONFIG.SYS;
                            //   if NULL, no DOS DDs were specified
} VDMCONFIG;

typedef VDMCONFIG *PVDMCONFIG;  /* pVDMconfig */
/*end*/


typedef ULONG   HPROPINST;  // hprin
typedef HPROPINST *PHPROPINST; // phprin

//c-begin
ULONG vdmPropertyInit(VOID);
ULONG vdmCreatePropertyInstance(PPROPERTYBUFFER,PHPROPINST);
VOID  vdmSetPropertyInstance(HPROPINST);
VOID  vdmDestroyPropertyInstance(VOID);
ULONG vdmQueryProperty(VPORD);
ULONG vdmSetPropertyDefaults(PVDMCONFIG);
//c-end
