//BCHJOB JOB(JPGMREFWEB) JOBD(QBATCH) OUTQ(QPRINT) ENDSEV(60) + LOG(4 00 *SECLVL) MSGQ(*USRPRF) /********* INIZIO ISTRUZIONI PER L'ESECUZIONE **************************/ /* 1) SPOSTARE IL FILE .txt IN UN INDIRIZZARIO IFS */ /* (AD ES.: '/home/neroni' ). */ /* 2) DA UN VIDEO COMANDI (CALL QCMD) DIGITARE I SEGUENTI COMANDI */ /* OPPURE USARE COPIA E INCOLLA PER ESEGUIRLI UNO ALLA VOLTA. */ /* 3) CREARE UN FILE SORGENTE TEMPORANEO. */ /* CRTSRCPF FILE(QTEMP/STRINGA) RCDLEN(112) + */ /* TEXT('Stringa creazione') */ /* 4) COPIARE LA STRINGA DI CREAZIONE NEL FILE TEMPORANEO. */ /* CPYFRMIMPF FROMSTMF('/home/neroni/JPGMREFWEB.txt') + */ /* TOFILE(QTEMP/STRINGA STRINGA) + */ /* MBROPT(*REPLACE) RCDDLM(*CRLF) + */ /* STRDLM(*NONE) RMVBLANK(*NONE) FLDDLM(*TAB) */ /* 5) ESEGUIRE LA STRINGA. */ /* SBMDBJOB FILE(QTEMP/STRINGA) MBR(STRINGA) JOBQ(QBATCH) */ /********* FINE ISTRUZIONI PER L'ESECUZIONE **************************/ /* Claudio Neroni 26/04/2008 Creato. */ /* JPGMREF */ /* Program reference. */ /* Prerequisiti: JRSNMSG */ /* Crea la libreria. */ MKDIR DIR('/qsys.lib/utx.lib') CHGLIB LIB(UTX) TEXT('Utilita'' CN.') /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP UTX QGPL) /* Crea il file sorgente. */ DLTF FILE(UTX/JPGMREFSRC) CRTSRCPF FILE(UTX/JPGMREFSRC) RCDLEN(112) TEXT('Program reference. + Src') /* Carica i sorgenti. */ CPYF FROMFILE(JPGMREF) TOFILE(UTX/JPGMREFSRC) TOMBR(JPGMREF) + MBROPT(*REPLACE) SRCOPT(*SEQNBR) CPYF FROMFILE(JPGMREFD) TOFILE(UTX/JPGMREFSRC) TOMBR(JPGMREFD) + MBROPT(*REPLACE) SRCOPT(*SEQNBR) CPYF FROMFILE(JPGMREFD1) TOFILE(UTX/JPGMREFSRC) TOMBR(JPGMREFD1) + MBROPT(*REPLACE) SRCOPT(*SEQNBR) CPYF FROMFILE(JPGMREFF) TOFILE(UTX/JPGMREFSRC) TOMBR(JPGMREFF) + MBROPT(*REPLACE) SRCOPT(*SEQNBR) CPYF FROMFILE(JPGMREFF1) TOFILE(UTX/JPGMREFSRC) TOMBR(JPGMREFF1) + MBROPT(*REPLACE) SRCOPT(*SEQNBR) CPYF FROMFILE(JPGMREFF2) TOFILE(UTX/JPGMREFSRC) TOMBR(JPGMREFF2) + MBROPT(*REPLACE) SRCOPT(*SEQNBR) CPYF FROMFILE(JPGMREF1) TOFILE(UTX/JPGMREFSRC) TOMBR(JPGMREF1) + MBROPT(*REPLACE) SRCOPT(*SEQNBR) CPYF FROMFILE(JPGMREF2) TOFILE(UTX/JPGMREFSRC) TOMBR(JPGMREF2) + MBROPT(*REPLACE) SRCOPT(*SEQNBR) CPYF FROMFILE(JPGMREFP) TOFILE(UTX/JPGMREFSRC) TOMBR(JPGMREFP) + MBROPT(*REPLACE) SRCOPT(*SEQNBR) /* Modifica testo e tipo seu dei sorgenti caricati. */ CHGPFM FILE(UTX/JPGMREFSRC) MBR(JPGMREF) SRCTYPE(CMD) + TEXT('Program reference. Cmd') CHGPFM FILE(UTX/JPGMREFSRC) MBR(JPGMREFD) SRCTYPE(PF) + TEXT('Program reference. Outfile Dspobjd') CHGPFM FILE(UTX/JPGMREFSRC) MBR(JPGMREFD1) SRCTYPE(LF) + TEXT('Program reference. Outfile Dspobjd') CHGPFM FILE(UTX/JPGMREFSRC) MBR(JPGMREFF) SRCTYPE(PF) + TEXT('Program reference. Outfile Dsppgmref') CHGPFM FILE(UTX/JPGMREFSRC) MBR(JPGMREFF1) SRCTYPE(LF) + TEXT('Program reference. Outfile Dsppgmref') CHGPFM FILE(UTX/JPGMREFSRC) MBR(JPGMREFF2) SRCTYPE(LF) + TEXT('Program reference. Outfile Dsppgmref') CHGPFM FILE(UTX/JPGMREFSRC) MBR(JPGMREF1) SRCTYPE(CLLE) + TEXT('Program reference. Cpp') CHGPFM FILE(UTX/JPGMREFSRC) MBR(JPGMREF2) SRCTYPE(RPGLE) + TEXT('Program reference. Explode') CHGPFM FILE(UTX/JPGMREFSRC) MBR(JPGMREFP) SRCTYPE(PNLGRP) + TEXT('Program reference. Help') /* Cancella gli oggetti preesistenti. */ DLTCMD CMD(UTX/JPGMREF) DLTF FILE(UTX/JPGMREFD1) DLTF FILE(UTX/JPGMREFD) DLTF FILE(UTX/JPGMREFF1) DLTF FILE(UTX/JPGMREFF2) DLTF FILE(UTX/JPGMREFF) DLTPGM PGM(UTX/JPGMREF1) DLTPGM PGM(UTX/JPGMREF2) DLTPNLGRP PNLGRP(UTX/JPGMREFP) /* Crea il comando. */ CRTCMD CMD(UTX/JPGMREF) PGM(JPGMREF1) SRCFILE(UTX/JPGMREFSRC) + HLPPNLGRP(JPGMREFP) HLPID(CMD) PRDLIB(UTX) /* Crea il file ricevente del Display Object Description. */ CRTPF FILE(UTX/JPGMREFD) SRCFILE(UTX/JPGMREFSRC) SIZE(*NOMAX) CRTLF FILE(UTX/JPGMREFD1) SRCFILE(UTX/JPGMREFSRC) /* Crea il file ricevente del Display Program Reference. */ CRTPF FILE(UTX/JPGMREFF) SRCFILE(UTX/JPGMREFSRC) SIZE(*NOMAX) CRTLF FILE(UTX/JPGMREFF1) SRCFILE(UTX/JPGMREFSRC) CRTLF FILE(UTX/JPGMREFF2) SRCFILE(UTX/JPGMREFSRC) /* Crea il Command Processing Program. */ CRTBNDCL PGM(UTX/JPGMREF1) SRCFILE(UTX/JPGMREFSRC) DBGVIEW(*LIST) /* Crea l'Esplodente. */ CRTBNDRPG PGM(UTX/JPGMREF2) SRCFILE(UTX/JPGMREFSRC) DBGVIEW(*LIST) /* Crea il Panel Group. */ CRTPNLGRP PNLGRP(UTX/JPGMREFP) SRCFILE(UTX/JPGMREFSRC) /*---------------------------------------------------------------------*/ /* Sorgente del comando. */ //DATA FILE(JPGMREF) FILETYPE(*SRC) ENDCHAR('//ENDINP') /* Program reference. Cmd */ /* Claudio Neroni 15-04-2008 Creato. */ /* */ CMD PROMPT('Program reference') PARM KWD(PGM) TYPE(*NAME) MIN(1) PROMPT('Program + name') PARM KWD(DEVELOP) TYPE(*CHAR) LEN(10) RSTD(*YES) + DFT(*ALL) VALUES(*ALL *PGM) + PROMPT('Development type') PARM KWD(PGMATR) TYPE(*CHAR) LEN(2) SPCVAL((BA) + (CB) (CL) (DF) (QR) (RP)) MAX(20) + PROMPT('Program attribute') PARM KWD(OBJATR) TYPE(*CHAR) LEN(10) + SPCVAL((PRTF) (DSPF) (PF) (LF) (RPG) + (CLP) (RPGLE) (CLLE) (BLANK) (BLANKF) + (TAPF)) MAX(50) PROMPT('Object attribute') //ENDINP /* Sorgenti del file ricevente del Display Object Description. */ //DATA FILE(JPGMREFD) FILETYPE(*SRC) ENDCHAR('//ENDINP') * Claudio Neroni 14-04-2008 Creato. * File di emissione di DSPOBJD. A R QLIDOBJD FORMAT(QADSPOBJ) //ENDINP //DATA FILE(JPGMREFD1) FILETYPE(*SRC) ENDCHAR('//ENDINP') * Claudio Neroni 14-04-2008 Creato. * File di emissione di DSPOBJD. * Key oggetto, tipo, attributo. A R QLIDOBJD A PFILE(JPGMREFD) A K ODOBNM A K ODOBTP A K ODOBAT //ENDINP /* Sorgenti del file ricevente del Display Program Reference. */ //DATA FILE(JPGMREFF) FILETYPE(*SRC) ENDCHAR('//ENDINP') * Claudio Neroni 14-04-2008 Creato. * File di emissione di DSPPGMREF. A R QWHDRPPR FORMAT(QADSPPGM) //ENDINP //DATA FILE(JPGMREFF1) FILETYPE(*SRC) ENDCHAR('//ENDINP') * Claudio Neroni 14-04-2008 Creato. * File di emissione di DSPPGMREF. * Key pgm usante, obj usato, tipo obj usato. * Omette oggetti di QSYS. A R QWHDRPPR A PFILE(JPGMREFF) A K WHPNAM A K WHFNAM A K WHOTYP A O WHLNAM COMP(EQ 'QSYS') //ENDINP //DATA FILE(JPGMREFF2) FILETYPE(*SRC) ENDCHAR('//ENDINP') * Claudio Neroni 14-04-2008 Creato. * File di emissione di DSPPGMREF. * Key obj usato, tipo obj usato, pgm usante. * Omette oggetti di QSYS. A R QWHDRPPR A PFILE(JPGMREFF) A K WHFNAM A K WHOTYP A K WHPNAM A O WHLNAM COMP(EQ 'QSYS') //ENDINP /* Sorgente del Command Processing Program. */ //DATA FILE(JPGMREF1) FILETYPE(*SRC) ENDCHAR('//ENDINP') /* Program reference. Cpp */ /* Claudio Neroni 15/04/2008 Creato. */ /* */ PGM PARM(&PGM &SVIL &PGMATR &OBJATR) /* Nome del programma da esplodere. */ DCL VAR(&PGM) TYPE(*CHAR) LEN(10) /* Tipo di sviluppo da eseguire. */ DCL VAR(&SVIL) TYPE(*CHAR) LEN(10) /* Parametro Attributi programma da considerare 2bin + 20el*2char. */ DCL VAR(&PGMATR) TYPE(*CHAR) LEN(14) /* Parametro Attributi oggetto da considerare 2bin + 50el*10char. */ DCL VAR(&OBJATR) TYPE(*CHAR) LEN(102) /* Prenotazione del CPF0001. */ DCL VAR(&CPF0001) TYPE(*LGL) /* Intercetta gli errori. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Esegue lo sviluppo. */ OVRPRTF FILE(QSYSPRT) USRDTA(&PGM) SPLFNAME(JPGMREF) CALL PGM(JPGMREF2) PARM(&PGM &SVIL &PGMATR &OBJATR) DLTOVR FILE(QSYSPRT) /* Visualizza la stampa. */ DSPSPLF FILE(JPGMREF) SPLNBR(*LAST) /* Label di esecuzione delle attività finali. */ RCLRSC: /* Riacquisisce le risorse. */ RCLRSC MONMSG MSGID(CPF0000 MCH0000) /* Se richiesto, rilascia il CPF0001. */ IF COND(&CPF0001) THEN(DO) SNDPGMMSG MSGID(CPF0001) MSGF(QCPFMSG) MSGDTA(JNSTRPG) + MSGTYPE(*ESCAPE) MONMSG MSGID(CPF0000 MCH0000) ENDDO /* Ritorna. */ RETURN /* Label di errore. */ ERRORE: /* Restituisce i messaggi al chiamante, */ /* trasformando eventuali escape in diagnostici. */ JRSNMSG MONMSG MSGID(CPF0000 MCH0000) /* Label di prenotazione del CPF0001. */ CPF0001: /* Prenota il CPF0001. */ CHGVAR VAR(&CPF0001) VALUE('1') MONMSG MSGID(CPF0000 MCH0000) /* Salta alle attività finali. */ GOTO CMDLBL(RCLRSC) ENDPGM //ENDINP /* Sorgente dell'Esplodente. */ //DATA FILE(JPGMREF2) FILETYPE(*SRC) ENDCHAR('//ENDINP') /TITLE Program reference. Explode * Claudio Neroni 14-04-2008 Creato. *--------------------------------------------------------------------------------------------- * Definito un ambiente come un insieme di librerie di dati * e delle librerie dei relativi programmi: * 1) Riceve il Display Program Reference di tutti i programmi * di un ambiente. * 2) Riceve il Display Object Description di tutti gli oggetti * dello stesso ambiente. * 3) Riceve il nome di un programma da esplodere in tutti i programmi * e in tutti gli oggetti chiamati. * 4) Riceve il tipo di sviluppo da eseguire. * *ALL=Elenca tutti gli oggetti * *PGM=Elenca solo i programmi * Restituisce una lista contenente l'esplosione richiesta. *--------------------------------------------------------------------------------------------- H decedit('0,') datfmt(*dmy/) datedit(*dmy/) *--------------------------------------------------------------------------------------------- * File di emissione di DSPPGMREF. Fjpgmreff1 if e k disk * File di emissione di DSPOBJD. Fjpgmrefd1 if e k disk * Stampa. Fqsysprt o f 132 printer oflind(*inof) *--------------------------------------------------------------------------------------------- * Scaletta di annidamento. D sca s 11 dim(max) ctdata perrcd(1) * Decodifica uso. D usg s 2 0 dim(16) ctdata perrcd(1) D usgd s 4 dim(16) alt(usg) *--------------------------------------------------------------------------------------------- * Numero massimo di programmi in lista di chiamata. D max c 100 * Lista di chiamata. Chiamante. D pnam s dim(max) like(whpnam) * Lista di chiamata. Chiamato. D fnam s dim(max) like(whfnam) * Lista di chiamata. Chiamato. Solo se programma. D fnampgm s dim(max) like(whfnam) * Lista di chiamata. Tipo dell'oggetto chiamato. D otyp s dim(max) like(whotyp) *--------------------------------------------------------------------------------------------- * Programmi già sviluppati. D pnamg s dim(10000) like(whpnam) * Indice di riempimento dei Programmi già sviluppati. D ip s 7 0 D ip0 s like(ip) D ips s like(ip) *--------------------------------------------------------------------------------------------- * File di emissione di DSPOBJD. DS per pulizia prima di ricerca. D jpgmrefds e ds extname(jpgmrefd) *--------------------------------------------------------------------------------------------- * Sottodefinisce. D whfnam ds D whfnam10 1 10 * Sottodefinisce. D whotyp ds D whotyp8 1 8 *--------------------------------------------------------------------------------------------- * Numero massimo di elementi Attributo programma. D maxpa c 20 * Spezza la simple list del parametro Attributo programma. D pppgmatr ds D pan 1 2b 0 D pa 2 dim(maxpa) * Numero massimo di elementi Attributo oggetto. D maxoa c 50 * Spezza la simple list del parametro Attributo oggetto. D ppobjatr ds D oan 1 2b 0 D oa 10 dim(maxoa) *--------------------------------------------------------------------------------------------- * Doppioni dei parametri. D pax s like(pa) dim(maxpa) D oax s like(oa) dim(maxoa) *--------------------------------------------------------------------------------------------- * Comando di chiamata. D cmd ds D cmdel 132 dim(10) *--------------------------------------------------------------------------------------------- * Trattini. D tra s 132 inz(*all'-') *--------------------------------------------------------------------------------------------- * Predispone chiusura. C seton lr * Scambia parametri. C *entry plist * Nome del programma da esplodere. C parm pppnam 10 * Sviluppo. * *ALL=Elenca tutti gli oggetti * *PGM=Elenca solo i programmi C parm ppsvil 10 * Attributo programma. C parm pppgmatr * Attributo oggetto. * Blank =Elenca tutti gli oggetti * NonBlank=Elenca solo gli oggetti con l'attributo richiesto. C parm ppobjatr * Trascrive i parametri a numero di elementi variabili nei doppioni. C clear pax C *like define pan px C do pan px C movel(p) pa(px) pax(px) C enddo C clear oax C do oan px C movel(p) oa(px) oax(px) C enddo * Compone il comando ricevuto per stamparlo. C clear cmd C eval cmd='JPGMREF PGM(' + C %trim(pppnam) + C ') DEVELOP(' + C %trim(ppsvil) + C ') PGMATR(' C do pan px C if px=1 C eval cmd= %trim(cmd) + C %trim(pax(px)) C else C eval cmd= %trim(cmd) + C ' ' + C %trim(pax(px)) C endif C enddo C eval cmd= %trim(cmd) + C ') OBJATR(' C do oan px C if px=1 C eval cmd= %trim(cmd) + C %trim(oax(px)) C else C eval cmd= %trim(cmd) + C ' ' + C %trim(oax(px)) C endif C enddo C eval cmd= %trim(cmd) + C ')' * Stampa l'intestazione della prima pagina. C except int1 C do 10 ix 3 0 C if cmdel(ix)<>*blank C except int2 C endif C enddo C except int3 * Chiave di ricerca degli oggetti chiamati da un programma. C k1a klist * Usante. C kfld pnam(xx) * Chiave di riposizionamento. C k1b klist * Usante. C kfld pnam(xx) * Usato. C kfld fnam(xx) * Tipo usato. C kfld otyp(xx) * Definisce i campi chiave. C *like define whpnam k1pnam C *like define whfnam k1fnam C *like define whotyp k1otyp * Pulisce la lista di chiamata. C clear pnam C clear fnam C clear otyp C clear fnampgm * Pulisce e definisce la chiave ultimo dettaglio emesso. C clear whpnamprec C clear podobatprec C clear whfnamprec C clear whotypprec C *like define whpnam whpnamprec C *like define podobat podobatprec C *like define whfnam whfnamprec C *like define whotyp whotypprec * Assume il programma richiesto nella prima emissione. C clear xx C eval scaletta='0' C clear whpnam C movel(p) pppnam whfnam C movel(p) '*PGM' whotyp * Definisce la chiave di ricerca di attributo e descrizione. C kd1a klist C kfld whfnam10 C kfld whotyp8 * Cerca attributo e descrizione del programma richiesto. C clear jpgmrefds C kd1a chain jpgmrefd1 * Pulisce usante e tipo usante da emettere. C clear whpnamprt C clear podobatprt * Pulisce decodifica uso. C clear whfusgd * Numera la riga. C add 1 cnt * Emette il programma richiesto. C except det * Annota il programma di partenza nella prima posizione lista. C z-add 1 xx 3 0 C movel(p) pppnam pnam(1) C clear fnam(1) C clear otyp(1) C clear fnampgm(1) * Si posiziona all'inizio degli oggetti usati dal pgm di partenza. C k1a setll jpgmreff1 * Balla sulla lista di chiamata. C do *hival * Se l'indice è zero, abbandona. C if xx<=*zero C leave C endif * Legge il prossimo oggetto usato dal prgm corrente. C k1a reade jpgmreff1 * Se gli oggetti chiamati sono finiti. C if %eof * Pulisce la posizione corrente della lista di chiamata. C clear pnam(xx) C clear fnam(xx) C clear otyp(xx) C clear fnampgm(xx) * Arretra l'indice corrente sulla lista di chiamata. C eval xx=xx-1 * Se l'indice è zero, abbandona. C if xx<=*zero C leave C endif * Si riposiziona oltre l'ultima lettura per l'indice corrente. C k1b setgt jpgmreff1 * Ricicla. C iter * Se gli oggetti chiamati sono finiti. C endif * Chiave di scavalco gruppo. C k1s klist * Usante. C kfld whpnam * Usato. C kfld whfnam * Tipo usato. C kfld whotyp * Scavalca il gruppo di record uguali all'ultimo letto. C k1s setgt jpgmreff1 * Legge l'ultimo record del gruppo. C k1s readpe jpgmreff1 h2 C h2 return * Assume recursioni assenti. C setoff 515253 * Se corre un programma. C if whotyp = '*PGM' * Annota la recursione se l'usato corrente è presente in lista usanti. C whfnam lookup fnampgm 51 * Annota la recursione se l'usato corrente è presente in lista usati. C whfnam10 lookup pnam 52 * Se corre un programma. C endif * Se corre un programma e sono già stati sviluppati programmi. C if whotyp = '*PGM' C and ip < ip0 * Se il pgm è già stato sviluppato, annota recursione. C eval ips = ip C whfnam10 lookup pnamg(ips) 53 * Se corre un programma e sono già stati sviluppati programmi. C endif * Trascrive l'usato corrente nella lista di chiamata. C eval pnam(xx)=whpnam C eval fnam(xx)=whfnam C eval otyp(xx)=whotyp * Se corre un pgm. C if whotyp='*PGM' * Annota il pgm nella lista di chiamata solo programmi. C eval fnampgm(xx)=whfnam * Annota il pgm nell'elenco dei pgm già sviluppati. C if 1=1 * Assume scrittura in elenco necessaria. C setoff 50 * Se sono già stati sviluppati programmi * e il pgm è già annotato, toglie consenso. C if ip < ip0 C eval ips = ip C whfnam10 lookup pnamg(ips) 50 C endif * Se scrittura in elenco necessaria, * annota il pgm nell'elenco dei pgm già sviluppati. C if not *in50 C sub 1 ip C eval pnamg(ip)=whfnam10 C endif * Annota il pgm nell'elenco dei pgm già sviluppati. C endif * Se corre un pgm. C endif * Se lo sviluppo è tutti e l'usato corrente è valorizzato, * o se lo sviluppo è pgm e l'usato corrente è pgm. C if ppsvil='*ALL' C and fnam(xx)<>*blank C or ppsvil='*PGM' C and otyp(xx)='*PGM' * Se l'usato corrente è diverso dall'ultimo emesso. C if whpnam<>whpnamprec C or whfnam<>whfnamprec C or whotyp<>whotypprec * Definisce la chiave di ricerca di attributo del pgm. C kd1p klist C kfld whpnam C kfld kd1obtp C *like define odobtp kd1obtp C movel(p) '*PGM' kd1obtp * Cerca attributo del pgm. C clear jpgmrefds C kd1p chain jpgmrefd1 C**** if %found C movel(p) odobat podobat C *like define odobat podobat C**** endif * Definisce la chiave di ricerca di attributo e descrizione. C kd1 klist C kfld whfnam10 C kfld whotyp8 * Cerca attributo e descrizione dell'usato corrente. C clear jpgmrefds C kd1 chain jpgmrefd1 * Costruisce un attributo oggetto di comodo per la ricerca. C eval odobatw = odobat C *like define odobat odobatw C if odobat = *blank C eval odobatw = 'BLANK' C if whotyp = '*FILE' C and %lookup('BLANKF':oax:1:oan) > *zero C eval odobatw = 'BLANKF' C endif C endif * Se l'attributo oggetto corrente soddisfa la richiesta. C if oan = *zero C or oan > *zero C and %lookup(odobatw:oax:1:oan) C > *zero * Se l'attributo programma corrente soddisfa la richiesta. C if pan = *zero C or pan > *zero C and %lookup(%subst(podobat:1:2):pax:1:pan) C > *zero * Trascrive il grafo. C movel(p) sca(xx) scaletta C *like define sca scaletta * Trascrive usante e tipo usante nei campi di emissione. C movel(p) whpnam whpnamprt C movel(p) podobat podobatprt C *like define whpnam whpnamprt C *like define podobat podobatprt * Annota usante e tipo usante uguale a precedente. C if whpnam = whpnamprec C and podobat = podobatprec C movel(p) '"' whpnamprt C movel(p) '"' podobatprt C endif * Decodifica uso. C z-add 1 ux 3 0 C whfusg lookup usg(ux) 50 C n50 movel *all'?' whfusgd C 50 movel(p) usgd(ux) whfusgd C *like define usgd whfusgd * Numera la riga. C add 1 cnt * Se overflow, stampa l'intestazione delle pagine * successive alla prima. C if *inof C except int1 C except int3 C endif * Emette l'usato corrente. C except det * Annota l'ultimo emesso. C movel(p) whpnam whpnamprec C movel(p) podobat podobatprec C movel(p) whfnam whfnamprec C movel(p) whotyp whotypprec * Se l'attributo oggetto corrente soddisfa la richiesta. C endif * Se l'attributo programma corrente soddisfa la richiesta. C endif * Se l'usato corrente è diverso dall'ultimo emesso. C endif * Se corre recursione. C if *in51 or *in52 * Pulisce l'elemento corrente dalla lista di chiamata. C clear pnam(xx) C clear fnam(xx) C clear otyp(xx) C clear fnampgm(xx) * Arretra l'indice corrente sulla lista di chiamata. C eval xx=xx-1 * Se l'indice è zero, abbandona. C if xx<=*zero C leave C endif * Si riposiziona oltre l'ultima lettura per l'indice corrente. C k1b setgt jpgmreff1 * Ricicla. C iter * Se corre recursione. C endif * Se lo sviluppo è tutti e l'usato corrente è valorizzato, * o se lo sviluppo è pgm e l'usato corrente è pgm. C endif * Se l'elemento corrente è un pgm e non è già sviluppato. C if otyp(xx)='*PGM' and not *in53 * Incrementa l'indice corrente sulla lista di chiamata. C eval xx=xx+1 * Annota il programma nella posizione corrente della lista. C eval pnam(xx)=whfnam C clear fnam(xx) C clear otyp(xx) C clear fnampgm(xx) * Si posiziona all'inizio degli oggetti usati dal pgm corrente. C k1a setll jpgmreff1 * Se l'elemento corrente è un pgm. C endif * Balla sulla lista di chiamata. C enddo * Stampa fine. C except eop *--------------------------------------------------------------------------------------------- * Inizializza. C *inzsr begsr * Annota il numero di elementi dei pgm già sviluppati. C eval ip0=%elem(pnamg)+1 C eval ip =ip0 * Azzera il contatore righe. C clear cnt 6 0 * Time. C time time 6 0 C endsr *--------------------------------------------------------------------------------------------- * Intestazione. Oqsysprt e int1 2 1 O e int2 1 O cmdel(ix) O e int3 1 O *date y 120 O time +2 '0 : : ' O e int3 1 O 'Rcs' O 9 'Row' O 11 'L' O 'evel' O 23 'F' O 'ather' O 34 'A' O 'ttribute' O 45 'S' O 'on' O 57 'T' O 'ype' O 68 'A' O 'ttribute' O 78 'U' O 'sag' O 83 'T' O 'ext' O e int3 1 O tra * Dettaglio esplosione. O e det 1 O 51 'F' O 52 'P' O 53 'G' O cnt 3 O scaletta +1 O whpnamprt +1 O podobatprt +1 O whfnam +1 O whotyp +1 O odobat +1 O whfusgd O odobtx +1 * Fine stampa. O e eop 1 O '*** End of print ***' *--------------------------------------------------------------------------------------------- ** Scaletta di annidamento. 1 .2 ..3 ...4 ....5 .....6 ......7 .......8 ........9 ........10 11 12 .13 ..14 ...15 ....16 .....17 ......18 .......19 ........20 21 22 .23 ..24 ...25 ....26 .....27 ......28 .......29 ........20 31 32 .33 ..34 ...35 ....36 .....37 ......38 .......39 ........40 41 42 .43 ..44 ...45 ....46 .....47 ......48 .......49 ........50 51 52 .53 ..54 ...55 ....56 .....57 ......58 .......59 ........60 61 62 .63 ..64 ...65 ....66 .....67 ......68 .......69 ........70 71 72 .73 ..74 ...75 ....76 .....77 ......78 .......79 ........80 81 82 .83 ..84 ...85 ....86 .....87 ......88 .......89 ........90 91 92 .93 ..94 ...95 ....96 .....97 ......98 .......99 .......100 ** Decodifica uso. 00.... 01I... 02.O.. 03IO.. 04..U. 05I.U. 06.OU. 07IOU. 08...? 09I..? 10.O.? 11IO.? 12..U? 13I.U? 14.OU? 15IOU? //ENDINP /* Sorgente del Panel Group. */ //DATA FILE(JPGMREFP) FILETYPE(*SRC) ENDCHAR('//ENDINP') :PNLGRP. .*--------------------------------------------------------------------- :HELP NAME=CMD. :H3.Comando JPGMREF :H2.Espode un programma elencando i programmi chiamati e gli oggetti usati. :P.Il comando permette di vedere e stampare un elenco annidato dei programmi chiamati in cascata dal programma di partenza. :P.Con la scelta :HP1.DEVELOP(*ALL):EHP1. si ottiene la lista di tutti gli oggetti. Con la scelta :HP1.DEVELOP(*PGM):EHP1. si ottiene la lista dei soli programmi. :P.Si definisce :HP2.ambiente:EHP2. l'insieme delle librerie che stanno nella lista librerie del'utente in almeno un passo delle procedure che si vogliono documentare. Sia librerie :HP2.programmi:EHP2. che librerie :HP2.dati:EHP2. . A rigori vanno comprese anche le librerie indirizzate dalle override di qualunque genere. :P.Se la documentazione riguarda non si sa cosa all'interno del sistema, conviene predisporre l'ambiente *ALLUSR. :P.Il comando prende i dati dagli oggetti presenti nell'ambiente tramite i dati presenti in due file fisici che vanno riempiti preliminarmente. :PARML. :PT.JPGMREFD :PD.Contiene l'output di un comando DSPOBJD di tutte le librerie dell'ambiente. :P.Ad esempio, l'ambiente *ALLUSR si ottiene col seguente comando: :P.:HP2. DSPOBJD OBJ(*ALLUSR/*ALL) OBJTYPE(*ALL) OUTPUT(*OUTFILE) OUTFILE(UTX/JPGMREFD) :EHP2. :PT.JPGMREFF :PD.Contiene l'output di un comando DSPPGMREF di tutte le librerie dell'ambiente. :P.Ad esempio, l'ambiente *ALLUSR si ottiene col seguente comando: :P.:HP2. DSPPGMREF PGM(*ALLUSR/*ALL) OUTPUT(*OUTFILE) OBJTYPE(*ALL) OUTFILE(UTX/JPGMREFF) :EHP2. :EPARML. :P.Si elencano le intestazioni di colonna della stampa. :XMP. Rcs = Indicatori di recursione F = Figlio già presente in lista chiamata figli P = Figlio già presente in lista chiamata padri G = Figlio già sviluppato Row = Numero progressivo di riga Level = Grafismo rappresentativo del livello di annidamento Father = Padre ovvero nome del chiamante dell'oggetto indicato sulla stessa riga come figlio Attribute = Attributo del padre Son = Figlio ovvero nome del chiamato dalll'oggetto indicato sulla stessa riga come padre Type = Tipo oggetto del figlio Attribute = Attributo del figlio Usag = Uso del figlio all'interno del padre I = Input O = Output U = Update ? = Sconosciuto Text = Descrizione del figlio :EXMP. :NOTE.Il comando sopporta 100 livelli di annidamento ma si tratta di un limite arbitrario che può essere incrementato con una modesta manipolazione del sorgente RPGLE-JPGMREF2 (1: Variazione di una costante che determina il numero di elementi delle schiere di servizio della lista di chiamata 2: Schiera dei grafismi). :ENOTE. :EHELP. .*--------------------------------------------------------------------- :HELP name='CMD/pgm'. :H3.Program name (PGM) - Nome del programma :P.Nome del programma oggetto da cui parte l'esplosione. :P.Valori permessi: :PARML. :PT.nome-programma :PD.Il valore è obbligatorio. :EPARML. :EHELP. .*--------------------------------------------------------------------- :HELP name='CMD/develop'. :H3.Development type (DEVELOP) :P.Definisce il tipo di sviluppo da stampare. :P.Valori permessi: :PARML. :PT.:PK DEF.*ALL:EPK. :PD.Lista tutti gli oggetti incontrati durante lo sviluppo. :PT.*PGM :PD.Lista solo i programmi incontrati durante lo sviluppo. :EPARML. :EHELP. .*--------------------------------------------------------------------- :HELP name='CMD/pgmatr'. :H3.Program attribute (PGMATR) :P.Il campo permette di scegliere quelle righe di emissione nelle quali il padre, per ora sempre un programma, ha un attributo che inizia con le due lettere qui indicate. Così se si vogliono i programmi :HP2.RPG, RPGLE o RPG38:EHP2. si richiede :HP2.RP:EHP2. . :NOTE.La lista di iniziali di attributi è solo un suggerimento, visto il numero elevato di attributi possibili. :ENOTE. :P.Valori permessi: qualunque coppia di caratteri alfabetici. :PARML. :PT.:PK DEF.lista vuota:EPK.€ :PD.Elenca tutti i programmi. :PT.BA :PD.Elenca i programmi il cui attributo inizia con BA, quindi i vari Basic. :PT.CB :PD.Elenca i programmi il cui attributo inizia con CB, quindi i vari Cobol. :PT.CL :PD.Elenca i programmi il cui tipo inizia con CL, quindi i vari Control Language. :PT.DF :PD.Elenca i programmi il cui tipo inizia con DF, quindi i vari Dfu. :PT.QR :PD.Elenca i programmi il cui tipo inizia con QR, quindi i vari Query. :PT.RP :PD.Elenca i programmi il cui tipo inizia con RP, quindi i vari RPG (Report Program Generator). :EPARML. :EHELP. .*--------------------------------------------------------------------- :HELP name='CMD/objatr'. :H3.Object attribute (OBJATR) :P.Il campo permette di scegliere quelle righe di emissione nelle quali il figlio ha un attributo che coincide con quello qui indicato. Così se si vogliono i programmi :HP2.RPGLE:EHP2. si richiede :HP2.RPGLE:EHP2. . :NOTE.La lista di attributi è solo un suggerimento, visto il numero elevato di attributi possibili. :ENOTE. :P.Valori permessi: qualunque gruppo di caratteri alfabetici. :PARML. :PT.:PK DEF.lista vuota:EPK.€ :PD.Elenca tutti gli oggetti. :PT.PRTF :PD.Elenca gli oggetti Printer File. :PT.DSPF :PD.Elenca gli oggetti Display File. :PT.PF :PD.Elenca gli oggetti Physical File. :PT.LF :PD.Elenca gli oggetti Logical File. :PT.RPG :PD.Elenca gli oggetti Report Program Generator. :PT.CLP :PD.Elenca gli oggetti Control Language Program. :PT.RPGLE :PD.Elenca gli oggetti Report Program Generator Integrated Language Environment. :PT.CLLE :PD.Elenca gli oggetti Control Language Integrated Language Environment. :PT.BLANK :PD.Elenca gli oggetti con Attributo in bianco. :PT.BLANKF :PD.Elenca gli oggetti con Attributo in bianco ma Tipo oggetto *FILE. :PT.TAPF :PD.Elenca gli oggetti Tape File. :EPARML. :EHELP. .*--------------------------------------------------------------------- :EPNLGRP. //ENDINP //ENDBCHJOB