| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- { $HDR$}
- {**********************************************************************}
- { Unit archived using Team Coherence }
- { Team Coherence is Copyright 2002 by Quality Software Components }
- { }
- { For further information / comments, visit our WEB site at }
- { http://www.TeamCoherence.com }
- {**********************************************************************}
- {}
- { $Log: 10019: Computil.dpr
- {
- { Rev 1.4 24/08/2004 12:41:44 ANeillans
- { Modified to ensure the registry object is opened in Read Only mode.
- }
- {
- { Rev 1.3 7/14/04 1:40:26 PM RLebeau
- { removed some repeating code
- }
- {
- { Rev 1.2 14/07/2004 21:15:38 ANeillans
- { Modification to allow both HKLM and HKCU to be used for fetching binary path.
- }
- {
- { Rev 1.1 03/05/2004 15:36:22 ANeillans
- { Bug fix: Rootdir blank causes AV. Changes HKEY_LOCAL_MACHINE to
- { HKEY_CURRENT_USER.
- }
- {
- { Rev 1.0 2002.11.12 10:25:38 PM czhower
- }
- program CompUtil;
- {$APPTYPE CONSOLE}
- uses
- Windows, SysUtils, Registry, Classes;
- type
- TWhichOption = (
- woHppModify,
- woSetupD2,woSetupD3,woSetupD4,woSetupD5,woSetupD6,woSetupD7,woSetupD8,
- woSetupD9,woSetupD10,woSetupD11,woSetupD12,woSetupD14,woSetupD15,woSetupD16,
- woSetupD17,woSetupD18,woSetupD19,woSetupD20,woSetupD21,woSetupD22,woSetupD23,
- woSetupD24,woSetupD25,woSetupD26,woSetupD27,woSetupD28,
- woSetupC1,woSetupC3,woSetupC4,woSetupC5,woSetupC6,woSetupC7,woSetupC8,
- woSetupC9,woSetupC10,woSetupC11,woSetupC12,woSetupC14,woSetupC15,woSetupC16,
- woSetupC17,woSetupC18,woSetupC19,woSetupC20,woSetupC21,woSetupC22,woSetupC23,
- woSetupC24,woSetupC25,woSetupC26,woSetupC27,woSetupC28,
- woInvalid);
- var
- Options: array[TWhichOption] of String = (
- 'HppModify',
- 'SetupD2','SetupD3','SetupD4','SetupD5','SetupD6','SetupD7','SetupD8',
- 'SetupD9','SetupD10','SetupD11','SetupD12','SetupD14','SetupD15','SetupD16',
- 'SetupD17','SetupD18','SetupD19','SetupD20','SetupD21','SetupD22','SetupD23',
- 'SetupD24','SetupD25','SetupD26','SetupD27','SetupD28',
- 'SetupC1','SetupC3','SetupC4','SetupC5','SetupC6','SetupC7','SetupC8',
- 'SetupC9','SetupC10','SetupC11','SetupC12','SetupC14','SetupC15','SetupC16',
- 'SetupC17','SetupC18','SetupC19','SetupC20','SetupC21','SetupC22','SetupC23',
- 'SetupC24','SetupC25','SetupC26','SetupC27','SetupC28',
- 'Invalid'
- );
- WhichOption: TWhichOption;
- CmdParam: string;
- procedure HPPModify;
- var
- InFile: file;
- OutFile: text;
- Line: AnsiString;
- Buffer: pointer;
- BufPtr: PAnsiChar;
- BufSize: longint;
- EOL: boolean;
- begin
- // Fix C++Builder HPP conversion bug:
- // - Input line in RVDefine.pas is
- // TRaveUnits = {$IFDEF WIN32}type{$ENDIF} TRaveFloat;
- //
- // - Invalid output line in RVDefine.hpp is
- // typedef TRaveUnits TRaveUnits;
- //
- // - Valid output line in RVDefine.hpp should be
- // typedef double TRaveUnits;
- { Read in RVDefine.hpp as binary }
- AssignFile(InFile,ParamStr(2) + 'RVDefine.hpp');
- Reset(InFile,1);
- BufSize := FileSize(InFile);
- GetMem(Buffer,BufSize);
- BlockRead(InFile,Buffer^,BufSize);
- CloseFile(InFile);
- BufPtr := Buffer;
- { Write out modified RVDefine.hpp as text }
- AssignFile(OutFile,ParamStr(2) + 'RVDefine.hpp');
- Rewrite(OutFile);
- While BufSize > 0 do begin
- Line := '';
- EOL := false;
- Repeat { Get a line of text }
- If BufPtr^ = #13 then begin
- Inc(BufPtr);
- Dec(BufSize);
- Inc(BufPtr);
- Dec(BufSize);
- EOL := true;
- end else begin
- Line := Line + BufPtr^;
- Inc(BufPtr);
- Dec(BufSize);
- end; { else }
- until EOL or (BufSize = 0);
- If Line = 'typedef TRaveUnits TRaveUnits;' then begin
- Line := 'typedef double TRaveUnits;';
- end; { if }
- Writeln(OutFile,Line);
- end; { while }
- CloseFile(OutFile);
- end; { HPPModify }
- procedure SetPath(EnvName: string; RegRoot: string);
- var
- CompilerFound: boolean;
- SysDirFound: boolean;
- KeyOpened: boolean;
- EnvUpdated: boolean;
- EnvList: TStringList;
- SysDir: string;
- ShortPath: string;
- LongPath: string;
- begin
- CompilerFound := GetEnvironmentVariable(PChar(EnvName), nil, 0) <> 0;
- SysDirFound := GetEnvironmentVariable('NDWINSYS', nil, 0) <> 0;
- If (not CompilerFound) or (not SysDirFound) then begin
- EnvUpdated := False;
- EnvList := TStringList.Create;
- try
- If FileExists('SetEnv.bat') then begin { Read in existing file }
- EnvList.LoadFromFile('SetEnv.bat');
- end; { if }
- If not CompilerFound then begin { Get compiler path and add to string list }
- With TRegistry.Create do try
- RootKey := HKEY_LOCAL_MACHINE;
- KeyOpened := OpenKeyReadOnly(RegRoot);
- if not KeyOpened then begin
- Writeln('Resetting registry rootkey to HKCU, and retrying');
- RootKey := HKEY_CURRENT_USER;
- KeyOpened := OpenKeyReadOnly(RegRoot);
- End;
- if KeyOpened and ValueExists('RootDir') then begin
- LongPath := ReadString('RootDir');
- SetLength(ShortPath, MAX_PATH); // when casting to a PChar, be sure the string is not empty
- SetLength(ShortPath, GetShortPathName(PChar(LongPath), PChar(ShortPath), MAX_PATH) );
- If (ShortPath[1] = #0) or (Length(ShortPath) = Length(LongPath)) then begin
- ShortPath := LongPath;
- end;
- EnvList.Add('SET ' + EnvName + '=' + ShortPath);
- EnvUpdated := True;
- end else begin
- Writeln('Compiler not installed!');
- Halt(1);
- End; { else }
- finally
- Free;
- end; { with }
- end; { if }
- If not SysDirFound then begin { Get System Directory and add to string list }
- SetLength(SysDir, MAX_PATH);
- SetLength(SysDir, GetSystemDirectory(PChar(SysDir), MAX_PATH));
- EnvList.Add('SET NDWINSYS=' + SysDir);
- EnvUpdated := True;
- end; { if }
- If EnvUpdated then begin
- EnvList.SaveToFile('SetEnv.bat');
- End; { if }
- finally
- EnvList.Free;
- end; { tryf }
- end; { if }
- end; { SetPath }
- begin
- { Figure out which feature to run }
- CmdParam := ParamStr(1);
- WhichOption := Low(WhichOption);
- While WhichOption < High(WhichOption) do begin
- If UpperCase(CmdParam) = UpperCase(Options[WhichOption]) then begin
- Break;
- end; { if }
- Inc(WhichOption);
- end; { while }
- Case WhichOption of
- woHppModify: HPPModify;
- woSetupD2: SetPath('NDD2','Software\Borland\Delphi\2.0');
- woSetupD3: SetPath('NDD3','Software\Borland\Delphi\3.0');
- woSetupD4: SetPath('NDD4','Software\Borland\Delphi\4.0');
- woSetupD5: SetPath('NDD5','Software\Borland\Delphi\5.0');
- woSetupD6: SetPath('NDD6','Software\Borland\Delphi\6.0');
- woSetupD7: SetPath('NDD7','Software\Borland\Delphi\7.0');
- woSetupD8: SetPath('NDD8','Software\Borland\Delphi\8.0');
- woSetupD9: SetPath('NDD9','Software\Borland\BDS\3.0');
- woSetupD10: SetPath('NDD10','Software\Borland\BDS\4.0');
- woSetupD11: SetPath('NDD11','Software\Borland\BDS\5.0');
- woSetupD12: SetPath('NDD12','Software\CodeGear\BDS\6.0');
- woSetupD14: SetPath('NDD14','Software\CodeGear\BDS\7.0');
- woSetupD15: SetPath('NDD15','Software\Embarcadero\BDS\8.0');
- woSetupD16: SetPath('NDD16','Software\Embarcadero\BDS\9.0');
- woSetupD17: SetPath('NDD17','Software\Embarcadero\BDS\10.0');
- woSetupD18: SetPath('NDD18','Software\Embarcadero\BDS\11.0');
- woSetupD19: SetPath('NDD19','Software\Embarcadero\BDS\12.0');
- woSetupD20: SetPath('NDD20','Software\Embarcadero\BDS\14.0');
- woSetupD21: SetPath('NDD21','Software\Embarcadero\BDS\15.0');
- woSetupD22: SetPath('NDD22','Software\Embarcadero\BDS\16.0');
- woSetupD23: SetPath('NDD23','Software\Embarcadero\BDS\17.0');
- woSetupD24: SetPath('NDD24','Software\Embarcadero\BDS\18.0');
- woSetupD25: SetPath('NDD25','Software\Embarcadero\BDS\19.0');
- woSetupD26: SetPath('NDD26','Software\Embarcadero\BDS\20.0');
- woSetupD27: SetPath('NDD27','Software\Embarcadero\BDS\21.0');
- woSetupD28: SetPath('NDD28','Software\Embarcadero\BDS\22.0');
- woSetupC1: SetPath('NDC1','Software\Borland\C++Builder\1.0');
- woSetupC3: SetPath('NDC3','Software\Borland\C++Builder\3.0');
- woSetupC4: SetPath('NDC4','Software\Borland\C++Builder\4.0');
- woSetupC5: SetPath('NDC5','Software\Borland\C++Builder\5.0');
- woSetupC6: SetPath('NDC6','Software\Borland\C++Builder\6.0');
- woSetupC10: SetPath('NDC10','Software\Borland\BDS\4.0');
- woSetupC11: SetPath('NDC11','Software\Borland\BDS\5.0');
- woSetupC12: SetPath('NDC12','Software\CodeGear\BDS\6.0');
- woSetupC14: SetPath('NDC14','Software\CodeGear\BDS\7.0');
- woSetupC15: SetPath('NDC15','Software\Embarcadero\BDS\8.0');
- woSetupC16: SetPath('NDC16','Software\Embarcadero\BDS\9.0');
- woSetupC17: SetPath('NDC17','Software\Embarcadero\BDS\10.0');
- woSetupC18: SetPath('NDC18','Software\Embarcadero\BDS\11.0');
- woSetupC19: SetPath('NDC19','Software\Embarcadero\BDS\12.0');
- woSetupC20: SetPath('NDC20','Software\Embarcadero\BDS\14.0');
- woSetupC21: SetPath('NDC21','Software\Embarcadero\BDS\15.0');
- woSetupC22: SetPath('NDC22','Software\Embarcadero\BDS\16.0');
- woSetupC23: SetPath('NDC23','Software\Embarcadero\BDS\17.0');
- woSetupC24: SetPath('NDC24','Software\Embarcadero\BDS\18.0');
- woSetupC25: SetPath('NDC25','Software\Embarcadero\BDS\19.0');
- woSetupC26: SetPath('NDC26','Software\Embarcadero\BDS\20.0');
- woSetupC27: SetPath('NDC27','Software\Embarcadero\BDS\21.0');
- woSetupC28: SetPath('NDC28','Software\Embarcadero\BDS\22.0');
- woInvalid: Writeln('Invalid Parameter');
- end; { case }
- end.
|