Зачем использовать два массива listNum и p_listNum и делать лишние телодвижения по копированию одного в другой?
Из программы выбрасываем listNum:=p_listNum; и в объявлении переменных сразу
listNum AT %QD8.34.0 :ARRAY [0..4] OF DWORD;
Вообще да, код недопричесан был после экспериментов

Забыли упомянуть, что переменная часть номера телефонов вводятся с панели в виде цифр, а не символов
Не совсем понял про какие символы речь?