после ввода comandImput программа зацикливается на pascal

после ввода comandImput программа зацикливается и бесконечно отображается двумерный массив. Я пробовал менять while на for ,обнулять переменные после каждого цикла ,и менял условия начала работы while в if else ,однако ничего не менялось и на выходе меня всегда ждал бесконечный столб нулей которые я использую для заполнения массива.

 program calcul;
var
  sk:array[1..15,1..15]of char;
  comandImput:string;
  numberImput:integer;
  P,k,l,line:integer;
  begin
    k:=0;
    l:=0;
    
   for j:integer:=1 to 15 do begin
     for i:integer:=1 to 15 do begin
     sk[i,j]:=('0');
   end;
   end;
   
   for j:integer:=1 to 15 do begin
     writeln();
     for i:integer:=1 to 15 do begin
     write(sk[i,j]);
   end;
   end;
   writeln();
   writeln();
   writeln('это программа для вычисления периметра многоугольников с прямыми углами');
   writeln('чтобы начертить линию:напишите сначала направление(right/left/up/down),а потом количество сантиметров(14)');
   writeln('чтобы закончить преведите линию в левый верхний угол не выходя за полотно');
   writeln('программа не расчитана на линии вне полотна!');
   read(comandImput);
   
    k:=1;
    l:=1;
   
   
   while (line=1)or((k=1)and(l=1)) do begin
     
     read(comandImput);
     
       If comandImput='down' then begin
     read(numberImput);
     P:=P+numberImput;
     numberImput:=numberImput+1;
     while l<numberImput do begin
       sk[k,l]:='x';
       l:=l+1;
     end;
   end
   
   else If comandImput='right' then begin
     read(numberImput);
     P:=P+numberImput;
     numberImput:=numberImput+1;
     while k<numberImput do begin
       sk[k,l]:='x';
       k:=k+1;
     end;
   end
   
   else If comandImput='up' then begin
     read(numberImput);
     P:=P+numberImput;
     numberImput:=numberImput+1;
     while l<numberImput do begin
       sk[k,l]:='x';
       l:=l-1;
     end;
   end
   
   else If comandImput='left' then begin
     read(numberImput);
     P:=P+numberImput;
     numberImput:=numberImput+1;
     while k<numberImput do begin
       sk[k,l]:='x';
       k:=k+1;
     end;
   end;
   
   
   
   for j:integer:=1 to 15 do begin
     writeln();
     for i:integer:=1 to 15 do begin
       write(sk[i,j]);  
     end;  
   end;
   
   numberImput:=0;
   
   line:=line+1;
   
   end;
   
  writeln('перимитер равен ',P,'см');
   
  end.

Ответы (0 шт):