Wenn du die PI-Variable mit Varying definierst, werden dir ja nur so viele Zeichen übergeben, wie die Quelle lang ist. Du arbeitest ja eben keine 5000 Zeichen durch!
Außerdem musst du folgendes beachten:
Der Aufruf kopiert deine Quelle in ein 5K-Feld und füllt mit Leerzeichen auf.
Die %trim() entfernt die Leerzeichen wieder, %Len() gibt dir die Länge, anschließend verwirfst du das Trim-Ergebnis wieder.
Übergibst du also z.B. " A", gibt deine Routine nur das Leerzeichen zurück.

Also:
Definiere PR/PI mit "varying const" und arbeite ohne Trim die Zeichen ab.