#include "miginf.h"

//
// utils.c -- reusable utilities (unrelated to screen saver code)
//

VOID
LogRegistryError (
    IN      HKEY Key,
    IN      LPCSTR ValueName
    );

HKEY
OpenRegKey (
    IN      HKEY RootKey,
    IN      LPCSTR Key
    );

HKEY
CreateRegKey (
    IN      HKEY RootKey,
    IN      LPCSTR Key
    );

VOID
CloseRegKey (
    IN      HKEY Key
    );

LPCSTR
GetRegValueString (
    IN      HKEY Key,
    IN      LPCSTR ValueName
    );

BOOL
SetRegValueString (
    HKEY Key,
    LPCSTR ValueName,
    LPCSTR ValueStr
    );

DWORD
CountStringBytes (
    IN      LPCSTR str
    );

DWORD
CountMultiStringBytes (
    IN      LPCSTR str
    );

LPSTR
CopyStringAtoB (
    OUT     LPSTR mbstrDest, 
    IN      LPCSTR mbstrStart, 
    IN      LPCSTR mbstrEnd     // ptr to the first char NOT to copy
    );

BOOL
OurGetLongPathName (
    LPCSTR ShortPath,
    LPSTR Buffer
    );

VOID
ConvertSystemToSystem32 (
    IN OUT  LPSTR Filename
    );

//
// utils.c -- helper functions specific to screen saver settings
//

VOID
GenerateFilePaths (
    VOID
    );

LPCSTR
GetScrnSaveExe (
    VOID
    );

BOOL
CreateScreenSaverParamKey (
    IN      LPCSTR ScreenSaverName,
    IN      LPCSTR Value,
    OUT     LPSTR Buffer
    );

BOOL
DecodeScreenSaverParamKey (
    IN      LPCSTR EncodedString,
    OUT     LPSTR ScreenSaverName,
    OUT     LPSTR ValueName
    );


//
// savecfg.c -- functions that save things to our working directory
//

BOOL
SaveDatFileKeyAndVal (
    IN      LPCSTR Key,
    IN      LPCSTR Val
    );

BOOL
CopyRegValueToDatFile (
    IN      HKEY RegKey,
    IN      LPCSTR ValueName
    );

BOOL
SaveControlIniSection (
    LPCSTR ControlIniSection,
    LPCSTR ScreenSaverName
    );


//
// dataconv.c -- functions that convert Win9x settings & save them on NT
//

BOOL
CopyValuesFromDatFileToRegistry (
    IN      HKEY RegKey,
    IN      LPCSTR RegKeyName,
    IN      LPCSTR ScreenSaverName,
    IN      LPCSTR ValueArray[]
    );

LPCSTR
GetSettingsFileVal (
    IN      LPCSTR Key
    );

BOOL
TranslateGeneralSetting (
    IN      HKEY RegKey,
    IN      LPCSTR Win9xSetting,
    IN      LPCSTR WinNTSetting
    );

BOOL
SaveScrName (
    IN      HKEY RegKey, 
    IN      LPCSTR KeyName
    );

BOOL
TranslateScreenSavers (
    IN      HKEY RegRoot
    );

BOOL
CopyUntranslatedSettings (
    IN      HKEY RegRoot
    );

PCSTR
ParseMessage (
    UINT MessageId,
    ...
    );

VOID
FreeMessage (
    PCSTR Message
    );


//
// DLL globals
//

extern LPCSTR g_User;
extern LPSTR g_SettingsFile;
extern LPSTR g_MigrateDotInf;
extern LPSTR g_WorkingDirectory;
extern LPSTR g_SourceDirectories;
extern HANDLE g_hHeap;
extern HINSTANCE g_hInst;

//
// Define strings
//

#define DEFINE_NONLOCALIZED_STRINGS                                         \
    DEFMAC (S_BOOT,             "boot")                                     \
    DEFMAC (S_SCRNSAVE_EXE,     "SCRNSAVE.EXE")                             \
    DEFMAC (S_SCRNSAVE_DOT,     "Screen Saver.")                            \
    DEFMAC (S_SCRNSAVE_MASK,    "Screen Saver.%s")                          \
    DEFMAC (S_EMPTY,            "")                                         \
    DEFMAC (S_DOUBLE_EMPTY,     "\0")                                       \
    DEFMAC (S_SETTINGS_MASK,    "%s\\settings.dat")                         \
    DEFMAC (S_MIGINF_MASK,      "%s\\migrate.inf")                          \
    DEFMAC (S_SYSTEM_INI,       "system.ini")                               \
    DEFMAC (S_CONTROL_INI,      "control.ini")                              \
    DEFMAC (S_BEZIER,           "Bezier")                                   \
    DEFMAC (S_MARQUEE,          "Marquee")                                  \
    DEFMAC (S_BEZIER_SETTINGS,  "Screen Saver.Bezier")                      \
    DEFMAC (S_MARQUEE_SETTINGS, "Screen Saver.Marquee")                     \
    DEFMAC (S_MIGRATION_PATHS,  "Migration Paths")                          \
    DEFMAC (S_CONTROL_PANEL_MASK, "Control Panel\\%s")                      \
    DEFMAC (S_LENGTH,           "Length")                                   \
    DEFMAC (S_WIDTH,            "Width")                                    \
    DEFMAC (S_LINESPEED,        "LineSpeed")                                \
    DEFMAC (S_BACKGROUND_COLOR, "BackgroundColor")                          \
    DEFMAC (S_CHARSET,          "CharSet")                                  \
    DEFMAC (S_FONT,             "Font")                                     \
    DEFMAC (S_MODE,             "Mode")                                     \
    DEFMAC (S_SIZE,             "Size")                                     \
    DEFMAC (S_SPEED,            "Speed")                                    \
    DEFMAC (S_TEXT,             "Text")                                     \
    DEFMAC (S_TEXTCOLOR,        "TextColor")                                \
    DEFMAC (S_ACTIVE1,          "Active1")                                  \
    DEFMAC (S_ACTIVE2,          "Active2")                                  \
    DEFMAC (S_CLEAN_SCREEN,     "Clean Screen")                             \
    DEFMAC (S_ENDCOLOR1,        "EndColor1")                                \
    DEFMAC (S_ENDCOLOR2,        "EndColor2")                                \
    DEFMAC (S_LINES1,           "Lines1")                                   \
    DEFMAC (S_LINES2,           "Lines2")                                   \
    DEFMAC (S_STARTCOLOR1,      "StartColor1")                              \
    DEFMAC (S_STARTCOLOR2,      "StartColor2")                              \
    DEFMAC (S_WALKRANDOM1,      "WalkRandom1")                              \
    DEFMAC (S_WALKRANDOM2,      "WalkRandom2")                              \
    DEFMAC (S_DENSITY,          "Denisty")                                  \
    DEFMAC (S_WARPSPEED,        "WarpSpeed")                                \
    DEFMAC (S_HKR,              "HKR")                                      \
    DEFMAC (S_DEFAULT_KEYSTR,   "(unknown regkey)")                         \
    DEFMAC (S_SYSTEM_DIR,       "\\system\\")                               \
    DEFMAC (S_SYSTEM32_DIR,     "\\system32\\")                             \

#define DEFINE_STRINGS DEFINE_NONLOCALIZED_STRINGS

//
// Declare externs for all string variables
//

#define DEFMAC(var,str) extern CHAR var[];
DEFINE_STRINGS
#undef DEFMAC