Da geht wohl einiges durcheinander:
1. Eine Aktivierungs-Gruppe wird nicht durch den *INLR geschlossen, sondern nur inaktiviert, d.h. der Speicher bleibt reserviert und beim nächsten Aufruf werden nur die Variablen neu initialisiert. Ausnahme ist die Aktivierungs-Gruppe *NEW, sie wird beim Programm-Ende geschlossen.
Alle anderen Aktivierungs-Gruppen werden mit Job-Ende geschlossen. Benannte Aktivierungs-Gruppen können ausserdem mit dem CL-Command RCLACTGRP oder einem C-API geschlossen werden.

2. Eine (Sub-)Prozedur oder Funktion wird immer mit RETURN beendet und niemals mit *INLR. Grund: *INLR ist Zyklus und nur Main-Procedures unterliegen dem Zyklus, nicht aber Sub-Prozeduren.

3. Ob ein Service-Programm mit Main-Prozedur mit CALL oder CALLP aufgerufen wird, hat keinen Einfluss auf die Aktivierungs-Gruppe. (Ich bin mir nicht einmal sicher, ob der CALL ohne P überhaupt funktionniert, da nur Programme dynamisch aufgerufen werden können).

3. Ein Binder-Verzeichnis hat mit einem Aufruf überhaupt nichts zu tun, sondern wird zur Compile-Zeit benötigt, um entweder die verwendeten Module oder die Signatur der eingebundenen Service-Programme zu finden und in das Programm-Objekt einzubinden.
(Man kann auch die Module und Service-Programme direkt beim CRTPGM anlisten)

4. Es macht auch durch aus Sinn Service-Programme in einer benannten Aktivierungs-Gruppe laufen zu lassen, nämlich dann, wenn diese Prozeduren in fast jedem Programm verwendet werden, z.B. Aufbereiten von numerischen Datumswerten.

Man sollte nur die Aktivierungs-Gruppe dann nicht schliessen.
Dies führt zu dem Problem von KM:

Ein Service-Program wird statisch (über Signatur) in ein Programm eingebunden, und beim ersten Programm-Aufruf (also PGMA) aktiviert. Wird das Service-Programm mehrfach aufgerufen, erfolgt keine neue Aktivierung. Wird also die Aktivierungs-Gruppe, in der das Service-Programm läuft, gelöscht. Läuft der nächste Aufuf in Leere (MCH3402 oder was auch immer).

Anders sieht es bei Programmen aus. Der Aufruf ist dynamisch, d.h. jedes Mal wenn das Programm aufgerufen wird läuft der Aktivierungs-Prozess. Ist die Aktivierungs-Gruppe bereits aktiv, werden nur die Variablen neu initialisiert. Ist die Aktivierungs-Gruppe nicht aktiv, wird sie aktiviert.

Birgitta