INSTALL.H

#include "dialogs.h" 
#define MAXREGPATHLEN1024 // Max length of registry path
#define MAXTPLEN128 // Max length of TP name
#define MAXBINPATHLEN 256 // Max length of file path
#define MAXPARAMLEN 128 // Max length of command-line parameters
#define MAXUSERNAMELEN 32// Max length of username
#define MAXPASSWORDLEN 32// Max length of password
#define MAXLULEN8// Max length of LU name

#define VALIDATE_INT 1
#define VALIDATE_APPC 2

#define INFINITE_TIMEOUT "-1" // Value used for infinite timeout
#define INIT_TIMEOUT 5 // Initial value displayed in timeout box
#define MAXTIMEOUTLEN5 // Max digits in timeout

#ifdef WIN32

typedef struct _KeyEntry {
LPSTR lpParent; // Parent key
LPSTR lpName; // Data field name
int iDataType; // Type of data
LPSTR lpData;// Data itself
int iDataSize;// Length of data, including nulls
} KEYENTRY;

// The following variable defines the subkeys that are placed in the registry.
// The first field gives the key under which to create the new subkey. The
// second field is the subkey name. The third field is the data type.
// The fourth field gives the data itself. This should always be a string,
// HOWEVER, if the third field isn't REG_SZ, some interpretation will go on,
// as follows:
// If the third field is REG_MULTI_SZ, you should add an extra null character
// to the end of the string to simulate an array of strings.
// If the third field is REG_DWORD, you should enter the numeric value as
// a string in the fourth field, as in "345" if you want the data to be the
// number 345.
// The fifth field is the length of the fourth field in bytes, INCLUDING nulls.
// This field is set automatically for REG_DWORD data.
KEYENTRY keyinfo[] = {
{ "Linkage", "OtherDependencies", REG_MULTI_SZ, "SnaBase\0", 9 },
{ "Parameters", "SNAServiceType", REG_DWORD, "5", 4 },
{ "Parameters", "ConversationSecurity", REG_SZ, "yes", 4 },
{ "Parameters", "AlreadyVerified", REG_SZ, "yes", 4 },
{ "Parameters", "Timeout", REG_DWORD, "", 4 },
{ "Parameters", "Parameters", REG_SZ, "", 4 },
{ "Parameters", "LocalLU", REG_SZ, "", 4 },
{ "Parameters", "", REG_SZ, "", 4 },
{ "Parameters", "PathName", REG_SZ, "", 4 },
};

// These numbers must correspond to the indices in keyinfo above!
#define SNASRVTYPE 1
#define CONVSEC 2
#define ALREADYVER 3
#define TIMEOUT 4
#define PARAMETERS 5
#define LUNAME 6
#define USER 7 // Blank field for writing out users & passwords
#define EXENAME 8
#define NUMKEYS 6 // Last three keys only written out if needed

int InstallServiceNT(HWND, LPSTR, LPSTR);
int CreateKeys(LPSTR, BOOL, LPSTR, int, int, int, LPSTR, LPSTR, LPSTR);
INT WriteKeyNT(LPSTR, KEYENTRY, BOOL);

#else

#define USHORT unsigned short
#define INT int
#define SHORT short

typedef struct _KeyEntry {
char *name; // Data field name
char *data; // Data itself
} KEYENTRY;

// If you change the fields below, change the #defines too; they are used
// as indices into the keyinfo structure to set the data fields, which are
// initially all NULL.

KEYENTRY keyinfo[] = {
{ "PathName", NULL },
{ "Parameters", NULL },
{ "Queued", NULL },
{ "Timeout", NULL },
{ "ConversationSecurity", NULL },
{ "AlreadyVerified", NULL },
{ "LocalLU", NULL },
{ "", NULL },
};
#define PATHNAME 0
#define PARAMETERS 1
#define QUEUED 2
#define TIMEOUT 3
#define CONVSEC 4
#define ALREADYVER 5
#define LUNAME 6
#define USER 7
#define NUMKEYS 6// Last keys only written out if necessary

int InstallWindows(HWND, char *, char *, char *, char *, int, int, int, char *);
INT WriteKeyWindows(char *, char *, char *);

#endif //ifdef WIN32

extern BOOL CALLBACK MainDlgProc (HWND, UINT, WPARAM, LPARAM);
extern BOOL CALLBACK UserDlgProc (HWND, UINT, WPARAM, LPARAM);
BOOL ValidateField(HWND, USHORT);
void InstallCallback(HWND, UINT, WNDPROC *, FARPROC);
extern LRESULT CALLBACK ValidateFieldInt(HWND, WORD, WPARAM, LPARAM);
extern LRESULT CALLBACK ValidateFieldAppc(HWND, WORD, WPARAM, LPARAM);
extern LRESULT CALLBACK InfiniteWndProc(HWND, WORD, WPARAM, LPARAM);
extern LRESULT CALLBACK FiniteWndProc(HWND, WORD, WPARAM, LPARAM);
extern LRESULT CALLBACK ConvSecWndProc(HWND, WORD, WPARAM, LPARAM);
extern LRESULT CALLBACK ServiceWndProc(HWND, WORD, WPARAM, LPARAM);
void ParseCreateError(HWND, UINT);
void DeleteListItem(INT);
INT ReadString(HWND, INT, char **, INT);
void DisplayError(HWND, UINT);
void DisplayInfo(HWND, UINT);