©
serviceprofessionalgmbh
Have you always been annoyed about not being able to pass back stems to a calling program? It can be done!
(The question to ask is not IF something works but HOW it works.)
For a better overview the subprograms are coded internally.
The first variation returns the result of an EXECIO. The second variation prepares a string to be passed back, which is
interpreted in the main program.
Beispiel-1 mit EXECIO
/* REXX
*/
get#data('stem')
/* use stem.n here */
say "Stemgroesse aus UPROG:" stem.0
do I = 1 to stem.0
say strip(stem.i)
end
exit
get#data: procedure
parse arg var
"newstack"
ende = random(1,15)
do i=1 to ende
Queue "Das ist zeile" i
if i = ende then queue "Und das ist das ENDE"
end
DDname="T"reverse(userid())
"alloc dd("ddname") new space(1) tracks lrecl(80) dsorg(ps) reuse"
"EXECIO" queued() "DISKW" DDname "(FINIS)"
"delstack"
Return "EXECIO * DISKR" DDname "(STEM "var". FINIS)"
Beispiel-2 mit zu interpretierndem String
/* REXX
*/
DATEI="TEST.DATA(FIFOLIFO)"
interpret fileitem("INFO",DATEI) /* jetzt INFO.0 etc. vorhanden */
say "Records:" INFO.0
do I = 1 to INFO.0
say right(i,2) ">>" strip(INFO.I,"T")
end
say "Bye, bye..."
exit
fileitem: procedure
arg var,dsn
"newstack"
"alloc dd(tmp) da("dsn") shr reuse"
"execio * diskr tmp (finis"
"free dd(tmp)"
erg = var".0="queued()";"
do I = 1 to queued()
parse pull rec
ERG = ERG !! var"."I"='"rec"';"
end
"delstack"
return erg
back to Help in Daily Life