кстати, сразу, что бросилось неприятно в глаза.
объявление переменных, с точки зрения языка абсолютно верное,
но вот смысла так делать я не вижу:
тут все переменные ОДНОГО типа...var
P,First:Link; q:^auto;
ага. вижу...
q просто не используется нигде. надо это безобразие убрать.