Wenn ein Programm Anweisungen aus einer S-Prozedur lesen will, die nächste Prozedurzeile aber ein Kommando enthält, wird normalerweise die EOF-Bedingung für die Anweisungseingabe gesetzt und damit in der Regel das Programm beendet. Hierdurch soll verhindert werden, dass infolge einer vergessenen END-Anweisung das Programm unbeabsichtigt „weiterlebt“ und zu einem späteren Zeitpunkt durch das Laden eines anderen Programms ungeordnet beendet wird.
Andererseits kann es erwünscht sein, die Abarbeitungsreihenfolge von Anweisungen ebenso wie die von Kommandos durch SDF-P-Kontrollstrukturen zu steuern. Dies wird durch einen BEGIN-Block mit PROGRAM-INPUT=*MIXED-WITH-CMD unterstützt, in dem Kommandos und Anweisungen beliebig gemischt werden können. Das Programm wird, wenn es eine Anweisung erwartet, beim Auftreten eines Kommandos in den Unterbrechungszustand versetzt und mit der nächsten Anweisung wieder fortgesetzt:
/DECL-PARAM STEUERDATEI /&* SYSDTA und SYSSTMT sind in S-Prozeduren standardmaessig /&* schon auf SYSCMD zugewiesen /DECL-VAR ADDLIST,MULT-ELEM=*LIST /READ-VAR *LIST(ADDLIST),STRING-QUOTES=*NO,INPUT=&STEUERDATEI /SHOW-VAR ADDLIST /BEGIN-BLOCK PROGRAM-INPUT=*MIXED-WITH-CMD / START-LMS // OPEN-LIB PROJEKT-BIBL,*UPDATE / FOR NAME=*LIST(ADDLIST) // ADD-ELEM PROJ.&NAME,*LIB-ELEM(*STD,&NAME(*INCR),S) / END-FOR // END /END-BLOCK
Hier wird eine Reihe von Namen in eine Listenvariable eingelesen und anschließend für jedes Element der Liste die LMS-Anweisung ADD-ELEMENT einmal ausgeführt, wobei der Name mehrfach durch &-Ersetzung in die Anweisung eingefügt wird.
Analog zu Anweisungen können auch Datensätze auf diese Weise programmiert werden. Damit auch für diese Zeilen die S-Prozedursyntax genutzt werden kann (z.B. hinsichtlich Einrückung und Fortsetzungsbehandlung) und die Verwendung von Variablen problemlos möglich ist (in Datensätzen wird standardmäßig keine &-Ersetzung durchgeführt), gibt es ein Kommando SEND-DATA, das als Operanden einen beliebigen String-Ausdruck erwartet. Dessen Wert wird als Datenzeile an ein von SYSDTA lesendes Programm
übergeben.Alternativ kann durch den Operandenwert *EOF auch die Endebedingung für SYSDTA gesetzt werden.