C.Ю.Соловьев

Методические материалы
по курсу
"Алгоритмы и алгоритмические языки"

Программа курса  >>  Пример "большой" программы  >>  Модуль IMPL_FMS


(* Имплантируемый модуль
procedure ConMacro(var S : String);
function    SiCoMe(var C : String) : boolean;
*)

{ ConMacro : S - строка с вызовами макроподстановок }
{      Res = S  строка после подстановок            }

procedure ConMacro(var S : String);
   var I,K,L,M : integer;
           T,C : String;
             H : ^String;
begin   L:=Length(S);
        repeat
           I:=0;
           K:=0;
           while (I < CkoIndMem) and (K = 0) do begin
              I:=I+1;
              H:=AdrIndMem^[I];
              C:=NumbStr(1,H^);
              K:=-1;
              if Fin_Str(T,C) then { H^ = 'SET ИМЯ +ЗНАЧЕНИЕ+' ? }
              if   T = 'SET'  then
              if Fin_Str(T,C) then
              if   C = ''     then K:=Pos(T,S)
           end;
           if 0 < K then begin  { T = ИМЯ      }
              M:=Length(T);
              C:=NumbStr(2,H^); { C = ЗНАЧЕНИЕ }
              L:=L-M+Length(C);
              S:=Copy(S,1,K-1)+C+Copy(S,K+M,255)
           end
        until (K <= 0) or (255 < L)               end;

{ SiCoMe : C - имя параметра для поиска в ExtMemory          }
{    Res = FALSE, если параметр не найден                    }
{          TRUE , если параметр    найден + С - его значение }

function SiCoMe(var C : String) : boolean;
   var I : integer;
       R : ^String;
begin   for I:=CkoIndMem downto 1 do begin
           R:=AdrIndMem^[I];
           if NumbStr(1,R^) = C then begin
              SiCoMe:=true;
              C:=NumbStr(2,R^);
              ConMacro(C);
              Exit
           end
        end;
        SiCoMe:=false                  end;

Вопросы?