Subversion Repositories factorylink.xychart

Rev

Blame | Last modification | View Log | Download

; -- xychart.iss --
; Copyright (C) 2003 RLD Automation
; FL7.0, Windows 2000

[Setup]
AdminPrivilegesRequired=no
RestartComputer=no
DisableStartupPrompt=yes
DisableProgramGroupPage=yes
DiskSpanning=0
AppName=FactoryLink XY-Chart Module
AppVerName=XY-Chart Module Version 6.0, for FL7.0 NT4 (with SP4 or higher) or Windows 2000
AppCopyright=Copyright © 2002 USDATA.
DefaultDirName={code:GetPrgDir|{pf}\xychart}
;DefaultGroupName=Wizard Information Systems
DirExistsWarning=no
MinVersion=4,4
OutputDir=..\..\Setup\Fl70
WizardImageFile=..\ModernImage.bmp
WizardSmallImageFile=..\SmallImage.bmp
UsePreviousAppDir=yes
Uninstallable=yes
UninstallDisplayIcon={app}\xychart.exe
UninstallDisplayName=USDATA FactoryLink XY-Chart Module
UninstallFilesDir={app}
AppPublisher=USDATA
AppVersion=6.1
AppPublisherURL=http://www.usdata.com
AppSupportURL=support@usdata.com
AppUpdatesURL=http://www.usdata.com
LicenseFile=..\license.txt
InfoBeforeFile=..\infobefore.txt
WizardStyle=modern
UninstallStyle=modern
WindowVisible=no
BackColor=clSilver
BackColor2=clBlack
BackColorDirection=toptobottom

[Files]
;FactoryLink files
Source: "..\..\Flink\Ac\xychart.ac"; DestDir: "{app}\ac"
Source: "..\..\Flink\Bin\Fl70\xychart.exe"; DestDir: "{app}\bin"; CopyMode: alwaysoverwrite
Source: "..\..\Flink\Bin\FlMsgRLD.dll"; DestDir: "{sys}"; CopyMode: alwaysoverwrite
Source: "..\..\Flink\Bin\RLDTitle.exe"; DestDir: "{app}\bin"; Flags: uninsneveruninstall
Source: "..\..\Flink\Ctgen\xychart.ctg"; DestDir: "{app}\ctgen"
Source: "..\..\Flink\Ctgen\xychart.rtm"; DestDir: "{app}\ctgen"
Source: "..\..\Flink\Help\en\xychart.hlp"; DestDir: "{app}\help\de"
Source: "..\..\Flink\Help\en\xychart.hlp"; DestDir: "{app}\help\en"
Source: "..\..\Flink\Help\en\xychart.hlp"; DestDir: "{app}\help\fr"
Source: "..\..\Flink\Key\De\typea.key";    DestDir: "{app}\key\de"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall
Source: "..\..\Flink\Key\De\typealf.key";  DestDir: "{app}\key\de"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall
Source: "..\..\Flink\Key\De\typed.key";    DestDir: "{app}\key\de"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall
Source: "..\..\Flink\Key\De\typedalf.key"; DestDir: "{app}\key\de"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall
Source: "..\..\Flink\Key\De\typembx.key";  DestDir: "{app}\key\de"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall
Source: "..\..\Flink\Key\En\typea.key";    DestDir: "{app}\key\en"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall
Source: "..\..\Flink\Key\En\typealf.key";  DestDir: "{app}\key\en"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall
Source: "..\..\Flink\Key\En\typed.key";    DestDir: "{app}\key\en"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall
Source: "..\..\Flink\Key\En\typedalf.key"; DestDir: "{app}\key\en"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall
Source: "..\..\Flink\Key\En\typembx.key";  DestDir: "{app}\key\en"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall
Source: "..\..\Flink\Key\Fr\typea.key";    DestDir: "{app}\key\fr"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall
Source: "..\..\Flink\Key\Fr\typealf.key";  DestDir: "{app}\key\fr"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall
Source: "..\..\Flink\Key\Fr\typed.key";    DestDir: "{app}\key\fr"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall
Source: "..\..\Flink\Key\Fr\typedalf.key"; DestDir: "{app}\key\fr"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall
Source: "..\..\Flink\Key\Fr\typembx.key";  DestDir: "{app}\key\fr"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall
Source: "..\..\Flink\Key\En\xycolor.key";  DestDir: "{app}\key\de"
Source: "..\..\Flink\Key\En\xyintp.key";   DestDir: "{app}\key\de"
Source: "..\..\Flink\Key\En\xymarker.key"; DestDir: "{app}\key\de"
Source: "..\..\Flink\Key\En\xymode.key";   DestDir: "{app}\key\de"
Source: "..\..\Flink\Key\En\xysave.key";   DestDir: "{app}\key\de"
Source: "..\..\Flink\Key\En\xystyle.key";  DestDir: "{app}\key\de"
Source: "..\..\Flink\Key\En\xyyesno.key";  DestDir: "{app}\key\de"
Source: "..\..\Flink\Key\En\xycolor.key";  DestDir: "{app}\key\en"
Source: "..\..\Flink\Key\En\xyintp.key";   DestDir: "{app}\key\en"
Source: "..\..\Flink\Key\En\xymarker.key"; DestDir: "{app}\key\en"
Source: "..\..\Flink\Key\En\xymode.key";   DestDir: "{app}\key\en"
Source: "..\..\Flink\Key\En\xysave.key";   DestDir: "{app}\key\en"
Source: "..\..\Flink\Key\En\xystyle.key";  DestDir: "{app}\key\en"
Source: "..\..\Flink\Key\En\xyyesno.key";  DestDir: "{app}\key\en"
Source: "..\..\Flink\Key\En\xycolor.key";  DestDir: "{app}\key\fr"
Source: "..\..\Flink\Key\En\xyintp.key";   DestDir: "{app}\key\fr"
Source: "..\..\Flink\Key\En\xymarker.key"; DestDir: "{app}\key\fr"
Source: "..\..\Flink\Key\En\xymode.key";   DestDir: "{app}\key\fr"
Source: "..\..\Flink\Key\En\xysave.key";   DestDir: "{app}\key\fr"
Source: "..\..\Flink\Key\En\xystyle.key";  DestDir: "{app}\key\fr"
Source: "..\..\Flink\Key\En\xyyesno.key";  DestDir: "{app}\key\fr"
Source: "..\..\Flink\Mps\70\xychart.mps"; DestDir: "{app}\mps\en"
;Source: "..\..\Flink\Mps\En\xychart.cba"; DestDir: "{app}\mps\en"
Source: "..\..\Flink\Msg\En\xychart.txt"; DestDir: "{app}\msg\de"
Source: "..\..\Flink\Msg\En\xychart.txt"; DestDir: "{app}\msg\en"
Source: "..\..\Flink\Msg\En\xychart.txt"; DestDir: "{app}\msg\fr"
Source: "..\..\Flink\Msg\En\xycht_ac.txt"; DestDir: "{app}\msg\de"
Source: "..\..\Flink\Msg\En\xycht_ac.txt"; DestDir: "{app}\msg\en"
Source: "..\..\Flink\Msg\En\xycht_ac.txt"; DestDir: "{app}\msg\fr"

;Protection
Source: "..\..\..\fl\700\flnti\bin\inst_seq.exe"; DestDir: "{app}"; Flags: deleteafterinstall
Source: "..\..\Flink\opt\delta.opt"; DestDir: "{app}\opt"; CopyMode: onlyifdoesntexist
Source: "{src}\delta.opt"; DestDir: "{app}"; Flags: deleteafterinstall external skipifsourcedoesntexist

;Documentation
Source: "{src}\xychart.pdf"; DestDir: "{app}\..\Documentation\en"; Flags: external skipifsourcedoesntexist
Source: "..\xychart.exe"; DestDir: "{app}\bin"; DestName: "ReadMeXyChart.exe"; Flags: isreadme

[Registry]
;Driver entry
Root: HKLM; Subkey: "SOFTWARE\USDATA\FactoryLink\Configuration Explorer\Menus\Node Classes\NC_TASKGROUP"; ValueType: String; ValueName: ""; ValueData: "NC_TASKGROUP"; Flags: noerror createvalueifdoesntexist
Root: HKLM; Subkey: "SOFTWARE\USDATA\FactoryLink\Configuration Explorer\Menus\Node Classes\NC_TASKGROUP"; ValueType: String; ValueName: "Opened Icon"; ValueData: "folderclosed"; Flags: createvalueifdoesntexist
Root: HKLM; Subkey: "SOFTWARE\USDATA\FactoryLink\Configuration Explorer\Menus\Node Classes\NC_TASKGROUP"; ValueType: String; ValueName: "Closed Icon"; ValueData: "folderopened"; Flags: createvalueifdoesntexist
Root: HKLM; Subkey: "SOFTWARE\USDATA\FactoryLink\Configuration Explorer\Menus\Node Classes\NC_TASKGROUP"; ValueType: String; ValueName: "Description"; ValueData: "Task Group"; Flags: createvalueifdoesntexist
Root: HKLM; Subkey: "SOFTWARE\USDATA\FactoryLink\Configuration Explorer\Menus\Node Classes\NC_TASKGROUP"; ValueType: String; ValueName: "TG_CAPTION Graphics"; ValueData: "Graphics"; Flags: createvalueifdoesntexist
Root: HKLM; Subkey: "SOFTWARE\USDATA\FactoryLink\Configuration Explorer\Menus\Node Classes\NC_TASKGROUP"; ValueType: String; ValueName: "Task Group Graphics"; ValueData: "{code:GetDriverString}"

;Update utility launcher and autostart service
Root: HKLM; Subkey: "Software\Classes\AppID\{{6BE98583-87A6-11D1-9B6C-0020AF1E9F09}"; ValueType: string; ValueName: "RunAs"; ValueData: "Interactive User"; Flags: createvalueifdoesntexist
Root: HKLM; Subkey: "System\CurrentControlSet\Services\FactoryLink Autostart Service"; ValueType: string; ValueName: "ObjectName"; ValueData: "LocalSystem";

[Run]
Filename: "{app}\bin\acctmgr.exe"; Parameters: "-c -d -v"; Check: AddTitle(xychart,xymbx nchart xydisp xydef xyclr); Flags: runminimized; StatusMsg: "Updating FactoryLink account manager index..."
Filename: "{app}\inst_seq.exe"; Parameters: "-MXYCHART -S{app}\delta.opt"; Flags: runminimized; StatusMsg: "Updating protection..."
Filename: "{app}\bin\mkhelp.exe"; Flags: runminimized; StatusMsg: "Updating FactoryLik help file index..."

[UninstallRun]
Filename: "{app}\bin\RLDTitle.exe"; Parameters: " /REMOVE=xychart"; Flags: runminimized; StatusMsg: "Updating FactoryLink account manager index..."
Filename: "{app}\bin\acctmgr.exe"; Parameters: "-c -d -v"; Check: RemoveTitle(xychart); Flags: runminimized; StatusMsg: "Updating FactoryLink account manager index..."

[InstallDelete]
;Type: files; Name: "{app}\FlInstall.exe"

[Messages]
RunEntryShellExec=Yes, I would like to view the README file

[Code]
var
  DriverList: String;
  TaskName: String;

function InitializeSetup(): Boolean;
{var
  MyText: String;}
begin

  {Task name specification, name is a constant of the code section}
  TaskName := 'xychart';

  RegQueryStringValue(HKLM, 'SOFTWARE\USDATA\FactoryLink\Configuration Explorer\Menus\Node Classes\NC_TASKGROUP', 'Task Group Graphics', DriverList);

  {create a driver list if there is none}
  if (DriverList = '') then begin

    DriverList := 'gedant,graph,web_clnt,windhdr';
  end;

  {add our task to the driver list}
  if (Pos(TaskName,  DriverList) = 0) then begin

    DriverList := DriverList + ',' + TaskName;
  end;

  Result := True;
end;

{Read the FactoryLink directory from the autostart service program location,
 using the environment variable FLINK will result in a directory with
 short names. By using the autostart server the long names are found, and
 the setup progam will use these names instead of the notation in short}
function GetPrgDir(S: String): String;
var
  MyDir: String;
begin

  {read the autostart service directory, filename and extension}
  RegQueryStringValue( HKEY_LOCAL_MACHINE, 'System\CurrentControlSet\Services\FactoryLink Autostart Service', 'ImagePath', MyDir);
  
  {remove the filename and last '\' character}
  MyDir := ExtractFileDir( MyDir);
  
  {now the bin subdir is removed.....}
  MyDir := ExtractFileDir( MyDir);

  {return default in case no directory is found}
  if (Length( MyDir) <= 0) then begin
    MyDir := S;
  end;
  
  {return the directory to install the program}
  Result := MyDir;
end;

{Get the driver string for modifying the tree view of the
 Configuration Explorer}
function GetDriverString(DefaultInput: String): String;
begin
  { Return the driver list }
  Result := DriverList;
end;

{Add a AC line for the current task to the titles file, add a line
 to the CTlist file. The taskname and ct-line are specified in the
 function-parameter: taskname,ct-line}
function AddTitle( MyEntry: String): Boolean;
var
  MyText: TArrayOfString;
  MyFile: String;
  MyAC: String;
  MyCT: String;
  k: Integer;
  found: Integer;
begin

  {first file to load is th etitles file in the AC directory}
  MyFile := GetPrgDir( '') + '\ac\titles';
  k := LoadStringsFromFile( MyFile, MyText);
  
  {AC entry looks like: taskname.ac}
  k := Pos( ',', MyEntry);
  if k = 0 then k := Pos( ':', MyEntry);
  MyAC := Copy( MyEntry, 0, k-1) + '.ac';
  MyCT := MyEntry;
  StrSet( ':', k, MyCt);
  
  {search for ac entry}
  found := 0;
  k := 0;
  while (k < GetArrayLength(MyText)) and (not found) do begin

    found := Pos( MyAC, MyText[ k]);
    k := k + 1;
  end;
  
  {if the entry is not found, add a line to the titles file}
  if (found = 0) then begin

    SetArrayLength(MyText, GetArrayLength(MyText)+1);
    MyText[ GetArrayLength(MyText)-1] := MyAC;
    SaveStringsToFile( MyFile, MyText, false);
  end;

  {add entry to ctlist file}
  MyFile := GetPrgDir( '') + '\ctgen\ctlist';
  k := LoadStringsFromFile( MyFile, MyText);

  {search for ctgen entry}
  found := 0;
  k := 0;
  while (k < GetArrayLength(MyText)) and (not found) do begin

    found := Pos( MyCT, MyText[ k]);
    k := k + 1;
  end;

  {if the entry is not found, add a line to the ctlist file}
  if (found = 0) then begin

    SetArrayLength(MyText, GetArrayLength(MyText)+1);
    MyText[ GetArrayLength(MyText)-1] := MyCT;
    SaveStringsToFile( MyFile, MyText, false);
  end;

  {return always true, ac file must be installed, this function
   only adds a line to the titles file}
  Result := True;
end;

{Remove a AC line for the current task in the titles file, and remove
 a line in the CTlist file the entry is specified with the task name
 in the function-parameter}
function RemoveTitle( MyEntry: String): Boolean;
var
  MyText: TArrayOfString;
  MyFile: String;
  MyAC: String;
  MyCT: String;
  Temp: String;
  k: Integer;
  found: Integer;
begin

  MyAC := MyEntry + '.ac';
  MyCT := MyEntry + ':';
  
  {search the task name in the ctlist file}
  MyFile := GetPrgDir( '') + '\ctgen\ctlist';
  SetArrayLength( MyText, 0);
  k := LoadStringsFromFile( MyFile, MyText);

  {search for the task name}
  for k:=0 to GetArrayLength(MyText)-1 do begin

    Temp := MyText[ k];
    if (found = 0) then
      found := Pos( MyCT, MyText[ k]);

    {if the entry is found, remove the line from the titles file}
    if (found) then begin

      if ((k+1) < GetArrayLength(MyText)) then begin

        MyText[ k] := MyText[ k+1];
      end else {begin;}
        MyText[ k] := '';
    end;
  end;

  if (found) then begin

    {shorten array with one}
    SetArrayLength( MyText, GetArrayLength( MyText) - 1);
    SaveStringsToFile( MyFile, MyText, false);
  end;
  
  {search the task name in the titles file}
  MyFile := GetPrgDir( '') + '\ac\titles';
  k := LoadStringsFromFile( MyFile, MyText);
  found := 0;

  {search for the task name}
  for k:=0 to GetArrayLength(MyText)-1 do begin

    Temp := MyText[ k];
    if (found = 0) then
      found := Pos( MyAC, MyText[ k]);

    {if the entry is found, remove the line from the titles file}
    if (found) then begin

      if ((k+1) < GetArrayLength(MyText)) then begin

        MyText[ k] := MyText[ k+1];
      end else {begin;}
        MyText[ k] := '';
    end;
  end;

  if (found) then begin

    {shorten array with one}
    SetArrayLength( MyText, GetArrayLength( MyText) - 1);
    SaveStringsToFile( MyFile, MyText, false);
  end;

  {return always true, ac file must be removed}
  Result := True;
end;