TSergey
|
Posted: Sat Feb 05, 2005 19:01 Post subject: |
|
|
Может сюда же выложить функции для плагинов?
Сам сразу и начну:
Code: | function GetFtpIniFileName: string;
var
s, s1, s2 :string;
a: array [0..MAX_PATH] of char;
i, j: integer;
EscEn, QuoteStr, UseProgDir: boolean;
c: char;
reg: TRegistry;
begin
// Разбор командной строки
s := StrPas(GetCommandLine);
i := pos('f=', s);
if i = 0 then i := pos('F=', s);
s1 := '';
if i > 0
then begin
i := i + 2;
EscEn := false;
QuoteStr := false;
j := length(s);
// Разворачиваем параметр с поддержкой кавычек
while (i <= j) do
try
c := s[i];
case c of
#9, ' ':
if QuoteStr
then if EscEn
then begin
s1 := s1 + '\'+ c;
EscEn := false;
end
else s1 := s1 + c
else break;
'"':
if EscEn
then s1 := s1 + '"'
else QuoteStr := not QuoteStr;
'\':
if EscEn
then begin
s1 := s1 + '\';
EscEn := false;
end
else EscEn := true;
else if EscEn
then begin
s1 := s1 + '\'+ c;
EscEn := false;
end
else s1 := s1 + c
end;
finally
inc(i);
end;
if EscEn then s1 := s1 + '\';
end;
UseProgDir := false;
if s1 = ''
then begin
// Обрабатываем каталог Тотал Командера
s := '%COMMANDER_PATH%\wincmd.ini';
s2 := '%COMMANDER_PATH%\wcx_ftp.ini';
ExpandEnvironmentStrings(PChar(s), a, MAX_PATH);
i := GetPrivateProfileInt('Configuration', 'UseIniInProgramDir', 0, a);
UseProgDir := (i and 2) <> 0;
if (i and 4) <> 0 then s1 := s2;
end;
if s1 = ''
then begin
// Проверяем реестр
try
Reg := TRegistry.Create(KEY_READ);
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKeyReadOnly('\Software\Ghisler\Total Commander')
then s1 := Reg.ReadString('FtpIniName')
else s1 := '';
finally
Reg.Free;
end;
except
s1 := '';
end;
if (s1 = '')
then if UseProgDir
then s1 := s2
else s1 := 'wcx_ftp.ini';
end;
if (copy(s1, 1, 2) = '.\')
then begin
delete(s1, 1, 2);
s1 := '%COMMANDER_PATH%\' + s1;
end;
ExpandEnvironmentStrings(PChar(s1), a, MAX_PATH);
result := strpas(a);
end; |
ЗЫ. Вроде проверил работу на своем плагине, но ошибки могут быть.
ЗЗЫ. Анекдот про "длинный_мнемоничный_идентификатор_номер_один" - знаю.
Last edited by TSergey on Tue Feb 15, 2005 08:31; edited 2 times in total |
|