I am string to convert a string to a constant as the StringChangeEx function takes the second argument as a const but i have it as a string and am unsure how to get this function working as i am new to pascal.

The problem is in the BackupFile function when calling the StringChangeEx function.

#define Name "Misery Mod"
#define Description "Misery Mod Installer"
#define Version "2.0"
#define Author "Misery Mod Development Team"
#define Website "http://miserymod.com"
#define Support "support@miserymod.com"
#define Copyright "Copyright [c] 2013 Misery Mod. All Rights Reserved."
#define Executable "Stalker-COP.exe"

[Setup]
AppId={{6423E48F-04F4-4E99-9420-FDD9165A6A90}
AppName={#Name}
AppVersion={#Version}
AppVerName={#Name} {#Version}
AppPublisher={#Author}
AppPublisherURL={#Website}
AppSupportURL={#Website}
AppUpdatesURL={#Website}
AppContact={#Support}
AppComments={#Description}
AppCopyright={#Copyright}

DefaultDirName={code:DetectIP}
DirExistsWarning=no
OutputDir=debug
OutputBaseFilename=mm2-installer

Compression=lzma2/ultra64
SolidCompression=yes
InternalCompressLevel=ultra
CompressionThreads=2

VersionInfoVersion={#Version}
VersionInfoCompany={#Author}
VersionInfoDescription={#Description}
VersionInfoTextVersion={#Name} {#Version}
VersionInfoCopyright={#Copyright}
VersionInfoProductName={#Name}
VersionInfoProductVersion={#Version}
VersionInfoProductTextVersion={#Name} {#Version}

DiskSpanning=True
DiskSliceSize=1566000000
SlicesPerDisk=1

MinVersion=0,5.01
SetupIconFile=C:\Users\Nathaniel\Desktop\MM2\mm2.ico
UninstallDisplayIcon={uninstallexe}
ShowTasksTreeLines=True
AlwaysShowGroupOnReadyPage=True
AlwaysShowDirOnReadyPage=True
LicenseFile=C:\Users\Nathaniel\Desktop\MM2\agreement.rtf
WizardImageFile=C:\Users\Nathaniel\Desktop\MM2\mm2-sidebar.bmp
WizardSmallImageFile=C:\Users\Nathaniel\Desktop\MM2\mm2-header.bmp
AllowCancelDuringInstall=False
DisableProgramGroupPage=yes
UninstallDisplayName={#Name}

[Run]
Filename: {app}\{#Executable}; Description: {cm:LaunchProgram, {#Name}}; Flags: nowait postinstall skipifsilent unchecked
Filename: {#Website}; Description: {cm:VisitWebsite, {#Name}}; Flags: nowait shellexec postinstall skipifsilent unchecked

[CustomMessages]
LaunchProgram=Enter the Wasteland.
VisitWebsite=Visit {#Website}.

[Languages]
Name: "English"; MessagesFile: "compiler:Default.isl"
Name: "Ukrainian"; MessagesFile: "compiler:Languages\Ukrainian.isl"

[Dirs]
Name: "{app}\_mm2"

[Files]
Source: "C:\Users\Nathaniel\Misery Mod v2.0\gamedata\anims\*"; DestDir: {app}; Flags: ignoreversion createallsubdirs recursesubdirs; BeforeInstall: BackupFile

[Code]
var Base:String;
var Backup:String;

function DetectIP(Path:String): string;

var Steam:String;
var Retail:String;

Begin

    Base:=ExpandConstant('{pf}')+'\';
    Steam:=ExpandConstant('{pf}')+'\Steam\SteamApps\common\Stalker Call of Pripyat';
    Retail:=ExpandConstant('{pf}')+'\Steam\SteamApps\common\Stalker Call of Pripyat';

    Begin
        if DirExists(Steam) then
            Base:=Steam;
    End;

    Begin
        if DirExists(Retail) then
            Base:=Retail;
    End;

    Result:=Base;

End;

procedure BackupFile();

var Folder:String;
var File:String;

Begin

    Folder:=ExpandConstant(ExtractFilePath(CurrentFileName));
    File:=ExpandConstant(CurrentFileName);

    Backup:=StringChangeEx(Folder, Base, Base+'_mm2\', False);

    MsgBox(Folder, mbInformation, MB_OK);

    Begin
        if not DirExists(Backup) then
            CreateDir(Backup);
    End;

End;

Any help would be great as i am trying to build a better installer for everyone's favorite S.T.A.L.K.E.R mod.

Edited 3 Years Ago by nblackburn

What line in the above code are you talking about? 116?

What is the function parameter definition for StringChangeEx?

As far as i am aware the error is caused by the second argument not being a const but i am not sure how to cast it as one or update my code to change Base and Backup to const without breaking it.

Edited 3 Years Ago by nblackburn

Compiler Error!
Line 116: Column 62: Type mismatch.

Which looks as though i was right with my assumtions. Could you show me an example on how to change my code so that it uses consts instead of strings?.

Edited 3 Years Ago by nblackburn

A const is just defined like this:

const 
  Base = 'my string constant';

But I'm not sure that this works:

const
  Base = ExpandConstant('{pf}') + '\';
Compiler Error!
Line 89: Column 5: Identifier expected.

Thanks, your right about that not working, thats what i get now...

Edited 3 Years Ago by nblackburn

Posted but it doesn't seem too active so i might not get a reply.

Edited 3 Years Ago by nblackburn

This article has been dead for over six months. Start a new discussion instead.