© 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