/*++

Copyright (c) 1996  Microsoft Corporation

Module Name:

    groups.c

Abstract:

    This file implements the file copy code.

Environment:

    WIN32 User Mode

Author:

    Wesley Witt (wesw) 17-Feb-1996

--*/

#include "wizard.h"
#pragma hdrstop


GROUP_ITEMS RemoteAdminGroupItems[] =
{
    { TEXT("Fax"),
      TEXT("Remote Administration"),
      TEXT("%systemroot%\\system32\\faxcfg.exe"),
      TEXT("%systemroot%\\system32\\faxcfg.exe"),
      TEXT("%systemroot%\\system32"),
      USE_COMMON_GROUP,
      0,
      SW_NORMAL,
      0
    }
};

#define MAX_REMOTE_ADMIN_GROUP_ITEMS  (sizeof(RemoteAdminGroupItems)/sizeof(RemoteAdminGroupItems[0]))


GROUP_ITEMS GroupItems[] =
{
    { TEXT("Fax"),
      TEXT("Fax Queue Management"),
      TEXT("%systemroot%\\system32\\faxqueue.exe"),
      TEXT("%systemroot%\\system32\\faxqueue.exe"),
      TEXT("%systemroot%\\system32"),
      USE_COMMON_GROUP | USE_SERVER_NAME,
      0,
      SW_NORMAL,
      0
    },

    { TEXT("Fax"),
      TEXT("Cover Page Editor"),
      TEXT("%systemroot%\\system32\\faxcover.exe"),
      TEXT("%systemroot%\\system32\\faxcover.exe"),
      TEXT("%systemroot%\\system32"),
      USE_COMMON_GROUP,
      0,
      SW_NORMAL,
      0
    },

    { TEXT("Fax"),
      TEXT("Fax Send Utility"),
      TEXT("%systemroot%\\system32\\faxsend.exe"),
      TEXT("%systemroot%\\system32\\faxsend.exe"),
      TEXT("%systemroot%\\system32"),
      USE_COMMON_GROUP,
      0,
      SW_NORMAL,
      0
    },

    { TEXT("Fax"),
      TEXT("Fax Configuration"),
      TEXT("%systemroot%\\system32\\faxcfgst.exe"),
      TEXT("%systemroot%\\system32\\faxcfgst.exe"),
      TEXT("%systemroot%\\system32"),
      USE_COMMON_GROUP,
      0,
      SW_NORMAL,
      0
    },

    { TEXT("Fax"),
      TEXT("Fax Document Viewer"),
      TEXT("kodakimg.exe"),
      NULL,
      NULL,
      USE_COMMON_GROUP | USE_APP_PATH,
      0,
      SW_NORMAL,
      0
    },

    { TEXT("Fax"),
      TEXT("Help"),
      TEXT("%systemroot%\\system32\\winhlp32.exe %systemroot%\\help\\fax.hlp"),
      TEXT("%systemroot%\\system32\\winhlp32.exe"),
      TEXT("%systemroot%\\system32"),
      USE_COMMON_GROUP,
      0,
      SW_NORMAL,
      0
    }
};

#define MAX_GROUP_ITEMS  (sizeof(GroupItems)/sizeof(GroupItems[0]))

GROUP_ITEMS UserGroupItems[] =
{

    { TEXT("Startup"),
      TEXT("Fax Monitor"),
      TEXT("%systemroot%\\system32\\faxstat.exe"),
      TEXT("%systemroot%\\system32\\faxstat.exe"),
      TEXT("%systemroot%\\system32"),
      USE_USER_GROUP,
      0,
      SW_MINIMIZE,
      0
    }
};

#define MAX_USER_GROUP_ITEMS  (sizeof(UserGroupItems)/sizeof(UserGroupItems[0]))



VOID
CreateGroupItems(
    BOOL RemoteAdmin,
    LPTSTR ServerName
    )
{
    DWORD i;
    TCHAR Buffer[MAX_PATH*2];
    TCHAR CommandLine[MAX_PATH*2];
    TCHAR IconPath[MAX_PATH*2];
    TCHAR WorkingDirectory[MAX_PATH*2];
    PGROUP_ITEMS Groups;
    DWORD GroupCount;
    HKEY hKey;
    LPTSTR p;
    DWORD Size;



    if (InstallMode & INSTALL_UPGRADE) {
        DeleteGroupItems();
    }

    hKey = OpenRegistryKey( HKEY_LOCAL_MACHINE, REGKEY_WINDOWS_CURRVER, FALSE, KEY_READ );
    if (hKey) {
        LPTSTR ProgFilesDir = GetRegistryString( hKey, REGVAL_PROGRAM_FILES_DIR, EMPTY_STRING );
        if (ProgFilesDir) {
            SetEnvironmentVariable( TEXT("%programfilesdir%"), ProgFilesDir );
            MemFree( ProgFilesDir );
        }
        RegCloseKey( hKey );
    }

    if (RemoteAdmin) {
        Groups = RemoteAdminGroupItems;
        GroupCount = MAX_REMOTE_ADMIN_GROUP_ITEMS;
    } else {
        Groups = GroupItems;
        GroupCount = MAX_GROUP_ITEMS;
    }

    for (i=0; i<GroupCount; i++) {

        CreateGroup( Groups[i].GroupName, Groups[i].Flags & USE_COMMON_GROUP );

        if (Groups[i].Flags & USE_APP_PATH) {
            hKey = OpenRegistryKey( HKEY_LOCAL_MACHINE, REGKEY_APP_PATHS, FALSE, KEY_READ );
            if (hKey) {
                Size = sizeof(Buffer) - sizeof(TCHAR);
                Buffer[0] = TEXT('\"');
                Size = RegQueryValue( hKey, Groups[i].CommandLine, &Buffer[1], &Size );
                if (Size == ERROR_SUCCESS || Size == ERROR_INVALID_DATA) {
                    _tcscat( Buffer, TEXT("\"") );
                    ExpandEnvironmentStrings( Buffer, CommandLine, sizeof(CommandLine)/sizeof(TCHAR) );
                    ExpandEnvironmentStrings( &Buffer[1], IconPath, sizeof(IconPath)/sizeof(TCHAR) );
                    IconPath[wcslen(IconPath)-1] = 0;
                    ExpandEnvironmentStrings( &Buffer[1], WorkingDirectory, sizeof(WorkingDirectory)/sizeof(TCHAR) );
                    p = _tcsrchr( WorkingDirectory, TEXT('\\') );
                    if (p) {
                        *p = 0;
                    } else {
                        continue;
                    }
                }
                RegCloseKey( hKey );
            } else {
                continue;
            }
        } else {
            ExpandEnvironmentStrings( Groups[i].CommandLine, CommandLine, sizeof(CommandLine)/sizeof(TCHAR) );
            ExpandEnvironmentStrings( Groups[i].IconPath, IconPath, sizeof(IconPath)/sizeof(TCHAR) );
            ExpandEnvironmentStrings( Groups[i].WorkingDirectory, WorkingDirectory, sizeof(WorkingDirectory)/sizeof(TCHAR) );
        }

        if ((Groups[i].Flags & USE_SERVER_NAME) && ServerName) {
            _tcscat( CommandLine, TEXT(" ") );
            _tcscat( CommandLine, ServerName );
        }

        AddItem(
            Groups[i].GroupName,
            Groups[i].Flags & USE_COMMON_GROUP,
            Groups[i].Description,
            CommandLine,
            IconPath,
            Groups[i].IconIndex,
            WorkingDirectory,
            Groups[i].HotKey,
            Groups[i].ShowCmd
            );

    }

    if (RequestedSetupType & FAX_INSTALL_WORKSTATION) {
        Groups = UserGroupItems;
        GroupCount = MAX_USER_GROUP_ITEMS;

        for (i=0; i<GroupCount; i++) {

            ExpandEnvironmentStrings( Groups[i].CommandLine, CommandLine, sizeof(CommandLine) );
            ExpandEnvironmentStrings( Groups[i].IconPath, IconPath, sizeof(IconPath) );
            ExpandEnvironmentStrings( Groups[i].WorkingDirectory, WorkingDirectory, sizeof(WorkingDirectory) );

            AddItem(
                Groups[i].GroupName,
                Groups[i].Flags & USE_COMMON_GROUP,
                Groups[i].Description,
                CommandLine,
                IconPath,
                Groups[i].IconIndex,
                WorkingDirectory,
                Groups[i].HotKey,
                Groups[i].ShowCmd
                );

        }

    }
}


VOID
DeleteGroupItems(
    VOID
    )
{
    DWORD i;

    for (i=0; i<MAX_GROUP_ITEMS; i++) {

        DeleteItem(
            GroupItems[i].GroupName,
            GroupItems[i].Flags & USE_COMMON_GROUP,
            GroupItems[i].Description,
            FALSE
            );

    }

    for (i=0; i<MAX_REMOTE_ADMIN_GROUP_ITEMS; i++) {

        DeleteItem(
            RemoteAdminGroupItems[i].GroupName,
            RemoteAdminGroupItems[i].Flags & USE_COMMON_GROUP,
            RemoteAdminGroupItems[i].Description,
            FALSE
            );

    }

    for (i=0; i<MAX_USER_GROUP_ITEMS; i++) {

        DeleteItem(
            UserGroupItems[i].GroupName,
            UserGroupItems[i].Flags & USE_COMMON_GROUP,
            UserGroupItems[i].Description,
            FALSE
            );

    }

    DeleteGroup( GroupItems[0].GroupName, GroupItems[0].Flags & USE_COMMON_GROUP );
}