diff --git a/packages/fcl-base/examples/intl/README.txt b/packages/fcl-base/examples/intl/README.txt index b3105fe5d6..07747556e6 100644 --- a/packages/fcl-base/examples/intl/README.txt +++ b/packages/fcl-base/examples/intl/README.txt @@ -39,7 +39,9 @@ command: msgfmt -o restest..mo restest..po +(msgfmt is part of the GNU gettext tools) + If you add a new language, please send the .po file to the Free Pascal developers. -Michael. +Michael. diff --git a/packages/fcl-base/src/gettext.pp b/packages/fcl-base/src/gettext.pp index afcf9b637a..3627420c19 100644 --- a/packages/fcl-base/src/gettext.pp +++ b/packages/fcl-base/src/gettext.pp @@ -23,7 +23,7 @@ interface uses SysUtils, Classes; const - MOFileHeaderMagic = $950412de; + MOFileHeaderMagic = $950412DE; type TMOFileHeader = packed record @@ -201,14 +201,14 @@ var begin for i := 0 to StringCount - 1 do begin - Dispose(OrigStrings^[i]); - Dispose(TranslStrings^[i]); + FreeMem(OrigStrings^[i]); + FreeMem(TranslStrings^[i]); end; - Dispose(OrigTable); - Dispose(TranslTable); - Dispose(OrigStrings); - Dispose(TranslStrings); - Dispose(HashTable); + FreeMem(OrigTable); + FreeMem(TranslTable); + FreeMem(OrigStrings); + FreeMem(TranslStrings); + FreeMem(HashTable); inherited Destroy; end; @@ -280,7 +280,7 @@ end; procedure TranslateUnitResourceStrings(const AUnitName:string; AFile: TMOFile); begin -// SetUnitResourceStrings(AUnitName,@Translate,AFile); + SetUnitResourceStrings(AUnitName,@Translate,AFile); end; @@ -312,6 +312,7 @@ end; procedure GetLanguageIDs(var Lang, FallbackLang: string); begin + FallbackLang:=''; lang := GetEnvironmentVariable('LC_ALL'); if Length(lang) = 0 then begin diff --git a/packages/fcl-process/src/process.pp b/packages/fcl-process/src/process.pp index 07d2a84999..24ceac2dd6 100644 --- a/packages/fcl-process/src/process.pp +++ b/packages/fcl-process/src/process.pp @@ -27,7 +27,7 @@ Type poNoConsole,poNewConsole, poDefaultErrorMode,poNewProcessGroup, poDebugProcess,poDebugOnlyThisProcess, - poPassInput); + poPassInput,poRunIdle); TShowWindowOptions = (swoNone,swoHIDE,swoMaximize,swoMinimize,swoRestore,swoShow, swoShowDefault,swoShowMaximized,swoShowMinimized, diff --git a/packages/fcl-process/src/processbody.inc b/packages/fcl-process/src/processbody.inc index a6fa78cc05..7dca7b7650 100644 --- a/packages/fcl-process/src/processbody.inc +++ b/packages/fcl-process/src/processbody.inc @@ -562,7 +562,7 @@ begin if assigned(stderr) then gotoutputstderr:=ReadInputStream(StdErr,StdErrBytesRead,StdErrLength,StdErrString,1); - if not gotoutput and not gotoutputstderr and Assigned(FOnRunCommandEvent) Then + if (porunidle in options) and not gotoutput and not gotoutputstderr and Assigned(FOnRunCommandEvent) Then FOnRunCommandEvent(self,Nil,RunCommandIdle,''); end; // Get left output after end of execution diff --git a/rtl/inc/getopts.pp b/rtl/inc/getopts.pp index 8157d73540..888029c710 100644 --- a/rtl/inc/getopts.pp +++ b/rtl/inc/getopts.pp @@ -14,9 +14,13 @@ **********************************************************************} unit getopts; -Interface + {$modeswitch advancedrecords} {$modeswitch defaultparameters} +{$h+} + +Interface + Const No_Argument = 0; Required_Argument = 1; @@ -51,11 +55,6 @@ Function GetLongOpts (ShortOpts : String;LongOpts : POption;var Longind : Longin Implementation -Procedure TOption.SetOption(const aName:String;AHas_Arg:integer=0;AFlag:PChar=nil;AValue:Char=#0); -begin - Name:=aName; Has_Arg:=AHas_Arg; Flag:=AFlag; Value:=Avalue; -end; - {$IFNDEF FPC} {*************************************************************************** @@ -147,6 +146,20 @@ end; {$ENDIF} +function strpas(p : pchar) : ansistring; + +begin + if p=nil then + strpas:='' + else + strpas:=p; +end; + +Procedure TOption.SetOption(const aName:String;AHas_Arg:integer=0;AFlag:PChar=nil;AValue:Char=#0); +begin + Name:=aName; Has_Arg:=AHas_Arg; Flag:=AFlag; Value:=Avalue; +end; + {*************************************************************************** Real Getopts ***************************************************************************} diff --git a/rtl/objpas/classes/classesh.inc b/rtl/objpas/classes/classesh.inc index c8f0beb4e3..310adaf765 100644 --- a/rtl/objpas/classes/classesh.inc +++ b/rtl/objpas/classes/classesh.inc @@ -693,6 +693,10 @@ type public constructor Create; destructor Destroy; override; + function ToObjectArray(aStart,aEnd : Integer) : TObjectDynArray; overload; + function ToObjectArray: TObjectDynArray; overload; + function ToStringArray(aStart,aEnd : Integer) : TStringDynArray; overload; + function ToStringArray: TStringDynArray; overload; function Add(const S: string): Integer; virtual; overload; function AddObject(const S: string; AObject: TObject): Integer; virtual; overload; function Add(const Fmt : string; const Args : Array of const): Integer; overload; @@ -703,6 +707,8 @@ type procedure AddStrings(TheStrings: TStrings; ClearFirst : Boolean); overload; procedure AddStrings(const TheStrings: array of string); overload; virtual; procedure AddStrings(const TheStrings: array of string; ClearFirst : Boolean); overload; + procedure SetStrings(TheStrings: TStrings); overload; virtual; + procedure SetStrings(TheStrings: array of string); overload; virtual; Procedure AddText(Const S : String); virtual; procedure AddCommaText(const S: String); procedure AddDelimitedText(const S: String; ADelimiter: char; AStrictDelimiter: Boolean); overload; diff --git a/rtl/objpas/classes/stringl.inc b/rtl/objpas/classes/stringl.inc index 85ba95281b..9c271f20ce 100644 --- a/rtl/objpas/classes/stringl.inc +++ b/rtl/objpas/classes/stringl.inc @@ -689,6 +689,7 @@ begin Exclude(FOptions,soUseLocale); end; + procedure TStrings.SetWriteBOM(AValue: Boolean); begin if AValue then @@ -1018,6 +1019,43 @@ begin inherited destroy; end; +function TStrings.ToObjectArray: TObjectDynArray; + +begin + Result:=ToObjectArray(0,Count-1); +end; + +function TStrings.ToObjectArray(aStart,aEnd : Integer): TObjectDynArray; +Var + I : Integer; + +begin + Result:=Nil; + if aStart>aEnd then exit; + SetLength(Result,aEnd-aStart+1); + For I:=aStart to aEnd do + Result[i-aStart]:=Objects[i]; +end; + +function TStrings.ToStringArray: TStringDynArray; + +begin + Result:=ToStringArray(0,Count-1); +end; + +function TStrings.ToStringArray(aStart,aEnd : Integer): TStringDynArray; + +Var + I : Integer; + +begin + Result:=Nil; + if aStart>aEnd then exit; + SetLength(Result,aEnd-aStart+1); + For I:=aStart to aEnd do + Result[i-aStart]:=Strings[i]; +end; + constructor TStrings.Create; begin @@ -1120,6 +1158,18 @@ begin end; end; +procedure TStrings.SetStrings(TheStrings: TStrings); + +begin + AddStrings(TheStrings,True); +end; + +procedure TStrings.SetStrings(TheStrings: array of string); + +begin + AddStrings(TheStrings,True); +end; + Procedure TStrings.Assign(Source: TPersistent); Var diff --git a/rtl/objpas/types.pp b/rtl/objpas/types.pp index 47fd273c30..7bfec96bbf 100644 --- a/rtl/objpas/types.pp +++ b/rtl/objpas/types.pp @@ -64,6 +64,7 @@ type TShortIntDynArray = array of ShortInt; TSmallIntDynArray = array of SmallInt; TStringDynArray = array of AnsiString; + TObjectDynArray = array of TObject; TWideStringDynArray = array of WideString; TWordDynArray = array of Word; TCurrencyArray = Array of currency;