8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-23 19:23:03 +01:00
firebird-mirror/builds/install/arch-specific/win32/FirebirdInstallSupportFunctions.inc
2005-02-17 15:04:23 +00:00

248 lines
6.4 KiB
PHP

(* Initial Developer's Public License.
The contents of this file are subject to the Initial Developer's Public
License Version 1.0 (the "License"). You may not use this file except
in compliance with the License. You may obtain a copy of the License at
http://www.ibphoenix.com?a=ibphoenix&page=ibp_idpl
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is copyright 2001-2003 Paul Reeves for IBPhoenix.
The Initial Developer of the Original Code is Paul Reeves for IBPhoenix.
All Rights Reserved.
Helper functions for FB installer
These are / ought to be fairly generic
It makes more sense if they are independant functions - ie, they don't
call other functions in the script and they don't need to know about the
install script itself.
They can call functions in the pascal script library
Function Prototypes
function UsingWin2k: boolean;
function UsingWinXP: boolean;
function CheckWinsock2(): Boolean;
function GetAppPath: String;
function GetSysPath: String;
function ReplaceLine(Filename, StringToFind, NewLine,CommentType: string): boolean;
procedure DecodeVersion( VerStr: String; var VerInt: array of Integer );
function CompareVersion( ver1, ver2: String ) : Integer;
function GetInstalledVersion(BinaryFile: String): Array of Integer;
function ConvertIBVerStrToFbVerStr( VerStr: String) : String;
*)
(*
InnoSetup Help Extract on Windows version strings:
4.0.950 Windows 95
4.0.1111 Windows 95 OSR 2 & OSR 2.1
4.0.1212 Windows 95 OSR 2.5
4.1.1998 Windows 98
4.1.2222 Windows 98 Second Edition
4.9.3000 Windows Me
Windows NT versions:
4.0.1381 Windows NT 4.0
5.0.2195 Windows 2000
5.01.2600 Windows XP
5.2.3790 Windows 2003 Standard
*)
function UsingWin2k: boolean;
//return true if using Win2k OR later
begin
Result := (InstallOnThisVersion('0,5.0', '0,0') = irInstall);
end;
function UsingWinXP: boolean;
// return true if using WinXP OR later.
// Currently not used in this script.
begin
Result := (InstallOnThisVersion('0,5.01', '0,0') = irInstall);
end;
const
sWinSock2 = 'ws2_32.dll';
sNoWinsock2 = 'Please Install Winsock 2 Update before continuing';
sMSWinsock2Update = 'http://www.microsoft.com/windows95/downloads/contents/WUAdminTools/S_WUNetworkingTools/W95Sockets2/Default.asp';
sWinsock2Web = 'Winsock 2 is not installed.'#13#13'Would you like to Visit the Winsock 2 Update Home Page?';
var
Winsock2Failure: Boolean;
function CheckWinsock2(): Boolean;
begin
Result := True;
//Check if Winsock 2 is installed (win 95 only)
if (not UsingWinNt) and (not FileExists(AddBackslash(GetSystemDir) + sWinSock2)) then begin
Winsock2Failure := True;
Result := False;
end
else
Winsock2Failure := False;
end;
function GetAppPath: String;
begin
Result := ExpandConstant('{app}');
// Result := '"' + Result +'"';
end;
function GetSysPath: String;
begin
Result := ExpandConstant('{sys}');
// Result := '"' + Result +'"';
end;
(*Based on InnoSetup KB example at http://www13.brinkster.com/vincenzog/isxart.asp?idart=14)*)
function ReplaceLine(Filename, StringToFind, NewLine,CommentType: string): boolean;
var
i: Integer;
Lines: TArrayOfString;
CommentSize: Integer;
ArraySize: Integer;
FileChanged: Boolean;
TempStr: String;
begin
// Load textfile into string array
LoadStringsFromFile(Filename, Lines);
FileChanged := false;
CommentSize := Length(CommentType);
ArraySize := GetArrayLength(Lines)-1;
// Search through all textlines for given text
for i := 0 to ArraySize do begin
// Overwrite textline when text searched for is part of it
if Pos(StringToFind,Lines[i]) > 0 then begin
// does this line start with a comment ?
if CommentSize > 0 then begin
TempStr := TrimLeft(Lines[i]);
// only replace if line does not start with a comment
if CompareText(Copy(TempStr,1,CommentSize),CommentType) <> 0 then begin
Lines[i] := NewLine;
FileChanged := true
end
end
else begin
Lines[i] := NewLine;
FileChanged := true
end
end
end;
// Save string array to textfile (overwrite, no append!)
if FileChanged = true then
SaveStringsToFile(Filename, Lines, false);
Result := FileChanged;
end;
procedure DecodeVersion( VerStr: String; var VerInt: array of Integer );
var
i,p: Integer; s: string;
begin
VerInt := [0,0,0,0];
i := 0;
while ( (Length(VerStr) > 0) and (i < 4) ) do begin
p := pos('.', VerStr);
if p > 0 then begin
if p = 1 then s:= '0' else s:= Copy( VerStr, 1, p - 1 );
VerInt[i] := StrToInt(s);
i := i + 1;
VerStr := Copy( VerStr, p+1, Length(VerStr));
end
else begin
VerInt[i] := StrToInt( VerStr );
VerStr := '';
end;
end;
end;
function CompareVersion( ver1, ver2: String; places: Integer ) : Integer;
// This function compares version strings to number of places
// ie, if we are only interested in comparing major.minor versions
// then places = 2
// return -1 if ver1 < ver2
// return 0 if ver1 = ver2
// return 1 if ver1 > ver2
//
var
verint1, verint2: array of Integer;
i: integer;
begin
if places > 4 then
places :=4;
SetArrayLength( verint1, 4 );
DecodeVersion( ver1, verint1 );
SetArrayLength( verint2, 4 );
DecodeVersion( ver2, verint2 );
Result := 0; i := 0;
while ( (Result = 0) and ( i < places ) ) do begin
if verint1[i] > verint2[i] then
Result := 1
else
if verint1[i] < verint2[i] then
Result := -1
else
Result := 0;
i := i + 1;
end;
end;
function GetInstalledVersion(BinaryFile: String; var VerInt: Array of Integer): String;
var
AString: String;
begin
if (BinaryFile<>'') then begin
GetVersionNumbersString( BinaryFile, Astring );
DecodeVersion( AString, VerInt );
end;
result := AString;
end;
function ConvertIBVerStrToFbVerStr( VerStr: String) : String;
var
VerInt: array of Integer;
i: Integer;
begin
DecodeVersion(VerStr, VerInt);
VerInt[0]:=1;
if VerInt[1]=2 then
VerInt[1] := 0
else
if VerInt[1]=3 then
VerInt[1]:=5;
Result := '';
for i:=0 to 3 do begin
Result := Result+IntToStr(VerInt[i]);
if i<3 then
Result:=Result+'.'
end;
end;