01.01.2008, 18:54
|
|
Продвинутый
|
|
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
|
|
Сам нашел:
Код:
unit GetParams;
interface
uses
SysUtils, Windows;
procedure Main;
implementation
var
InParams: String;
ChatFile: TextFile;
procedure InitParams;// Читаем переданные параметры из переменной окружения
var SS: String;
begin
SetLength(SS, 10000);
GetEnvironmentVariable('QUERY_STRING', @SS[1], 2000);
InParams:=PChar(@SS[1]);
end;
function HexToInt(CH: char): integer;// Функция переводит шестнадчитиричный символ в число
begin
Result:=0;
case CH of
'0'..'9': Result:=Ord(CH)-Ord('0');
'A'..'F': Result:=Ord(CH)-Ord('A')+10;
'a'..'f': Result:=Ord(CH)-Ord('a')+10;
end;
end;
function Decode(Value: String): String;// Преобразует символы, записанные в виде %2B к правильному виду
var
I, L: Integer;
begin
Result:='';
L:=0;
for I:=1 to Length(Value) do begin
if(Value[i]<>'%') and (Value[i]<>'+') and (L<1) then begin
Result:=Result+Value[i];
end else begin
if(Value[i]='+') then
Result:=Result+' '
else if(Value[i]='%') then begin
L:=2;
if(I<Length(Value)-1) then begin
Result:=Result+Chr(HexToInt(Value[I+1])*16+HexToInt(Value[I+2]));
end;
end else
Dec(L);
end;
end;
end;
function ParamByName(Name: String): String;// Возвращает значение параметра, заданного в Name
var
SS, ST: String;
K: Integer;
begin
Result:='';
SS:=InParams;
while Length(SS)<>0 do begin
K:=Pos('&',SS);
if(K<>0) then begin
ST:=Copy(SS,1,K-1);
SS:=Copy(SS,K+1,10000);
end else begin
ST:=SS;
SS:='';
end;
K:=Pos('=',ST);
if(K<>0) then begin
if(Name=Copy(ST,1,K-1)) then begin
Result:=Decode(Copy(ST,K+1,6000));
end;
end;
end;
end;
procedure Main;
begin
InitParams;
//Дальше можно получать значения параметров функцией ParamByName
end;
end.
......
//Файл проекта
program Project1;
{$APPTYPE CONSOLE}
{$e cgi}
uses
Windows,
GetParams in 'GetParams.pas';
begin
Main;
end.
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
|