Gestire lo spool in REXX 
Queste routine consentono un facile accesso allo spool tramite l'interfaccia SDSF.
La prima operazione da eseguire è quella di richiamare la routine initIsf che inizializza l'interfaccia ISF. A questo punto è possibile utilizzare la routine findJoblogs specificando il prefisso del job che ci interessa ed eventualmente le colonne che vogliamo selezionare. La routine restituisce il numero di joblog trovati e valorizza degli stem con lo stesso nome delle colonne con i dati ottenuti; viene inoltre creato uno stem denominato "token.", che contiene un identificativo necessario per ottenere informazioni sul sysout. Per ottenere il sysout bisogna richiamare la funzione getJoblog, specificando il token relativo al joblog e il nome di uno stem in cui inserire i dati (sottoforma di stringa, senza punto finale). Volendo ottenere invece il sysout di una DD specifica, è necessario richiamare la funzione getJoblogDD, specificando come argomenti il token, il nome della DD e il nome dello stem di output.
Prima di terminare il programma è bene chiudere l'interfaccia ISF richiamando la routine termIsf.

Esempio di utilizzo:
Questo programma stampa il sysout di tutti i job chiamati "PROVA":

/* REXX */
  call initIsf
  n = findJoblogs('PROVA')
  say n' jobs found'
  do i = 1 to n
    say 'JOB: 'jname.i
    call getJoblog token.i 'jl'
    do j = 1 to jl.0
      say jl.j
    end
    say ''
  end
  call termIsf
exit 0



cequ: procedure /* (cond, tv, fv) */
  if arg(1) then return arg(2)
return arg(3)

initIsf: procedure
return isfcalls("ON")

termIsf: procedure
return isfcalls("OFF")

findJoblogs: /* (prefix[, cols]) */
  isfprefix = arg(1)
  isfcols = cequ(arg(2, "E"), arg(2), "jname queue pos retcode")
  address SDSF 'ISFEXEC ST'
return isfrows

getJoblog: /* (token, stem) */
  $c = 0
  address SDSF "ISFACT ST TOKEN('"arg(1)"') PARM(NP ?) (prefix j_"
  if rc <> 0 then return 0
  do $i = 1 to j_ddname.0
    address SDSF "ISFACT ST TOKEN('"j_token.$i"') PARM(NP SA)"
    "EXECIO * DISKR "isfddname.1" (STEM $tmp."
    do $j = 1 to $tmp.0
      $c = $c + 1
      interpret arg(2)".$c=$tmp.$j"
    end
  end
  interpret arg(2)".0=$c"
return 1

getJoblogDD: /* (token, ddName, stem) */
  interpret arg(3)".0=0"
  address SDSF "ISFACT ST TOKEN('"arg(1)"') PARM(NP ?) (prefix j_"
  if rc <> 0 then return 0
  do $i = 1 to j_ddname.0
    if j_ddname.$i = arg(2) then do
      address SDSF "ISFACT ST TOKEN('"j_token.$i"') PARM(NP SA)"
      if rc <> 0 then return 0
      "EXECIO * DISKR "isfddname.1" (STEM "arg(3)"."
      if rc <> 0 then return 0
      leave
    end
  end
return 1



Commenti

Aggiungi commento
Commento non disponibile per questa notizia.