/* this code is a part of Henk Kelder's Hektools package */
#ifndef WPTOOLS_H
#define WPTOOLS_H

/*
   Several defines to read WPShell data
*/
#define FOLDERCONTENT  "PM_Abstract:FldrContent"
#define OBJECTS        "PM_Abstract:Objects"
#define ICONS          "PM_Abstract:Icons"

#define ACTIVEHANDLES  "PM_Workplace:ActiveHandles"
#define HANDLESAPP     "HandlesAppName"

#define FOLDERPOS      "PM_Workplace:FolderPos"
#define HANDLES        "PM_Workplace:Handles"
#define LOCATION       "PM_Workplace:Location"
#define PALETTEPOS     "PM_Workplace:PalettePos"
#define STATUSPOS      "PM_Workplace:StatusPos"
#define STARTUP        "PM_Workplace:Startup"
#define TEMPLATES      "PM_Workplace:Templates"
#define HANDLEBLOCK    "BLOCK1"
#define ASSOC_FILTER   "PMWP_ASSOC_FILTER"
#define ASSOC_TYPE     "PMWP_ASSOC_TYPE"
#define ASSOC_CHECKSUM "PMWP_ASSOC_CHECKSUM"
#define WORKAREARUNNING "FolderWorkareaRunningObjects"
#define JOBCNRPOS       "PM_PrintObject:JobCnrPos"
#define CLASSTABLE      "ClassTable"
#define PRINTOBJECTS    "PM_PrintObject"
#define PM_OBJECTS      "PM_Objects"

/*
   The high word of a HOBJECT determines it's type.
*/

/*
   Several datatags
*/
#define WPPROGRAM_PROGTYPE  1
#define WPPROGRAM_EXEHANDLE 2
#define WPPROGRAM_PARAMS    3
#define WPPROGRAM_DIRHANDLE 4
#define WPPROGRAM_DOSSET    6
#define WPPROGRAM_STYLE     7
#define WPPROGRAM_EXENAME   9
#define WPPROGRAM_DATA      11
#define WPPROGRAM_STRINGS   10
#define WPPGM_STR_EXENAME   0
#define WPPGM_STR_ARGS      1

#define WPABSTRACT_TITLE    1
#define WPABSTRACT_STYLE     2		/* appears to contain the same as WPOBJECT 7 */

#define WPOBJECT_HELPPANEL   2
#define WPOBJECT_SZID        6
#define WPOBJECT_STYLE       7
#define WPOBJECT_MINWIN      8
#define WPOBJECT_CONCURRENT  9
#define WPOBJECT_VIEWBUTTON 10
#define WPOBJECT_DATA       11
#define WPOBJECT_STRINGS    12
#define WPOBJ_STR_OBJID      1

#define WPSHADOW_LINK     104

#define WPFOLDER_FOLDERFLAG  13
#define WPFOLDER_ICONVIEW  2900
#define WPFOLDER_DATA      2931
#define WPFOLDER_FONTS     2932

#define WPPROGFILE_PROGTYPE  1
#define WPPROGFILE_DOSSET    5
#define WPPROGFILE_STYLE     6
#define WPPROGFILE_DATA     10
#define WPPROGFILE_STRINGS  11
#define WPPRGFIL_STR_ARGS    0

#define WPFSYS_MENUCOUNT     4
#define WPFSYS_MENUARRAY     3

#define IDKEY_PRNQUEUENAME 3
#define IDKEY_PRNCOMPUTER  5
#define IDKEY_PRNJOBDIALOG 9
#define IDKEY_PRNREMQUEUE 13

#define IDKEY_RPRNNETID    1

#define IDKEY_DRIVENUM     1

#define MAX_PATH               512
#define MAX_DIR                256
#define FILTER_SIZE            10
#define EANAME_SIZE            50
#define MAX_ASSOC              5

#define TYPE_DRIVE     0
#define TYPE_DIRECTORY 1
#define TYPE_FILE      2
#define TYPE_ABSTRACT  3

#pragma pack(1)

typedef struct _NodeDev
{
    BYTE chName[4];		/* = 'NODE' */
    USHORT usLevel;
    USHORT usID;
    USHORT usParentID;
    BYTE ch[18];
    USHORT fIsDir;
    USHORT usNameSize;
    BYTE szName[1];
}
NODE, *PNODE;

typedef struct _DrivDev
{
    BYTE chName[4];		/* = 'DRIV' */
    BYTE ch1[8];
    ULONG ulSerialNr;
    BYTE ch2[4];
    BYTE szName[1];
}
DRIV, *PDRIV;

typedef struct _FileInfo
{
    HPOINTER hptrIcon;
    HPOINTER hptrMiniIcon;
    BOOL bIconCreated;
    BOOL bMiniIconCreated;
    BYTE szFileName[MAX_PATH];
    BYTE szTitle[MAX_PATH];
    BYTE chType;
    HAPP happ;
    HOBJECT hObject;
    HOBJECT hObjAssoc[MAX_ASSOC];
}
FILEINFO, *PFILEINFO;

/*
   Two structures needed for reading WPAbstract's object information
*/
typedef struct _ObjectInfo
{
    USHORT cbName;		/* Size of szName */
    USHORT cbData;		/* Size of variable length data, starting after szName */
    BYTE szName[1];		/* The name of the datagroup */
}
OINFO, *POINFO;

typedef struct _TagInfo
{
    USHORT usTagFormat;		/* Format of data       */
    USHORT usTag;		/* The data-identifier  */
    USHORT cbTag;		/* The size of the data */
}
TAG, *PTAG;

typedef struct _WPProgramRefData
{
    HOBJECT hExeHandle;
    HOBJECT hCurDirHandle;
    ULONG ulFiller1;
    ULONG ulProgType;
    BYTE bFiller[12];
}
WPPGMDATA;

typedef struct _WPProgramFileData
{
    HOBJECT hCurDirHandle;
    ULONG ulProgType;
    ULONG ulFiller1;
    ULONG ulFiller2;
    ULONG ulFiller3;
}
WPPGMFILEDATA;

typedef struct _WPObjectData
{
    LONG lDefaultView;
    ULONG ulHelpPanel;
    ULONG ulUnknown3;
    ULONG ulObjectStyle;
    ULONG ulMinWin;
    ULONG ulConcurrent;
    ULONG ulViewButton;
    ULONG ulMenuFlag;
}
WPOBJDATA;

typedef struct _WPFolderData
{
    ULONG ulIconView;
    ULONG ulTreeView;
    ULONG ulDetailsView;
    ULONG ulFolderFlag;
    ULONG ulTreeStyle;
    ULONG ulDetailsStyle;
    BYTE rgbIconTextBkgnd[4];
    BYTE Filler1[4];
    BYTE rgbIconTextColor[4];
    BYTE Filler2[8];
    BYTE rgbTreeTextColor[4];
    BYTE rgbDetailsTextColor[4];
    BYTE Filler3[4];
    USHORT fIconTextVisible;
    USHORT fIconViewFlags;
    USHORT fTreeTextVisible;
    USHORT fTreeViewFlags;
    BYTE Filler4[4];
    ULONG ulMenuFlag;
    BYTE rgbIconShadowColor[4];
    BYTE rgbTreeShadowColor[4];
    BYTE rgbDetailsShadowColor[4];
}
WPFOLDATA;

typedef struct _FsysMenu
{
    USHORT usIDMenu;
    USHORT usIDParent;
    USHORT usMenuType;		/*  1 = Cascade, 2 = condcascade, 3 = choice */
    HOBJECT hObject;
    BYTE szTitle[32];
}
FSYSMENU, *PFSYSMENU;

typedef struct _FolderSort
{
    LONG lDefaultSortIndex;
    BOOL fAlwaysSort;
    LONG lCurrentSort;
    BYTE bFiller[12];
}
FOLDERSORT, *PFOLDERSORT;

#define BASECLASS_TRANSIENT 0
#define BASECLASS_ABSTRACT  1
#define BASECLASS_FILESYS   2
#define BASECLASS_OTHER    99

#pragma pack()

BOOL GetAbstractName(HOBJECT hObject, PSZ pszExe, USHORT usMax);
ULONG GetObjectProgType(HOBJECT hObject);
BOOL GetObjectTitle(HOBJECT hObject, PSZ pszTitle, USHORT usMax);
BOOL GetObjectParameters(HOBJECT hObject, PSZ pszParms, USHORT usMax);
BOOL GetDosSettings(HOBJECT hObject, PSZ pszDosSettings, USHORT usMax);
USHORT ObjIDFromName(PSZ pszAbstractName, PSZ pszCmdLine, ULONG ulProgType,
		     BOOL bSearchGroup);
HPOINTER GetObjectIcon(HOBJECT hObject, PBYTE pObjectData);
BOOL GetObjectName(HOBJECT hObject, PSZ pszFname, USHORT usMax);

#endif
