{******************************************************************************} {* *} {* PasDesigner 0.1 - Utils *} {* *} {* (C) 2003-2004 Andreas Hausladen *} {* *} {******************************************************************************} unit PDHelpers; {$I jedi.inc} interface uses {$IFDEF MSWINDOWS} Windows, {$ENDIF} {$IFDEF LINUX} Libc, {$ENDIF} SysUtils; type ICriticalSectionBlock = interface ['{7AE55097-5987-4AE6-A186-48500252F093}'] end; function CSBlock(CS: TRTLCriticalSection): ICriticalSectionBlock; // enters CS and leaves it in the destructor that is called by compiler magic function UpName(const Name: string): string; // returns Name with the first char in uppercase and the rest in lower case implementation type TCriticalSectionBlock = class(TInterfacedObject, ICriticalSectionBlock) public FCS: TRTLCriticalSection; constructor Create(ACS: TRTLCriticalSection); destructor Destroy; override; end; { TCriticalSectionBlock } constructor TCriticalSectionBlock.Create(ACS: TRTLCriticalSection); begin inherited Create; FCS := ACS; EnterCriticalSection(FCS); end; destructor TCriticalSectionBlock.Destroy; begin LeaveCriticalSection(FCS); inherited Destroy; end; function CSBlock(CS: TRTLCriticalSection): ICriticalSectionBlock; begin Result := TCriticalSectionBlock.Create(CS); end; function UpName(const Name: string): string; begin if Name <> '' then Result := Name[1] + AnsiLowerCase(Copy(Name, 2, MaxInt)) else Result := ''; end; end.