uses crt;
var
mtotstack : byte;
commandStr: string;
mCommand : string;
mParam : string;
mStackPos : array[1..20] of byte;
mStackEnd : array[1..20] of byte;
procedure mSetStackNum;
var x : byte;
begin
fillChar(mStackPos,sizeOf(mStackPos),1);
fillChar(mStackEnd,sizeOf(mStackEnd),1);
mTotStack := 1;
for x := 1 to length(commandStr) do
if (commandStr[x]=';') then
begin
inc(mTotStack);
mStackPos[mTotStack] := x+1;
mStackEnd[mTotStack-1] := x-1;
end;
mStackEnd[mTotStack] := length(commandStr);
end;
procedure mGetStackData(num : byte);
begin
if (num=1) and (mTotStack=1) then
begin
mCommand := copy(commandStr,1,2);
mParam := copy(commandStr,3,length(commandStr)-2);
end else
begin
mCommand := copy(commandStr,mStackPos[num],2);
mParam := copy(commandStr,mStackPos[num]+2,mStackEnd[num]-2);
clrscr;
writeLn('stackpos1 = ',mStackPos[1]);
writeLn('commandStr = ',commandStr);
writeLn('command=',mCommand);
writeLn('param =',mParam);
end;
end;
begin
commandStr := '^$MAINABABA;SKA;^$MAIN';
mSetStackNum;
writeLn('total command in stack = ',mTotStack);
mGetStackData(3);
end.