//BCHJOB JOB(JREF) JOBD(QBATCH) OUTQ(QPRINT) ENDSEV(60) + LOG(4 00 *SECLVL) MSGQ(*USRPRF) /* SE L'USO DELLA JOB DESCRIPTION "QBATCH" TI E' IMPEDITO, */ /* UTILIZZANE UNA DIVERSA. */ /* From System: "IUBICSVI" */ /* From Library: "UTI" */ /* Unload Time: 2008-09-17 18:02 */ /********* INIZIO ISTRUZIONI *******************************************/ /* LE SUCCESSIVE ISTRUZIONI PERMETTONO DI RICARICARE I SORGENTI. */ /* 1) DA UN VIDEO COMANDI DELL'AS400 RICEVENTE */ /* CREARE UN FILE SORGENTE DI LUNGHEZZA RECORD 112: */ /* CRTSRCPF FILE(NERONI2/STRINGHE) RCDLEN(112) */ /* 2) SPOSTARE IL FILE "JREF.txt" NELL'INDIRIZZARIO */ /* DI UN PC CONNESSO IN RETE CON L'AS400 RICEVENTE */ /* (AD ES.: "c:\"). */ /* 3) DAL VIDEO COMANDI DEL PC CHIAMARE FTP: */ /* ftp nomeas400 */ /* 4) DIGITARE UTENTE E PASSWORD. */ /* 5) ESEGUIRE IL COMANDO DI COPIA DA FILE PC A MEMBRO AS400: */ /* put "c:\JREF.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JREF.mbr" */ /* 6) ABBANDONARE FTP: */ /* quit */ /* 7) DA UN VIDEO COMANDI DELL'AS400 RICEVENTE */ /* ESEGUIRE LA STRINGA COPIATA NEL MEMBRO SORGENTE: */ /* SBMDBJOB FILE(NERONI2/STRINGHE) MBR(JREF) JOBQ(QBATCH) */ /* LE SUCCESSIVE ISTRUZIONI PERMETTONO DI CREARE L'UTILITY. */ /* 8) DA UN VIDEO COMANDI DELL'AS400 RICEVENTE */ /* ESEGUIRE LA STRINGA O LE STRINGHE SORGENTE DI TIPO SEU "CL" */ /* (IL CUI NOME TERMINA SEMPRE CON ".") */ /* PRESENTI NEL FILE RICARICATO "NERONI2/JREF" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JREF) MBR(JREF.) JOBQ(QBATCH) */ /********* FINE ISTRUZIONI *********************************************/ /* Crea la libreria. */ MKDIR DIR('/qsys.lib/NERONI2.lib') CHGLIB LIB(NERONI2) TEXT('Utilita'' CN.') /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP NERONI2 QGPL) /* Crea il file sorgente. */ DLTF FILE(NERONI2/JREF) CRTSRCPF FILE(NERONI2/JREF) RCDLEN(112) + TEXT('Reference. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JREFDBF.) TOFILE(NERONI2/JREF) + TOMBR(JREFDBF.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JREF) MBR(JREFDBF.) + SRCTYPE(CL) + TEXT('Reference Database. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JREFDBF.F) TOFILE(NERONI2/JREF) + TOMBR(JREFDBF.F) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JREF) MBR(JREFDBF.F) + SRCTYPE(CL) + TEXT('Reference Database. Fill database') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JREFEXP.) TOFILE(NERONI2/JREF) + TOMBR(JREFEXP.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JREF) MBR(JREFEXP.) + SRCTYPE(CL) + TEXT('Reference Explode. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JREFIMP.) TOFILE(NERONI2/JREF) + TOMBR(JREFIMP.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JREF) MBR(JREFIMP.) + SRCTYPE(CL) + TEXT('Reference Implode. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JREFEXP1) TOFILE(NERONI2/JREF) + TOMBR(JREFEXP1) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JREF) MBR(JREFEXP1) + SRCTYPE(CLLE) + TEXT('Reference Explode. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JREFIMP1) TOFILE(NERONI2/JREF) + TOMBR(JREFIMP1) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JREF) MBR(JREFIMP1) + SRCTYPE(CLLE) + TEXT('Reference Implode. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JREFEXO) TOFILE(NERONI2/JREF) + TOMBR(JREFEXO) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JREF) MBR(JREFEXO) + SRCTYPE(CMD) + TEXT('Reference Explode. Cmd PROVE') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JREFEXP) TOFILE(NERONI2/JREF) + TOMBR(JREFEXP) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JREF) MBR(JREFEXP) + SRCTYPE(CMD) + TEXT('Reference Explode. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JREFIMP) TOFILE(NERONI2/JREF) + TOMBR(JREFIMP) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JREF) MBR(JREFIMP) + SRCTYPE(CMD) + TEXT('Reference Implode. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JREFDBFD1) TOFILE(NERONI2/JREF) + TOMBR(JREFDBFD1) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JREF) MBR(JREFDBFD1) + SRCTYPE(LF) + TEXT('Reference Database. Outfile Dspobjd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JREFDBFF1) TOFILE(NERONI2/JREF) + TOMBR(JREFDBFF1) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JREF) MBR(JREFDBFF1) + SRCTYPE(LF) + TEXT('Reference Database. Pgmref') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JREFDBFF2) TOFILE(NERONI2/JREF) + TOMBR(JREFDBFF2) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JREF) MBR(JREFDBFF2) + SRCTYPE(LF) + TEXT('Reference Database. Pgmref') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JREFDBFD) TOFILE(NERONI2/JREF) + TOMBR(JREFDBFD) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JREF) MBR(JREFDBFD) + SRCTYPE(PF) + TEXT('Reference Database. Outfile Dspobjd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JREFDBFF) TOFILE(NERONI2/JREF) + TOMBR(JREFDBFF) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JREF) MBR(JREFDBFF) + SRCTYPE(PF) + TEXT('Reference Database. Pgmref') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JREFDBFO) TOFILE(NERONI2/JREF) + TOMBR(JREFDBFO) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JREF) MBR(JREFDBFO) + SRCTYPE(PF) + TEXT('Reference Database. Outfile Dsppgmref') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JREFDBFR) TOFILE(NERONI2/JREF) + TOMBR(JREFDBFR) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JREF) MBR(JREFDBFR) + SRCTYPE(PF) + TEXT('Reference Database. Outfile Dspdbr') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JREFUSG) TOFILE(NERONI2/JREF) + TOMBR(JREFUSG) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JREF) MBR(JREFUSG) + SRCTYPE(PF) + TEXT('Usi oggetti.') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JREFEXPP) TOFILE(NERONI2/JREF) + TOMBR(JREFEXPP) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JREF) MBR(JREFEXPP) + SRCTYPE(PNLGRP) + TEXT('Reference Explode. Help') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JREFDBFX1) TOFILE(NERONI2/JREF) + TOMBR(JREFDBFX1) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JREF) MBR(JREFDBFX1) + SRCTYPE(RPGLE) + TEXT('Reference Database. Translate Dsppgmref') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JREFDBFX2) TOFILE(NERONI2/JREF) + TOMBR(JREFDBFX2) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JREF) MBR(JREFDBFX2) + SRCTYPE(RPGLE) + TEXT('Reference Database. Translate Dspdbr') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JREFEXP2) TOFILE(NERONI2/JREF) + TOMBR(JREFEXP2) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JREF) MBR(JREFEXP2) + SRCTYPE(RPGLE) + TEXT('Reference Explode. Exe') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JREFIMP2) TOFILE(NERONI2/JREF) + TOMBR(JREFIMP2) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JREF) MBR(JREFIMP2) + SRCTYPE(RPGLE) + TEXT('Reference Implode. Exe') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(A.LEGGIMI) TOFILE(NERONI2/JREF) + TOMBR(A.LEGGIMI) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JREF) MBR(A.LEGGIMI) + SRCTYPE(TXT) + TEXT('Istruzioni') /*---------------------------------------------------------------------*/ //DATA FILE(JREFDBF.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JREFDBF.) JOBD(QBATCH) OUTQ(QPRINTS) ENDSEV(60) LOG(4 + 00 *SECLVL) MSGQ(*USRPRF) /* Claudio Neroni 26/04/2008 Creato. */ /* JREFDBF */ /* Reference Database. */ /* Prerequisiti: nessuno */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella i logici preesistenti. */ DLTF FILE(NERONI2/JREFDBFD1) DLTF FILE(NERONI2/JREFDBFF1) DLTF FILE(NERONI2/JREFDBFF2) /* Cancella i fisici preesistenti. */ DLTF FILE(NERONI2/JREFDBFD) DLTF FILE(NERONI2/JREFDBFF) DLTF FILE(NERONI2/JREFDBFO) DLTF FILE(NERONI2/JREFDBFR) /* Cancella i programmi preesistenti. */ DLTPGM PGM(NERONI2/JREFDBFX1) DLTPGM PGM(NERONI2/JREFDBFX2) /* Crea i file fisici. */ CRTPF FILE(NERONI2/JREFDBFD) SRCFILE(JREF) SIZE(*NOMAX) CRTPF FILE(NERONI2/JREFDBFF) SRCFILE(JREF) SIZE(*NOMAX) CRTPF FILE(NERONI2/JREFDBFO) SRCFILE(JREF) SIZE(*NOMAX) CRTPF FILE(NERONI2/JREFDBFR) SRCFILE(JREF) SIZE(*NOMAX) /* Crea i file logici. */ CRTLF FILE(NERONI2/JREFDBFD1) SRCFILE(JREF) CRTLF FILE(NERONI2/JREFDBFF1) SRCFILE(JREF) CRTLF FILE(NERONI2/JREFDBFF2) SRCFILE(JREF) /* Crea i programmi. */ CRTBNDRPG PGM(NERONI2/JREFDBFX1) SRCFILE(JREF) DBGVIEW(*LIST) CRTBNDRPG PGM(NERONI2/JREFDBFX2) SRCFILE(JREF) DBGVIEW(*LIST) //ENDBCHJOB //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JREFDBF.F) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JREFDBF.F) JOBD(QBATCH) JOBQ(QS36EVOKE) ENDSEV(60) + LOG(4 00 *SECLVL) MSGQ(*USRPRF) /* */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) JGOTO LABEL(OLTRE) JLABEL LABEL(OLTRE) /* Estrae il Display Program Reference. */ DSPPGMREF PGM(NERONI2/*ALL) OUTPUT(*OUTFILE) OBJTYPE(*ALL) + OUTFILE(NERONI2/JREFDBFO) CHGPF FILE(NERONI2/JREFDBFO) SIZE(*NOMAX) CLRPFM FILE(NERONI2/JREFDBFO) DSPPGMREF PGM(*ALLUSR/*ALL) OUTPUT(*OUTFILE) OBJTYPE(*ALL) + OUTFILE(NERONI2/JREFDBFO) /* Estrae il Display Object Description. */ DSPOBJD OBJ(NERONI2/*ALL) OBJTYPE(*ALL) OUTPUT(*OUTFILE) + OUTFILE(NERONI2/JREFDBFD) CHGPF FILE(NERONI2/JREFDBFD) SIZE(*NOMAX) CLRPFM FILE(NERONI2/JREFDBFD) DSPOBJD OBJ(*ALL/*ALL) OBJTYPE(*ALL) OUTPUT(*OUTFILE) + OUTFILE(NERONI2/JREFDBFD) /* Estrae il Display Data Base Relation. */ DSPDBR FILE(NERONI2/*ALL) OUTPUT(*OUTFILE) OUTFILE(NERONI2/JREFDBFR) CHGPF FILE(NERONI2/JREFDBFR) SIZE(*NOMAX) CLRPFM FILE(NERONI2/JREFDBFR) DSPDBR FILE(*ALLUSR/*ALL) OUTPUT(*OUTFILE) OUTFILE(NERONI2/JREFDBFR) /* Riunisce in un unico archivio i dati estratti. */ CLRPFM FILE(NERONI2/JREFDBFF) CALL PGM(JREFDBFX1) CALL PGM(JREFDBFX2) /* Pulisce i file contenenti i dati estratti. */ JGOTO LABEL(OLTRE) /*CLRPFM FILE(NERONI2/JREFDBFO)*/ CLRPFM FILE(NERONI2/JREFDBFD) CLRPFM FILE(NERONI2/JREFDBFR) JLABEL LABEL(OLTRE) //ENDBCHJOB //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JREFEXP.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JREFEXP.) JOBD(QBATCH) OUTQ(QPRINTS) ENDSEV(60) LOG(4 + 00 *SECLVL) MSGQ(*USRPRF) /* Claudio Neroni 26/04/2008 Creato. */ /* JREFEXP */ /* Reference Explode. */ /* Prerequisiti: JRSNMSG */ /* Prerequisiti: Creazione data base eseguito con la stringa JREFDB */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella gli oggetti preesistenti. */ DLTCMD CMD(NERONI2/JREFEXP) DLTPNLGRP PNLGRP(NERONI2/JREFEXPP) DLTPGM PGM(NERONI2/JREFEXP1) DLTPGM PGM(NERONI2/JREFEXP2) /* Crea gli oggetti. */ CRTBNDCL PGM(NERONI2/JREFEXP1) SRCFILE(JREF) DBGVIEW(*LIST) CRTBNDRPG PGM(NERONI2/JREFEXP2) SRCFILE(JREF) DBGVIEW(*LIST) CRTPNLGRP PNLGRP(NERONI2/JREFEXPP) SRCFILE(JREF) CRTCMD CMD(NERONI2/JREFEXP) PGM(JREFEXP1) SRCFILE(JREF) PRDLIB(NERONI2) + HLPPNLGRP(JREFEXPP) HLPID(CMD) //ENDBCHJOB //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JREFIMP.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JREFIMP.) JOBD(QBATCH) OUTQ(QPRINTS) ENDSEV(60) LOG(4 + 00 *SECLVL) MSGQ(*USRPRF) /* Claudio Neroni 26/04/2008 Creato. */ /* JREFIMP */ /* Reference Implode. */ /* Prerequisiti: JRSNMSG */ /* Prerequisiti: Creazione data base eseguito con la stringa JREFDB */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella gli oggetti preesistenti. */ DLTCMD CMD(NERONI2/JREFIMP) DLTPNLGRP PNLGRP(NERONI2/JREFIMPP) DLTPGM PGM(NERONI2/JREFIMP1) DLTPGM PGM(NERONI2/JREFIMP2) /* Crea gli oggetti. */ CRTBNDCL PGM(NERONI2/JREFIMP1) SRCFILE(JREF) DBGVIEW(*LIST) CRTBNDRPG PGM(NERONI2/JREFIMP2) SRCFILE(JREF) DBGVIEW(*LIST) CRTPNLGRP PNLGRP(NERONI2/JREFIMPP) SRCFILE(JREF) CRTCMD CMD(NERONI2/JREFIMP) PGM(JREFIMP1) SRCFILE(JREF) PRDLIB(NERONI2) + HLPPNLGRP(JREFIMPP) HLPID(CMD) //ENDBCHJOB //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JREFEXP1) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Reference Explode. Cpp */ /* Claudio Neroni 15/04/2008 Creato. */ /* */ PGM PARM(&OBJ &OBJTYPE &SVIL &PGMATR &OBJATR + &MAXLVL &INPUT &OUTPUT &UPDATE &UNKNOWN + &DBREL &NOUSE) /* Riceve Nome dell'oggetto da esplodere. */ DCL VAR(&OBJ) TYPE(*CHAR) LEN(10) /* Riceve Tipo dell'oggetto da esplodere. */ DCL VAR(&OBJTYPE) TYPE(*CHAR) LEN(8) /* Riceve Tipo di sviluppo da eseguire. */ DCL VAR(&SVIL) TYPE(*CHAR) LEN(10) /* Riceve Param Attributi programma da considerare 2bin + 20el*2char. */ DCL VAR(&PGMATR) TYPE(*CHAR) LEN(42) /* Riceve Param Attributi oggetto da considerare 2bin + 50el*10char. */ DCL VAR(&OBJATR) TYPE(*CHAR) LEN(502) /* Riceve Nome sistema. */ DCL VAR(&SYSNAME) TYPE(*CHAR) LEN(8) /* Riceve Massimo livello. */ DCL VAR(&MAXLVL) TYPE(*DEC) LEN(3 0) /* Riceve Uso Input. */ DCL VAR(&INPUT) TYPE(*LGL) /* Riceve Uso Output. */ DCL VAR(&OUTPUT) TYPE(*LGL) /* Riceve Uso Update. */ DCL VAR(&UPDATE) TYPE(*LGL) /* Riceve Uso Sconosciuto. */ DCL VAR(&UNKNOWN) TYPE(*LGL) /* Riceve Uso Relazione di database. */ DCL VAR(&DBREL) TYPE(*LGL) /* Riceve Uso Nessuno. */ DCL VAR(&NOUSE) TYPE(*LGL) /* Prenotazione del CPF0001. */ DCL VAR(&CPF0001) TYPE(*LGL) /* Intercetta gli errori. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Recupera Nome sistema. */ RTVNETA SYSNAME(&SYSNAME) /* Esegue lo sviluppo. */ OVRPRTF FILE(QSYSPRT) USRDTA(&OBJ) SPLFNAME(JREFEXP) CALL PGM(JREFEXP2) PARM(&OBJ &OBJTYPE &SVIL + &PGMATR &OBJATR &SYSNAME &MAXLVL &INPUT + &OUTPUT &UPDATE &UNKNOWN &DBREL &NOUSE) DLTOVR FILE(QSYSPRT) /* Visualizza la stampa. */ DSPSPLF FILE(JREFEXP) 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(JREFEXP) + 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 //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JREFIMP1) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Reference Implode. Cpp */ /* Claudio Neroni 15/04/2008 Creato. */ /* */ PGM PARM(&OBJ &OBJTYPE &SVIL &PGMATR &OBJATR + &MAXLVL &INPUT &OUTPUT &UPDATE &UNKNOWN + &DBREL &NOUSE) /* Riceve Nome dell'oggetto da implodere. */ DCL VAR(&OBJ) TYPE(*CHAR) LEN(10) /* Riceve Tipo dell'oggetto da implodere. */ DCL VAR(&OBJTYPE) TYPE(*CHAR) LEN(10) /* Riceve Tipo di sviluppo da eseguire. */ DCL VAR(&SVIL) TYPE(*CHAR) LEN(10) /* Riceve Param Attributi programma da considerare 2bin + 20el*2char. */ DCL VAR(&PGMATR) TYPE(*CHAR) LEN(42) /* Riceve Param Attributi oggetto da considerare 2bin + 50el*10char. */ DCL VAR(&OBJATR) TYPE(*CHAR) LEN(502) /* Riceve Nome sistema. */ DCL VAR(&SYSNAME) TYPE(*CHAR) LEN(8) /* Riceve Massimo livello. */ DCL VAR(&MAXLVL) TYPE(*DEC) LEN(3 0) /* Riceve Uso Input. */ DCL VAR(&INPUT) TYPE(*LGL) /* Riceve Uso Output. */ DCL VAR(&OUTPUT) TYPE(*LGL) /* Riceve Uso Update. */ DCL VAR(&UPDATE) TYPE(*LGL) /* Riceve Uso Sconosciuto. */ DCL VAR(&UNKNOWN) TYPE(*LGL) /* Riceve Uso Relazione di database. */ DCL VAR(&DBREL) TYPE(*LGL) /* Riceve Uso Nessuno. */ DCL VAR(&NOUSE) TYPE(*LGL) /* Prenotazione del CPF0001. */ DCL VAR(&CPF0001) TYPE(*LGL) /* Intercetta gli errori. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Recupera Nome sistema. */ RTVNETA SYSNAME(&SYSNAME) /* Esegue lo sviluppo. */ OVRPRTF FILE(QSYSPRT) USRDTA(&OBJ) SPLFNAME(JREFIMP) CALL PGM(JREFIMP2) PARM(&OBJ &OBJTYPE &SVIL + &PGMATR &OBJATR &SYSNAME &MAXLVL &INPUT + &OUTPUT &UPDATE &UNKNOWN &DBREL &NOUSE) DLTOVR FILE(QSYSPRT) /* Visualizza la stampa. */ DSPSPLF FILE(JREFIMP) 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 //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JREFEXO) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Reference Explode. Cmd */ /* Claudio Neroni 15-04-2008 Creato. */ /* */ CMD PROMPT('Program reference Explode') PARM KWD(OBJ) TYPE(*NAME) MIN(1) PROMPT('Object + name') PARM KWD(OBJTYPE) TYPE(*CHAR) LEN(8) RSTD(*YES) + DFT(*PGM) VALUES(*PGM *DTAARA *FILE + *SRVPGM *ALL) PROMPT('Object type') 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') PARM KWD(MAXLVL) TYPE(*DEC) LEN(3 0) DFT(100) + RANGE(1 100) PROMPT('Max level') PARM KWD(INPUT) TYPE(*LGL) RSTD(*YES) DFT(*YES) + SPCVAL((*YES '1') (*NO '0')) + PROMPT('Input use') PARM KWD(OUTPUT) TYPE(*LGL) RSTD(*YES) DFT(*YES) + SPCVAL((*YES '1') (*NO '0')) + PROMPT('Output use') PARM KWD(UPDATE) TYPE(*LGL) RSTD(*YES) DFT(*YES) + SPCVAL((*YES '1') (*NO '0')) + PROMPT('Update use') PARM KWD(UNKNOWN) TYPE(*LGL) RSTD(*YES) DFT(*YES) + SPCVAL((*YES '1') (*NO '0')) + PROMPT('Unknown use') PARM KWD(DBREL) TYPE(*LGL) RSTD(*YES) DFT(*YES) + SPCVAL((*YES '1') (*NO '0')) + PROMPT('Database relation use') PARM KWD(NOUSE) TYPE(*LGL) RSTD(*YES) DFT(*YES) + SPCVAL((*YES '1') (*NO '0')) PROMPT('No use') PARM KWD(USAGE) TYPE(*CHAR) LEN(8) RSTD(*YES) + DFT(*ALL) VALUES(*INPUT *OUTPUT *UPDATE + *UNKNOWN *DBREL *NOUSE) SNGVAL((*ALL)) + MAX(6) PROMPT('Usage') PARM KWD(USAG2) TYPE(USAG2) PROMPT('Usage') USAG2: ELEM TYPE(*CHAR) LEN(8) RSTD(*YES) DFT(*INPUT) + VALUES(*INPUT *) ELEM TYPE(*CHAR) LEN(8) RSTD(*YES) DFT(*OUTPUT) + VALUES(*OUTPUT *) ELEM TYPE(*CHAR) LEN(8) RSTD(*YES) DFT(*UPDATE) + VALUES(*UPDATE *) ELEM TYPE(*CHAR) LEN(8) RSTD(*YES) DFT(*UNKNOWN) + VALUES(*UNKNOWN *) ELEM TYPE(*CHAR) LEN(8) RSTD(*YES) DFT(*DBREL) + VALUES(*DBREL *) ELEM TYPE(*CHAR) LEN(8) RSTD(*YES) DFT(*NOUSE) + VALUES(*NOUSE *) //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JREFEXP) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Reference Explode. Cmd */ /* Claudio Neroni 15-04-2008 Creato. */ /* */ CMD PROMPT('Program reference Explode') PARM KWD(OBJ) TYPE(*NAME) MIN(1) PROMPT('Object + name') PARM KWD(OBJTYPE) TYPE(*CHAR) LEN(8) RSTD(*YES) + DFT(*PGM) VALUES(*PGM *DTAARA *FILE + *SRVPGM *ALL) PROMPT('Object type') 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') PARM KWD(MAXLVL) TYPE(*DEC) LEN(3 0) DFT(100) + RANGE(1 100) PROMPT('Max level') PARM KWD(INPUT) TYPE(*LGL) RSTD(*YES) DFT(*YES) + SPCVAL((*YES '1') (*NO '0')) + PROMPT('Input use') PARM KWD(OUTPUT) TYPE(*LGL) RSTD(*YES) DFT(*YES) + SPCVAL((*YES '1') (*NO '0')) + PROMPT('Output use') PARM KWD(UPDATE) TYPE(*LGL) RSTD(*YES) DFT(*YES) + SPCVAL((*YES '1') (*NO '0')) + PROMPT('Update use') PARM KWD(UNKNOWN) TYPE(*LGL) RSTD(*YES) DFT(*YES) + SPCVAL((*YES '1') (*NO '0')) + PROMPT('Unknown use') PARM KWD(DBREL) TYPE(*LGL) RSTD(*YES) DFT(*YES) + SPCVAL((*YES '1') (*NO '0')) + PROMPT('Database relation use') PARM KWD(NOUSE) TYPE(*LGL) RSTD(*YES) DFT(*YES) + SPCVAL((*YES '1') (*NO '0')) PROMPT('No use') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JREFIMP) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Reference Implode. Cmd */ /* Claudio Neroni 15-04-2008 Creato. */ /* */ CMD PROMPT('Program reference Implode') PARM KWD(OBJ) TYPE(*NAME) MIN(1) PROMPT('Object + name') PARM KWD(OBJTYPE) TYPE(*CHAR) LEN(10) RSTD(*YES) + DFT(*PGM) VALUES(*PGM *DTAARA *FILE + *SRVPGM *ALL) PROMPT('Object type') 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') PARM KWD(MAXLVL) TYPE(*DEC) LEN(3 0) DFT(100) + RANGE(1 100) PROMPT('Max level') PARM KWD(INPUT) TYPE(*LGL) RSTD(*YES) DFT(*YES) + SPCVAL((*YES '1') (*NO '0')) + PROMPT('Input use') PARM KWD(OUTPUT) TYPE(*LGL) RSTD(*YES) DFT(*YES) + SPCVAL((*YES '1') (*NO '0')) + PROMPT('Output use') PARM KWD(UPDATE) TYPE(*LGL) RSTD(*YES) DFT(*YES) + SPCVAL((*YES '1') (*NO '0')) + PROMPT('Update use') PARM KWD(UNKNOWN) TYPE(*LGL) RSTD(*YES) DFT(*YES) + SPCVAL((*YES '1') (*NO '0')) + PROMPT('Unknown use') PARM KWD(DBREL) TYPE(*LGL) RSTD(*YES) DFT(*YES) + SPCVAL((*YES '1') (*NO '0')) + PROMPT('Database relation use') PARM KWD(NOUSE) TYPE(*LGL) RSTD(*YES) DFT(*YES) + SPCVAL((*YES '1') (*NO '0')) PROMPT('No use') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JREFDBFD1) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Claudio Neroni 14-04-2008 Creato. * File di emissione di DSPOBJD. * Key oggetto, tipo, libreria. A UNIQUE A R QLIDOBJD A PFILE(JREFDBFD) A K ODOBNM A K ODOBTP A K ODLBNM //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JREFDBFF1) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Claudio Neroni 14-04-2008 Creato. * Trascrizione del File di emissione di DSPPGMREF. * Key padre, tipo padre, figlio, tipo figlio. A R REF A PFILE(JREFDBFF) A K REFPAN A K REFPAT A K REFFIN A K REFFIT //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JREFDBFF2) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Claudio Neroni 14-04-2008 Creato. * Trascrizione del File di emissione di DSPPGMREF. * Key figlio, tipo figlio, padre, tipo padre. A R REF A PFILE(JREFDBFF) A K REFFIN A K REFFIT A K REFPAN A K REFPAT //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JREFDBFD) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Claudio Neroni 14-04-2008 Creato. * File di emissione di DSPOBJD. A R QLIDOBJD FORMAT(QADSPOBJ) //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JREFDBFF) FILETYPE(*SRC) ENDCHAR('//ENDSRC') A R REF A TEXT('Reference. Pgmref') A REFPAN 10 A COLHDG('Nome' 'padre') A REFPAT 8 A COLHDG('Tipo' 'padre') A REFPAA 10 A COLHDG('Attributo' 'padre') A REFPAL 10 A COLHDG('Libreria' 'padre') A REFPAX 50 A COLHDG('Testo' 'padre') A REFFIN 10 A COLHDG('Nome' 'figlio') A REFFIT 8 A COLHDG('Tipo' 'figlio') A REFFIA 10 A COLHDG('Attributo' 'figlio') A REFFIL 10 A COLHDG('Libreria' 'figlio') A REFFIX 50 A COLHDG('Testo' 'figlio') A REFUSO 2 0 A COLHDG('Uso') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JREFDBFO) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Claudio Neroni 14-04-2008 Creato. * File di emissione di DSPPGMREF. A R QWHDRPPR FORMAT(QADSPPGM) //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JREFDBFR) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Claudio Neroni 18-06-2008 Creato. * File di emissione di DSPDBR. A R QWHDRDBR FORMAT(QADSPDBR) //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JREFUSG) FILETYPE(*SRC) ENDCHAR('//ENDSRC') A UNIQUE A R USG A TEXT('Usi oggetti') A USGC 2 0 A COLHDG('Codice' 'uso') A USGD 4 A COLHDG('Descrizione' 'uso') A K USGC //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JREFEXPP) FILETYPE(*SRC) ENDCHAR('//ENDSRC') :PNLGRP. .*--------------------------------------------------------------------- :HELP NAME=CMD. :H3.Comando JREFEXP :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 tre file fisici che vanno riempiti preliminarmente. :PARML. :PT.JREFD :PD.Contiene l'output di un comando DSPOBJD di tutti gli oggetti presenti nelle 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(UTI/JREFD) :EHP2. :PT.JREFO :PD.Contiene l'output di un comando DSPPGMREF di tutti gli oggetti presenti nelle 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(UTI/JREFO) :EHP2. :P.Il file JREFO non viene usato direttamente ma viene trascritto nel file JREFF tramite il pgm JREFX. :PT.JREFF :PD.Contiene la trascrizione normalizzata del file JREFO, ottenuta tramite il seguente comando: :P.:HP2. CALL PGM(JREFX) :EHP2. :EPARML. :P.Si elencano le intestazioni di colonna della stampa. :XMP. Re = Indicatori di recursione F = Figlio già presente in lista chiamata 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 Type = Tipo oggetto del padre Attrib = Attributo del padre Son = Figlio ovvero nome del chiamato dall'oggetto indicato sulla stessa riga come padre Type = Tipo oggetto del figlio Attrib = Attributo del figlio Usag = Uso del figlio all'interno del padre I = Input O = Output U = Update ? = Sconosciuto dbr = relazione proveniente dal Display Data Base Relation 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-JREFEXP2 (1: Variazione di una costante che determina il numero di elementi delle schiere di servizio della lista di chiamata 2: Schiera dei grafismi) e del sorgente CMD-JREFEXP (1: Aumento del range di valori per la keyword MAXLVL e del default) :ENOTE. :EHELP. .*--------------------------------------------------------------------- :HELP name='CMD/obj'. :H3.Object name (OBJ) - Nome dell'oggetto :P.Nome dell'oggetto da cui parte l'esplosione. :P.Valori permessi: :PARML. :PT.nome-oggetto :PD.Il valore è obbligatorio. :EPARML. :EHELP. .*--------------------------------------------------------------------- :HELP name='CMD/objtype'. :H3.Object type (OBJTYPE) - Tipo dell'oggetto :P.Tipo dell'oggetto da cui parte l'esplosione. :P.Valori permessi: :PARML. :PT.:PK DEF.*PGM:EPK. :PD.Programma. :PT.*DTAARA :PD.Area dati. :PT.*FILE :PD.File. :PT.*SRVPGM :PD.Programma di servizio. :PT.*ALL :PD.Tutti i tipi di oggetto. :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. .*--------------------------------------------------------------------- :HELP name='CMD/maxlvl'. :H3.Max level (MAXLVL) - Massimo livello :P.Numero del massimo livello da raggiungere nell'esplosione. :P.Valori permessi: :PARML. :PT.:PK DEF.100:EPK. :PD.Raggiunge il massimo livello permesso dal programma. :PT.Da 1 a 100 :PD.Raggiunge il livello richiesto come se gli oggetti al livello massimo richiesto non contenessero chiamate ad altri oggetti. :EPARML. :EHELP. .*--------------------------------------------------------------------- :EPNLGRP. //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JREFDBFX1) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /TITLE Reference. Translate Dsppgmref * Claudio Neroni 10-06-2008 Creato. *--------------------------------------------------------------------------------------------- * Trascrive il display program reference in un file meglio strutturato. *--------------------------------------------------------------------------------------------- H decedit('0,') datfmt(*dmy/) datedit(*dmy/) *--------------------------------------------------------------------------------------------- * File di emissione di DSPPGMREF. Fjrefdbfo ip e disk * Trascrizione di DSPPGMREF. Fjrefdbff o e disk * File di emissione di DSPOBJD. Fjrefdbfd1 if e k disk *--------------------------------------------------------------------------------------------- C do C if whlnam = 'QSYS' C leave C endif C if whfnam = *blank C leave C endif C clear ref C movel(p) whpnam refpan C movel(p) whlib refpal C select C when whspkg = 'M' C movel(p) '*MODULE' refpat C when whspkg = 'V' C movel(p) '*SRVPGM' refpat C when whspkg = 'S' C movel(p) '*SQLPKG' refpat C when whspkg = 'P' C movel(p) '*PGM' refpat C other C leave C endsl C movel(p) whfnam reffin C movel(p) whotyp reffit C movel(p) whlnam reffil C movel(p) whfusg refuso C kpa3 klist C kfld refpan C kfld refpat C kfld refpal C kpa2 klist C kfld refpan C kfld refpat C kpa3 chain jrefdbfd1 C if %found C movel(p) odobat refpaa C movel(p) odobtx refpax C else C kpa2 chain jrefdbfd1 C if %found C movel(p) odobat refpaa C movel(p) odobtx refpax C endif C endif C kfi3 klist C kfld reffin C kfld reffit C kfld reffil C kfi2 klist C kfld reffin C kfld reffit C kfi3 chain jrefdbfd1 C if %found C movel(p) odobat reffia C movel(p) odobtx reffix C else C kfi2 chain jrefdbfd1 C if %found C movel(p) odobat reffia C movel(p) odobtx reffix C endif C endif C write ref C enddo *--------------------------------------------------------------------------------------------- //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JREFDBFX2) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /TITLE Reference. Translate Dspdbr * Claudio Neroni 18-06-2008 Creato. *--------------------------------------------------------------------------------------------- * Trascrive il display database relation in un file meglio strutturato. *--------------------------------------------------------------------------------------------- H decedit('0,') datfmt(*dmy/) datedit(*dmy/) *--------------------------------------------------------------------------------------------- * File di emissione di DSPDBR. Fjrefdbfr ip e disk * Trascrizione di DSPPGMREF e di DSPDBR. Fjrefdbff o e disk * File di emissione di DSPOBJD. Fjrefdbfd1 if e k disk *--------------------------------------------------------------------------------------------- C do C if whtype <> 'D' C leave C endif C clear ref C movel(p) whrefi refpan C movel(p) whreli refpal C movel(p) '*FILE' refpat C movel(p) whrfi reffin C movel(p) whrli reffil C movel(p) '*FILE' reffit C z-add 90 refuso C kpa3 klist C kfld refpan C kfld refpat C kfld refpal C kpa2 klist C kfld refpan C kfld refpat C kpa3 chain jrefdbfd1 C if %found C movel(p) odobat refpaa C movel(p) odobtx refpax C else C kpa2 chain jrefdbfd1 C if %found C movel(p) odobat refpaa C movel(p) odobtx refpax C endif C endif C kfi3 klist C kfld reffin C kfld reffit C kfld reffil C kfi2 klist C kfld reffin C kfld reffit C kfi3 chain jrefdbfd1 C if %found C movel(p) odobat reffia C movel(p) odobtx reffix C else C kfi2 chain jrefdbfd1 C if %found C movel(p) odobat reffia C movel(p) odobtx reffix C endif C endif C write ref C enddo *--------------------------------------------------------------------------------------------- //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JREFEXP2) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /TITLE Reference Explode. Exe * 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 ristrutturato. Fjrefdbff1 if e k disk * File di emissione di DSPOBJD. Fjrefdbfd1 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(17) ctdata perrcd(1) D usgd s 4 dim(17) alt(usg) *--------------------------------------------------------------------------------------------- * Numero massimo di programmi in lista di chiamata. D max c 100 * Lista di chiamata. D lds ds D l 36 dim(max) * Chiamante + Tipo dell'oggetto chiamante. D lpa 18 overlay(l:1) * Chiamante. D lpan 10 overlay(l:1) * Tipo dell'oggetto chiamante. D lpat 8 overlay(l:11) * Chiamato + Tipo dell'oggetto chiamato. D lfi 18 overlay(l:19) * Chiamato. D lfin 10 overlay(l:19) * Tipo dell'oggetto chiamato. D lfit 8 overlay(l:29) * Chiamato + Tipo. Search word. D reffiw s like(lfi) *--------------------------------------------------------------------------------------------- * Programmi già sviluppati. D lpags s 18 dim(10000) * Indice di riempimento dei Programmi già sviluppati. D ip s 7 0 D ip0 s like(ip) D ips s like(ip) *--------------------------------------------------------------------------------------------- * Numero massimo di elementi Attributo programma. D maxqa c 20 * Spezza la simple list del parametro Attributo programma. D pppgmatr ds D qan 1 2b 0 D qa 2 dim(maxqa) * 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 qax s like(qa) dim(maxqa) D oax s like(oa) dim(maxoa) *--------------------------------------------------------------------------------------------- * Comando di chiamata. D cmd ds D cmdel 130 dim(10) *--------------------------------------------------------------------------------------------- * Trattini. D tra s 132 inz(*all'-') *--------------------------------------------------------------------------------------------- * Accorcia i campi per la stampa. D ds D reffit D reffitz 1 7 D ds D reffia D reffiaz 1 6 D ds D refpatprt like(refpat) D refpatprtz 1 7 D ds D refpaaprt like(refpaa) D refpaaprtz 1 6 *--------------------------------------------------------------------------------------------- * Predispone chiusura. C seton lr * Scambia parametri. C *entry plist * Riceve Nome dell'oggetto da esplodere. C parm pppan 10 * Riceve Tipo dell'oggetto da esplodere. C parm pppat 8 * Riceve Sviluppo. * *ALL=Elenca tutti gli oggetti * *PGM=Elenca solo i programmi C parm ppsvil 10 * Riceve Attributo programma. C parm pppgmatr * Riceve Attributo oggetto. * Blank =Elenca tutti gli oggetti * NonBlank=Elenca solo gli oggetti con l'attributo richiesto. C parm ppobjatr * Riceve Nome del sistema. C parm ppsnam 8 * Riceve Massimo livello. C parm ppmaxl 3 0 * Riceve Uso Input. C parm ppinput 1 * Riceve Uso Output. C parm ppoutput 1 * Riceve Uso Update. C parm ppupdate 1 * Riceve Uso Sconosciuto. C parm ppunknown 1 * Riceve Uso Relazione di database. C parm ppdbrel 1 * Riceve Uso Nessuno. C parm ppnouse 1 * Trascrive i parametri a numero di elementi variabili nei doppioni. C clear qax C *like define qan px C do qan px C movel(p) qa(px) qax(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='JREFEXP OBJ(' + C %trim(pppan ) + C ') OBJTYPE(' + C %trim(pppat ) + C ') DEVELOP(' + C %trim(ppsvil) + C ') PGMATR(' C do qan px C if px=1 C eval cmd= %trim(cmd) + C %trim(qax(px)) C else C eval cmd= %trim(cmd) + C ' ' + C %trim(qax(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 ') MAXLVL(' + C %trim(%editc(ppmaxl:'Z')) + C ')' * Uso. C if ppinput = *off C eval cmd= %trim(cmd) + ' INPUT(*NO)' C endif C if ppoutput = *off C eval cmd= %trim(cmd) + ' OUTPUT(*NO)' C endif C if ppupdate = *off C eval cmd= %trim(cmd) + ' UPDATE(*NO)' C endif C if ppunknown = *off C eval cmd= %trim(cmd) + ' UNKNOWN(*NO)' C endif C if ppdbrel = *off C eval cmd= %trim(cmd) + ' DBREL(*NO)' C endif C if ppnouse = *off C eval cmd= %trim(cmd) + ' NOUSE(*NO)' C endif * 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 lpan(xx) * Tipo usante. C kfld lpat(xx) * Chiave di riposizionamento. C k1b klist * Usante. C kfld lpan(xx) * Tipo usante. C kfld lpat(xx) * Usato. C kfld lfin(xx) * Tipo usato. C kfld lfit(xx) * Pulisce la lista di chiamata. C clear lpan C clear lpat C clear lfin C clear lfit * Pulisce e definisce la chiave ultimo dettaglio emesso. C clear refpanprec C clear refpatprec C clear refpaaprec C clear reffinprec C clear reffitprec C *like define refpan refpanprec C *like define refpat refpatprec C *like define refpaa refpaaprec C *like define reffin reffinprec C *like define reffit reffitprec * Assume il programma richiesto nella prima emissione. C clear xx C eval scaletta='0' C clear refpan C clear refpat C movel(p) pppan reffin C movel(p) pppat reffit * Decodifica il programma richiesto. C kd1 klist C kfld pppan C kfld pppat C kd1 chain jrefdbfd1 C if %found C movel(p) odobat reffia C movel(p) odobtx reffix C else C movel(p) *all'?' reffia C movel(p) *all'?' reffix C endif * Pulisce usante e tipo usante da emettere. C clear refpanprt C clear refpatprt C clear refpaaprt * Pulisce decodifica uso. C clear refusod * Numera la riga. C add 1 cnt * Emette il programma di partenza. C except det * Annota il programma di partenza nella prima posizione lista. C z-add 1 xx 3 0 C movel(p) pppan lpan(1) C movel(p) pppat lpat(1) C clear lfin(1) C clear lfit(1) * Si posiziona all'inizio degli oggetti usati dal pgm di partenza. C k1a setll jrefdbff1 * 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 jrefdbff1 * Se gli oggetti chiamati sono finiti. C if %eof * Pulisce la posizione corrente della lista di chiamata. C clear lpan(xx) C clear lpat(xx) C clear lfin(xx) C clear lfit(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 jrefdbff1 * Ricicla. C iter * Se gli oggetti chiamati sono finiti. C endif * Chiave di scavalco gruppo. C k1s klist * Usante. C kfld refpan * Tipo usante. C kfld refpat * Usato. C kfld reffin * Tipo usato. C kfld reffit * Scavalca il gruppo di record uguali all'ultimo letto. C k1s setgt jrefdbff1 * Legge l'ultimo record del gruppo. C k1s readpe jrefdbff1 h2 C h2 return * Assume recursioni assenti. C setoff 5153 * Compone Chiamato + Tipo. C eval reffiw = reffin + reffit * Annota la recursione se l'usato corrente è presente in lista usanti. C reffiw lookup lfi 51 * Se sono già stati sviluppati programmi. C if ip < ip0 * Se il pgm è già stato sviluppato, annota recursione. C eval ips = ip C reffiw lookup lpags(ips) 53 * Se sono già stati sviluppati programmi. C endif * Trascrive l'usato corrente nella lista di chiamata. C eval lpan(xx)=refpan C eval lpat(xx)=refpat C eval lfin(xx)=reffin C eval lfit(xx)=reffit * 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 reffiw lookup lpags(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 lpags(ip)=reffiw C endif * Annota il pgm nell'elenco dei pgm già sviluppati. 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 lfin(xx)<>*blank C or ppsvil='*PGM' C and lfit(xx)='*PGM' * Se l'usato corrente è diverso dall'ultimo emesso. C if refpan<>refpanprec C or refpat<>refpatprec C or reffin<>reffinprec C or reffit<>reffitprec * Costruisce un attributo oggetto di comodo per la ricerca. C eval reffiaw = reffia C *like define reffia reffiaw C if reffia = *blank C eval reffiaw = 'BLANK' C if reffit = '*FILE' C and %lookup('BLANKF':oax:1:oan) > *zero C eval reffiaw = 'BLANKF' C endif C endif * Se l'attributo oggetto corrente soddisfa la richiesta. C if oan = *zero C or oan > *zero C and %lookup(reffiaw:oax:1:oan) C > *zero * Se l'attributo programma corrente soddisfa la richiesta. C if qan = *zero C or qan > *zero C and %lookup(%subst(refpaa:1:2):qax:1:qan) C > *zero * Decodifica uso. C z-add 1 ux 3 0 C refuso lookup usg(ux) 50 C n50 movel *all'?' refusod C 50 movel(p) usgd(ux) refusod C *like define usgd refusod * Se l'uso corrente soddisfa la richiesta. C if %subst(refusod:1:1) = 'I' C and ppinput = *on C or %subst(refusod:2:1) = 'O' C and ppoutput = *on C or %subst(refusod:3:1) = 'U' C and ppupdate = *on C or %subst(refusod:4:1) = '?' C and ppunknown = *on C or %subst(refusod:1:3) = 'dbr' C and ppdbrel = *on C or %subst(refusod:1:4) = '....' C and ppnouse = *on * 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) refpan refpanprt C movel(p) refpat refpatprt C movel(p) refpaa refpaaprt C *like define refpan refpanprt * Annota usante e tipo usante uguale a precedente. C if refpan = refpanprec C and refpat = refpatprec C and refpaa = refpaaprec C movel(p) '"' refpanprt C movel(p) '"' refpatprt C movel(p) '"' refpaaprt C endif * 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) refpan refpanprec C movel(p) refpat refpatprec C movel(p) refpaa refpaaprec C movel(p) reffin reffinprec C movel(p) reffit reffitprec * Se l'uso corrente soddisfa la richiesta. C endif * Se l'attributo programma corrente soddisfa la richiesta. C endif * Se l'attributo oggetto corrente soddisfa la richiesta. C endif * Se l'usato corrente è diverso dall'ultimo emesso. C endif * Se corre recursione. C if *in51 * Pulisce l'elemento corrente dalla lista di chiamata. C clear lpan(xx) C clear lpat(xx) C clear lfin(xx) C clear lfit(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 jrefdbff1 * 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 non è già sviluppato * e se l'indice corrente è minore del massimo. C if not *in53 C and xx < ppmaxl * Incrementa l'indice corrente sulla lista di chiamata. C eval xx=xx+1 * Annota il programma nella posizione corrente della lista. C eval lpan(xx)=reffin C eval lpat(xx)=reffit C clear lfin(xx) C clear lfit(xx) * Si posiziona all'inizio degli oggetti usati dal pgm corrente. C k1a setll jrefdbff1 * Se l'elemento corrente non è già sviluppato * e se l'indice corrente è minore o uguale al massimo. 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(lpags)+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 97 'SysName:' O ppsnam +1 O *date y 120 O time +2 '0 : : ' O e int3 1 O 'Re' O 8 'Row' O 10 'L' O 'evel' O 22 'F' O 'ather' O 33 'T' O 'ype' O 41 'A' O 'ttrib' O 48 'S' O 'on' O 59 'T' O 'ype' O 67 'A' O 'ttrib' O 74 'U' O 'sag' O 79 'T' O 'ext' O e int3 1 O tra * Dettaglio esplosione. O e det 1 O 51 'F' O 53 'G' O cnt 3 O scaletta +1 O refpanprt +1 O refpatprtz +1 O refpaaprtz +1 O reffin +1 O reffitz +1 O reffiaz +1 O refusod +1 O reffix +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? 90dbr //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JREFIMP2) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /TITLE Reference Implode. Exe * 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 ristrutturato. Fjrefdbff2 if e k disk * File di emissione di DSPOBJD. Fjrefdbfd1 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(17) ctdata perrcd(1) D usgd s 4 dim(17) alt(usg) *--------------------------------------------------------------------------------------------- * Numero massimo di programmi in lista di chiamata. D max c 100 * Lista di chiamata. D lds ds D l 36 dim(max) * Chiamante + Tipo dell'oggetto chiamante. D lpa 18 overlay(l:1) * Chiamante. D lpan 10 overlay(l:1) * Tipo dell'oggetto chiamante. D lpat 8 overlay(l:11) * Chiamato + Tipo dell'oggetto chiamato. D lfi 18 overlay(l:19) * Chiamato. D lfin 10 overlay(l:19) * Tipo dell'oggetto chiamato. D lfit 8 overlay(l:29) * Chiamato + Tipo. Search word. D reffiw s like(lfi) *--------------------------------------------------------------------------------------------- * Programmi già sviluppati. D lpags s 18 dim(10000) * Indice di riempimento dei Programmi già sviluppati. D ip s 7 0 D ip0 s like(ip) D ips s like(ip) *--------------------------------------------------------------------------------------------- * Numero massimo di elementi Attributo programma. D maxqa c 20 * Spezza la simple list del parametro Attributo programma. D pppgmatr ds D qan 1 2b 0 D qa 2 dim(maxqa) * 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 qax s like(qa) dim(maxqa) D oax s like(oa) dim(maxoa) *--------------------------------------------------------------------------------------------- * Comando di chiamata. D cmd ds D cmdel 130 dim(10) *--------------------------------------------------------------------------------------------- * Trattini. D tra s 132 inz(*all'-') *--------------------------------------------------------------------------------------------- * Accorcia i campi per la stampa. D ds D reffit D reffitz 1 7 D ds D reffia D reffiaz 1 6 D ds D refpatprt like(refpat) D refpatprtz 1 7 D ds D refpaaprt like(refpaa) D refpaaprtz 1 6 *--------------------------------------------------------------------------------------------- * Rovescia padre e figlio per sfruttare il programma senza altre modifiche. Iref I REFPAN REFFIN I REFPAT REFFIT I REFPAA REFFIA I REFPAL REFFIL I REFPAX REFFIX I REFFIN REFPAN I REFFIT REFPAT I REFFIA REFPAA I REFFIL REFPAL I REFFIX REFPAX *--------------------------------------------------------------------------------------------- * Predispone chiusura. C seton lr * Scambia parametri. C *entry plist * Riceve Nome dell'oggetto da esplodere. C parm pppan 10 * Riceve Tipo dell'oggetto da esplodere. C parm pppat 8 * Riceve Sviluppo. * *ALL=Elenca tutti gli oggetti * *PGM=Elenca solo i programmi C parm ppsvil 10 * Riceve Attributo programma. C parm pppgmatr * Riceve Attributo oggetto. * Blank =Elenca tutti gli oggetti * NonBlank=Elenca solo gli oggetti con l'attributo richiesto. C parm ppobjatr * Riceve Nome del sistema. C parm ppsnam 8 * Riceve Massimo livello. C parm ppmaxl 3 0 * Riceve Uso Input. C parm ppinput 1 * Riceve Uso Output. C parm ppoutput 1 * Riceve Uso Update. C parm ppupdate 1 * Riceve Uso Sconosciuto. C parm ppunknown 1 * Riceve Uso Relazione di database. C parm ppdbrel 1 * Riceve Uso Nessuno. C parm ppnouse 1 * Trascrive i parametri a numero di elementi variabili nei doppioni. C clear qax C *like define qan px C do qan px C movel(p) qa(px) qax(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='JREFIMP OBJ(' + C %trim(pppan ) + C ') OBJTYPE(' + C %trim(pppat ) + C ') DEVELOP(' + C %trim(ppsvil) + C ') PGMATR(' C do qan px C if px=1 C eval cmd= %trim(cmd) + C %trim(qax(px)) C else C eval cmd= %trim(cmd) + C ' ' + C %trim(qax(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 ') MAXLVL(' + C %trim(%editc(ppmaxl:'Z')) + C ')' * Uso. C if ppinput = *off C eval cmd= %trim(cmd) + ' INPUT(*NO)' C endif C if ppoutput = *off C eval cmd= %trim(cmd) + ' OUTPUT(*NO)' C endif C if ppupdate = *off C eval cmd= %trim(cmd) + ' UPDATE(*NO)' C endif C if ppunknown = *off C eval cmd= %trim(cmd) + ' UNKNOWN(*NO)' C endif C if ppdbrel = *off C eval cmd= %trim(cmd) + ' DBREL(*NO)' C endif C if ppnouse = *off C eval cmd= %trim(cmd) + ' NOUSE(*NO)' C endif * 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 lpan(xx) * Tipo usante. C kfld lpat(xx) * Chiave di riposizionamento. C k1b klist * Usante. C kfld lpan(xx) * Tipo usante. C kfld lpat(xx) * Usato. C kfld lfin(xx) * Tipo usato. C kfld lfit(xx) * Pulisce la lista di chiamata. C clear lpan C clear lpat C clear lfin C clear lfit * Pulisce e definisce la chiave ultimo dettaglio emesso. C clear refpanprec C clear refpatprec C clear refpaaprec C clear reffinprec C clear reffitprec C *like define refpan refpanprec C *like define refpat refpatprec C *like define refpaa refpaaprec C *like define reffin reffinprec C *like define reffit reffitprec * Assume il programma richiesto nella prima emissione. C clear xx C eval scaletta='0' C clear refpan C clear refpat C movel(p) pppan reffin C movel(p) pppat reffit * Decodifica il programma richiesto. C kd1 klist C kfld pppan C kfld pppat C kd1 chain jrefdbfd1 C if %found C movel(p) odobat reffia C movel(p) odobtx reffix C else C movel(p) *all'?' reffia C movel(p) *all'?' reffix C endif * Pulisce usante e tipo usante da emettere. C clear refpanprt C clear refpatprt C clear refpaaprt * Pulisce decodifica uso. C clear refusod * Numera la riga. C add 1 cnt * Emette il programma di partenza. C except det * Annota il programma di partenza nella prima posizione lista. C z-add 1 xx 3 0 C movel(p) pppan lpan(1) C movel(p) pppat lpat(1) C clear lfin(1) C clear lfit(1) * Si posiziona all'inizio degli oggetti usati dal pgm di partenza. C k1a setll jrefdbff2 * 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 jrefdbff2 * Se gli oggetti chiamati sono finiti. C if %eof * Pulisce la posizione corrente della lista di chiamata. C clear lpan(xx) C clear lpat(xx) C clear lfin(xx) C clear lfit(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 jrefdbff2 * Ricicla. C iter * Se gli oggetti chiamati sono finiti. C endif * Chiave di scavalco gruppo. C k1s klist * Usante. C kfld refpan * Tipo usante. C kfld refpat * Usato. C kfld reffin * Tipo usato. C kfld reffit * Scavalca il gruppo di record uguali all'ultimo letto. C k1s setgt jrefdbff2 * Legge l'ultimo record del gruppo. C k1s readpe jrefdbff2 h2 C h2 return * Assume recursioni assenti. C setoff 5153 * Compone Chiamato + Tipo. C eval reffiw = reffin + reffit * Annota la recursione se l'usato corrente è presente in lista usanti. C reffiw lookup lfi 51 * Se sono già stati sviluppati programmi. C if ip < ip0 * Se il pgm è già stato sviluppato, annota recursione. C eval ips = ip C reffiw lookup lpags(ips) 53 * Se sono già stati sviluppati programmi. C endif * Trascrive l'usato corrente nella lista di chiamata. C eval lpan(xx)=refpan C eval lpat(xx)=refpat C eval lfin(xx)=reffin C eval lfit(xx)=reffit * 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 reffiw lookup lpags(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 lpags(ip)=reffiw C endif * Annota il pgm nell'elenco dei pgm già sviluppati. 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 lfin(xx)<>*blank C or ppsvil='*PGM' C and lfit(xx)='*PGM' * Se l'usato corrente è diverso dall'ultimo emesso. C if refpan<>refpanprec C or refpat<>refpatprec C or reffin<>reffinprec C or reffit<>reffitprec * Costruisce un attributo oggetto di comodo per la ricerca. C eval reffiaw = reffia C *like define reffia reffiaw C if reffia = *blank C eval reffiaw = 'BLANK' C if reffit = '*FILE' C and %lookup('BLANKF':oax:1:oan) > *zero C eval reffiaw = 'BLANKF' C endif C endif * Se l'attributo oggetto corrente soddisfa la richiesta. C if oan = *zero C or oan > *zero C and %lookup(reffiaw:oax:1:oan) C > *zero * Se l'attributo programma corrente soddisfa la richiesta. C if qan = *zero C or qan > *zero C and %lookup(%subst(refpaa:1:2):qax:1:qan) C > *zero * Decodifica uso. C z-add 1 ux 3 0 C refuso lookup usg(ux) 50 C n50 movel *all'?' refusod C 50 movel(p) usgd(ux) refusod C *like define usgd refusod * Se l'uso corrente soddisfa la richiesta. C if %subst(refusod:1:1) = 'I' C and ppinput = *on C or %subst(refusod:2:1) = 'O' C and ppoutput = *on C or %subst(refusod:3:1) = 'U' C and ppupdate = *on C or %subst(refusod:4:1) = '?' C and ppunknown = *on C or %subst(refusod:1:3) = 'dbr' C and ppdbrel = *on C or %subst(refusod:1:4) = '....' C and ppnouse = *on * 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) refpan refpanprt C movel(p) refpat refpatprt C movel(p) refpaa refpaaprt C *like define refpan refpanprt * Annota usante e tipo usante uguale a precedente. C if refpan = refpanprec C and refpat = refpatprec C and refpaa = refpaaprec C movel(p) '"' refpanprt C movel(p) '"' refpatprt C movel(p) '"' refpaaprt C endif * 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) refpan refpanprec C movel(p) refpat refpatprec C movel(p) refpaa refpaaprec C movel(p) reffin reffinprec C movel(p) reffit reffitprec * Se l'uso corrente soddisfa la richiesta. C endif * Se l'attributo programma corrente soddisfa la richiesta. C endif * Se l'attributo oggetto corrente soddisfa la richiesta. C endif * Se l'usato corrente è diverso dall'ultimo emesso. C endif * Se corre recursione. C if *in51 * Pulisce l'elemento corrente dalla lista di chiamata. C clear lpan(xx) C clear lpat(xx) C clear lfin(xx) C clear lfit(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 jrefdbff2 * 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 non è già sviluppato * e se l'indice corrente è minore del massimo. C if not *in53 C and xx < ppmaxl * Incrementa l'indice corrente sulla lista di chiamata. C eval xx=xx+1 * Annota il programma nella posizione corrente della lista. C eval lpan(xx)=reffin C eval lpat(xx)=reffit C clear lfin(xx) C clear lfit(xx) * Si posiziona all'inizio degli oggetti usati dal pgm corrente. C k1a setll jrefdbff2 * Se l'elemento corrente non è già sviluppato * e se l'indice corrente è minore o uguale al massimo. 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(lpags)+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 97 'SysName:' O ppsnam +1 O *date y 120 O time +2 '0 : : ' O e int3 1 O 'Re' O 8 'Row' O 10 'L' O 'evel' O 22 'S' O 'on' O 33 'T' O 'ype' O 41 'A' O 'ttrib' O 48 'F' O 'ather' O 59 'T' O 'ype' O 67 'A' O 'ttrib' O 74 'U' O 'sag' O 79 'T' O 'ext' O e int3 1 O tra * Dettaglio esplosione. O e det 1 O 51 'F' O 53 'G' O cnt 3 O scaletta +1 O refpanprt +1 O refpatprtz +1 O refpaaprtz +1 O reffin +1 O reffitz +1 O reffiaz +1 O refusod +1 O reffix +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? 90dbr //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(A.LEGGIMI) FILETYPE(*SRC) ENDCHAR('//ENDSRC') Eseguire prima di tutto la seguente job stream. JREFDBF. Reference Database. CrtJs Per creare i pgm di esplosione, esegui: JREFEXP. Reference Explode. CrtJs Per creare i pgm di implosione, esegui: JREFIMP. Reference Implode. CrtJs Per riempire i dati di lavoro preelaborati, sia per l'esplosione che per l'implosione, esegui: JREFDBF.F Reference Database. Fill database //ENDSRC //ENDBCHJOB