I use a REXX script which we use to record cond codes from test jobs.

main:
  cvt     = ptr(16)
  tcbp    = ptr(cvt)
  tcb     = ptr(tcbp + 4)
  jscb    = ptr(tcb + 180)
  ssib    = ptr(jscb + 316)
  tct     = ptr(tcb + 164)
  lct     = ptr(tct + 152)
  jct     = ptr(lct + 16)
  jobid   = stg(ssib + 12, 8)
  jobname = stg(jct + 8, 8)
  sct     = c2d(stg(jct + 32, 3))

  SCT_LEN = 36

  if sct > 0 then do
    say 'Step     ProcStep CondCode'
    say '-------- -------- --------'
    do while sct > 0
      stepname = left(stg(sct + 68, 8), 8)
      procstep = left(stg(sct + 60, 8), 8)
      condcode = x2d(c2x(stg(sct + 24,2)))
      sctxbttp = c2d(stg(sct + 68, 3))
      sctxbttp = swareq(stg( sct + 68, 3))
      scabend  = stg(sctxbttp + 112, 3)
      say stepname procstep condcode scabend
      sct = x2d(c2x(stg(sct + SCT_LEN, 3)))
end
end

  exit 0

ptr: arg addr, len
  if len = '' then len = 4
  return x2d(c2x(bitand(storage(d2x(addr),len),x2c('7FFFFFF'))))

stg: arg addr, len
  return storage(d2x(addr),len)

swareq: procedure
  numeric digits 20                         /* allow up to 2**64    */
  sva=c2d(arg(1))                           /* convert to decimal   */
  tcb = c2d(storage(21C,4))                 /* tcb psatold  */
  jscb = c2d(storage(d2x(tcb+180),4))       /* jscb tcbjscb  */
  qmpl = c2d(storage(d2x(jscb+244),4))      /* qmpl jscbqmpi */
  /* see if qmat can be above the bar */
  qmsta= c2x(storage(d2x(qmpl+16),1))       /* job status byte      */
  if substr(x2b(qmsta),6,1) then            /* is qmqmat64 bit on?  */
  do                                        /* yes, qmat can be atb */
    if right(x2b(c2x(arg(1))),1) \= '1' then/* swa=below ?          */
      return c2d(arg(1))+16                 /* yes, return sva+16   */
    qmat=c2d(storage(d2x(qmpl+10),2))*(2**48) +,/* qmat+0 qmadd01  */
         c2d(storage(d2x(qmpl+18),2))*(2**32) +,/* qmat+2 qmadd23  */
         c2d(storage(d2x(qmpl+24),4))       /* qmat+4 qmadd    */
    return c2d(storage(d2x(qmat+(sva*12)+64),4))+16
end
else
  do                                        /* no, qmat is btb      */
    if right(c2x(arg(1)),1) \= 'F' then     /* swa=below ?          */
      return c2d(arg(1))+16                 /* yes, return sva+16   */
    qmat = c2d(storage(d2x(qmpl+24),4))     /* qmat qmadd    */
    do while sva>65536
      qmat = c2d(storage(d2x(qmat+12),4))   /* next qmat qmat+12  */
      sva=sva-65536                         /* 010006f -> 000006f   */
end
    return c2d(storage(d2x(qmat+sva+1),4))+16
end



On 2019-11-05 2:26 PM, Brian Westerman wrote:
Of course there is a way, all you need to do is process the SCT from your program.  You 
will get all steps up to the one you are currently in only because it has not ended yet.  
But if you are running as the last step it wouldn't matter.  That's not how I do it in 
SyzMPF/z, but it "could" be done that way in another step of the job.  In fact, 
I think there are programs on the CBT tape that do just that.

Brian

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to