Help! Please.

Просьба дочитать до конца, и объяснить.
Я понимаю, что в такой ситуации я сам виноват, но без посторонней помощи обойтись не смогу. У меня проблемы с инф-ой и нужно, чтобы вы объяснили код программы (если можете и хотите). Программа ниже:

{==========}

{This program find and rectifies errors}
program StrEditor;
const signs=['!','.','?'];
sign=['!','.','?',';',','];
sig=[',',';',' '];
si=['!','.','?',';',',',' '];
var s1: char;
i,x,y: integer;
s,s3: string;
t1,t2: text;


function del(a:integer):integer;
Begin
Delete (s,a,1);
x:=x+1;
End;

{===}

procedure pro;
Begin
if s[i]=' ' then
Begin
if s[i+1] in si then del(i);
if s[i-1] in si then del(i);
End;
End;

{===}

procedure zap;
Begin
if s[i]=',' then
Begin
if s[i+1] in sign then del(i);
End;
End;

{===}

procedure tozap;
Begin
if s[i]=';' then
Begin
if s[i+1]=',' then del(i+1);
if s[i+1]=';' then del(i);
if s[i+1] in signs then del(i);
End;
End;

{===}

procedure toch;
Begin
if s[i]='.' then
Begin
if s[i+1] in signs then del(i);
if s[i+1]=';' then del(i+1);
if s[i+1]=',' then del(i+1);
End;
End;

{===}

procedure Vosk;
Begin
if s[i]='!' then
Begin
if s[i+1]='.' then del(i+1);
if s[i+1]='!' then del(i);
if s[i+1]='?' then del(i);
if s[i+1]=';' then del(i+1);
if s[i+1]=',' then del(i+1);
End;
End;

{===}

procedure vopr;
Begin
if s[i]='?' then
Begin
if s[i+1] in sign then del(i+1);
End;
End;

{===}

Begin
Assign (t1,'textin.txt');
Reset (t1);
Assign (t2,'textout.txt');
Rewrite (t2);
While not Eof (t1) do
Begin
Readln (t1,s);
i:=0;
s1:=' ';
repeat
i:=i+1-x;
x:=0;
pro;
until i=Length (s);
i:=0;
Insert (s1,s,Length (s)+1);
repeat
i:=i+1-x;
x:=0;
zap;
tozap;
toch;
vosk;
vopr;
until i=Length (s);
writeln (s); {Delete unnecessary semicolons}

if s[1] in si then Delete (s,1,1);

i:=0;
s1:=' ';
repeat
i:=i+1;
if s[i] in sign then Insert (s1,s,i+1);
until i=Length (s); {Inserts blanks after punctuation marks}

y:=0;
i:=0;
x:=0;
s[1]:= UpCase (s[1]);
repeat
i:=i+1;
if s[i] in signs then
Begin
if y=1 then s[x+2]:= UpCase (s[x+2]);
x:=i;
y:=1;
End;
until i=Length (s);
s1:=' ';
if s[Length (s)]=s1 then Delete (s,Length (s),1);
{Does header a letter in the beginning}
Writeln (t2,s);
End;
Close (t1);
Close (t2);
End.

{==========}

P.S. Буду ОЧЕНЬ благодарен если откликнется хоть кто-нибудь.
P.P.S. Я понимаю, какой я оболтус и разгильдяй, но учиться сложно. Поэтому тем кто не смыслит в этом ничего, просьба пройти мимо и не критиковать.