//BCHJOB JOB(JZONG) JOBD(QBATCH) OUTQ(QPRINT) ENDSEV(60) + LOG(4 00 *SECLVL) MSGQ(*USRPRF) /* Open source scaricabile da www.neroni.it di Claudio Neroni */ /* SE L'USO DELLA JOB DESCRIPTION "QBATCH" TI E' IMPEDITO, */ /* UTILIZZANE UNA DIVERSA. */ /* From System: "IUBICSVI" */ /* From Library: "UTI" */ /* Unload Time: 2008-12-15 17:53 */ /* To File : "JZONG" */ /* To Library : "NERONI2" */ /* To Text : "Group Zoner. Src" */ /********* 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 "JZONG.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:\JZONG.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JZONG.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(JZONG) 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/JZONG" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JZONG) MBR(JZONG.) JOBQ(QBATCH) */ /********* FINE ISTRUZIONI *********************************************/ /* Crea la libreria. */ MKDIR DIR('/qsys.lib/NERONI2.lib') CHGLIB LIB(NERONI2) TEXT('Utility di Claudio Neroni') /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP NERONI2 QGPL) /* Crea il file sorgente. */ DLTF FILE(NERONI2/JZONG) CRTSRCPF FILE(NERONI2/JZONG) RCDLEN(112) + TEXT('Group Zoner. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(A.LEGGIMI) TOFILE(NERONI2/JZONG) + TOMBR(A.LEGGIMI) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JZONG) MBR(A.LEGGIMI) + SRCTYPE(TXT) + TEXT('Group Zoner. Help Execution') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(A.LEGGIMI2) TOFILE(NERONI2/JZONG) + TOMBR(A.LEGGIMI2) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JZONG) MBR(A.LEGGIMI2) + SRCTYPE(TXT) + TEXT('Group Zoner. Help Short') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JZONG.) TOFILE(NERONI2/JZONG) + TOMBR(JZONG.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JZONG) MBR(JZONG.) + SRCTYPE(CL) + TEXT('Group Zoner. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JZONGI) TOFILE(NERONI2/JZONG) + TOMBR(JZONGI) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JZONG) MBR(JZONGI) + SRCTYPE(CMD) + TEXT('Group Zoner. FromLibsToIfs. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JZONGI1) TOFILE(NERONI2/JZONG) + TOMBR(JZONGI1) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JZONG) MBR(JZONGI1) + SRCTYPE(CLLE) + TEXT('Group Zoner. FromLibsToIfs. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JZONGLIB) TOFILE(NERONI2/JZONG) + TOMBR(JZONGLIB) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JZONG) MBR(JZONGLIB) + SRCTYPE(PF) + TEXT('Group Zoner. Libraries') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JZONGZ) TOFILE(NERONI2/JZONG) + TOMBR(JZONGZ) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JZONG) MBR(JZONGZ) + SRCTYPE(CMD) + TEXT('Group Zoner. ZipIfs. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JZONGZ1) TOFILE(NERONI2/JZONG) + TOMBR(JZONGZ1) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JZONG) MBR(JZONGZ1) + SRCTYPE(CLLE) + TEXT('Group Zoner. ZipIfs. Cpp') /*---------------------------------------------------------------------*/ //DATA FILE(A.LEGGIMI) FILETYPE(*SRC) ENDCHAR('//ENDSRC') *** ISTRUZIONI PER L'ESECUZIONE DELLA PROCEDURA JZONG *** La procedura JZONG scarica un gruppo di librerie nell'IFS e poi sul PC I comandi della procedura sono 2, da eseguire nell'ordine. JZONGI "Group Zoner. From Libs To Ifs" JZONGZ "Group Zoner. Zip Ifs" Detti comandi agiscono su un gruppo di librerie scelto tramite apposito file di personalizzazione. Per ciascuna "LIBRERIA" del gruppo l'esecuzione della procedura genera. 1) Su As400 una libreria duplicata col nome "$LIBRERIA". 2) Nell'IFS dell'As400 un indirizzario di transito "/home/JZONL/LIBRERIA" 3) Sempre nell'IFS dell'As400 un file zippato "/home/JZONL/LIBRERIA.zip" Il risultato finale saranno tanti file zippati nell'IFS contenenti i dati appiattiti dei file fisici (dati, non sorgenti) contenuti nelle librerie del gruppo scelto. Il carattere "$", previsto in un primo momento per analogia col nome della libreria di transito su As400, è stato tolto per i significati che il carattere assume nel corso dello zippaggio successivo. Ognuno di questi indirizzari conterrà tutti i membri dati della libreria con il nome "FILE-MEMBRO.txt", se il membro ha nome diverso dal file, o con il nome "FILE.txt", se il membro ha lo stesso nome del file. Ogni file dati As400 viene dapprima copiato in un comodo con i campi numerici zonati, invece che impaccati o binari, e solo allora copiato in un file piatto della esatta lunghezza necessaria. ELENCO MEDITATO DELLE ATTIVITA' 1) Se si vuole, cancellare o rinominare "/home/JZONL" e "C:\JZONL" per scrivere sul pulito. La procedura crea gli indirizzari che non trova. 2) Definire il gruppo delle librerie da scaricare. 3) Caricare con DFU o WRKDBF il gruppo delle librerie nel file JZONGLIB che ha il tracciato GRUPPO, LIBRERIA. Il DFU sul file JZONGLIB si chiama con il comando seguente. JZONGI LIBGRP(*DFU) Il WRKDBF sul file JZONGLIB si chiama con il comando seguente. JZONGI LIBGRP(*MNG) Oppure, semplicemente, visto il default. JZONGI 4) Eseguire il comando JZONGI interattivamente. JZONGI LIBGRP(GRUPPO) Oppure, preferibilmente, tramite Submit Job. SBMJOB CMD(JZONGI LIBGRP(GRUPPO)) JOB(JZONGI) LOG(4 00 *SECLVL) Come esecutore interattivo o lanciatore del Submit Job usare un utente autorevole. Procurarsi quindi USER e PASSWORD. Il comando JZONGI permette anche di scegliere un indirizzario diverso da "/home/JZONL". Si raccomanda tuttavia che sia un sottoindirizzario di "/home" perché l'IFS non ha comportamenti omogenei su tutti i suoi rami. 5) Se SBMJOB, dopo l'esecuzione, tramite WRKSBMJOB (Work Submitted Job), esaminare la joblog batch cercando la parola "NEGATIVO" (MAIUSCOLA) nel testo dei messaggi informativi emessi dalle varie esecuzioni del comando JZONL. Volendo si può cercare anche la parola "positivo" (minuscola). 6) Se l'esecuzione è stata interattiva, nella stessa sessione, finita l'esecuzione del comando JZONGI, eseguire il comando. DSPJOBLOG OUTPUT(*PRINT) Trovare lo spool di stampa con Work Spool File WRKSPLF e leggere la joblog interattiva come detto per la joblog batch. 7) Eseguire il comando JZONGZ interattivamente o batch. JZONGZ LIBGRP(GRUPPO) Al termine dell'esecuzione, là dove sono radicati gli indirizzari generati dal comando JZONGI, si troveranno anche i file zippati. Se si utilizza il default per il nome dell'indirizzario, per la "LIBRERIA" As400 copiata nell'indirizzario "/home/JZONL/LIBRERIA" verrà generato anche il file zippato "/home/JZONL/LIBRERIA.zip". 8) Assicurarsi che l'indirizzario "/home" dell'IFS dell'As400 sia definito come drive del PC, cioé che il PC lo conosca con una lettera di unità disco. Questo si ottiene tramite il comando DOS che, ad esempio, definisce l'IFS di sviluppo come drive "W:". net use w: \\iubicsvi\home PASSWORD /user:UTENTE /persistent:yes Oppure definisce l'ifs di test come drive "V:". net use v: \\iferstes\home PASSWORD /user:UTENTE /persistent:yes 9) Facendo uso del drive ottenuto al punto 8, spostare sul PC i file ".zip". 10) Sul pc criptare con WINZIP il contenuto di ciascun ".zip". Usare sempre la stessa password per criptare tutti i file. 11) Spostare su adatto supporto PC ogni LIBRERIA zippata e criptata. *** FINE ISTRUZIONI *** //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(A.LEGGIMI2) FILETYPE(*SRC) ENDCHAR('//ENDSRC') *** ISTRUZIONI RIDOTTE PER L'ESECUZIONE DELLA PROCEDURA JZONG *** *** DA RIVEDERE ************************************************************************************ La procedura JZONG scarica un gruppo di librerie nell'IFS e poi sul PC. Il risultato finale sarà un indirizzario "C:\JZONL" contenente i dati scaricati in indirizzari "C\JZONL\$LIBRERIA". ELENCO ATTIVITA' 1) Collegarsi all'As400 con UTENTE autorevole e la relativa PASSWORD. 2) Eseguire il comando JZONGI tramite Submit Job. "SBMJOB CMD(JZONGI LIBGRP(GRUPPO)) JOB(JZONGI) JOBQ(QS36EVOKE) LOG(4 00 *SECLVL)" 3) Dopo l'esecuzione, tramite WRKSBMJOB (Work Submitted Job), esaminare la joblog batch cercando la parola "NEGATIVO". Se si trova la parola, consultare il programmatore. 4) Assicurarsi che l'indirizzario "/home" dell'IFS dell'As400 sia definito come drive del PC, cioé che il PC lo conosca con una lettera di unità disco. Per questo, da PC: "start", "Esegui", digitare: "net use z: \\iferspro\home PASSWORD /user:UTENTE /persistent:yes" ed eseguire. 5) Chiamare interattivamente il comando JZONGP che scarica l'indirizzario JZONL da IFS a PC. "JZONGP LIBGRP(GRUPPO) PCDRIVE(Z) EXEC(*YES)" CON QUEST'ULTIMA ESECUZIONE LA PROCEDURA E' TERMINATA. RESTANO DA ESEGUIRE PERO' ANCHE I PASSI SEGUENTI. 6) Sul pc zippare e criptare con WINZIP il contenuto di ciascuna $LIBRERIA contenuta in "C:\JZONL". Usare sempre la stessa password per criptare. 7) Spostare su adatto supporto PC ogni $LIBRERIA zippata e criptata. *** FINE ISTRUZIONI RIDOTTE *** //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JZONG.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JZONG.) JOBD(QBATCH) OUTQ(QPRINTS) ENDSEV(60) LOG(4 + 00 *SECLVL) MSGQ(*USRPRF) /* Claudio Neroni 06/10/2008 Creato. */ /* JZONG */ /* Group Zoner. */ /* Esegue JZONL (Library Zoner) su un gruppo di librerie. */ /* Prerequisiti: JZONF, JZONL, JZIP */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella gli oggetti preesistenti. */ DLTCMD CMD(NERONI2/JZONGI) DLTCMD CMD(NERONI2/JZONGZ) DLTPGM PGM(NERONI2/JZONGI1) DLTPGM PGM(NERONI2/JZONGZ1) DLTF FILE(NERONI2/JZONGLIB) /* Crea gli oggetti. */ CRTPF FILE(NERONI2/JZONGLIB) SRCFILE(JZONG) SIZE(*NOMAX) CRTBNDCL PGM(NERONI2/JZONGI1) SRCFILE(JZONG) DBGVIEW(*ALL) CRTBNDCL PGM(NERONI2/JZONGZ1) SRCFILE(JZONG) DBGVIEW(*ALL) CRTCMD CMD(NERONI2/JZONGI) PGM(JZONGI1) SRCFILE(JZONG) PRDLIB(NERONI2) CRTCMD CMD(NERONI2/JZONGZ) PGM(JZONGZ1) SRCFILE(JZONG) PRDLIB(NERONI2) CPYF FROMFILE(NERONI2/JZONGLIBSV) TOFILE(NERONI2/JZONGLIB) + MBROPT(*REPLACE) //ENDBCHJOB //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JZONGI) FILETYPE(*SRC) ENDCHAR('//ENDSRC') CMD PROMPT('Group Zoner. From Libs To Ifs') PARM KWD(LIBGRP) TYPE(*NAME) LEN(10) DFT(*MNG) + SPCVAL((*MNG) (*DFU)) PROMPT('Library group') PARM KWD(TODIR) TYPE(*PNAME) LEN(256) + DFT('/home/JZONL') PROMPT('To Directory') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JZONGI1) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Group Zoner. Cpp */ /* Claudio Neroni 06/10/2008 Creato. */ /* */ PGM PARM(&GRPLIB &TODIR) /* Riceve gruppo librerie da convertire. */ DCL VAR(&GRPLIB) TYPE(*CHAR) LEN(10) /* Riceve Nome indirizzario di destinazione. */ DCL VAR(&TODIR) TYPE(*CHAR) LEN(256) /* Query select. */ DCL VAR(&QRYSLT) TYPE(*CHAR) LEN(256) /* Prenotazione del CPF0001. */ DCL VAR(&CPF0001) TYPE(*LGL) /* Elenco librerie. */ DCLF FILE(JZONGLIB) /* Intercetta gli errori. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Gestisce l'elenco delle code con Work Database File. */ IF COND(&GRPLIB *EQ *MNG) THEN(DO) WRKDBF FILENAME(JZONGLIB) MONMSG MSGID(CPF0000) GOTO CMDLBL(RCLRSC) ENDDO /* Gestisce l'elenco delle code con dfu. */ IF COND(&GRPLIB *EQ *DFU) THEN(DO) UPDDTA FILE(JZONGLIB) MONMSG MSGID(CPF0000) GOTO CMDLBL(RCLRSC) ENDDO /* Compone Query select. */ CHGVAR VAR(&QRYSLT) VALUE('ZONGRU = "' *CAT &GRPLIB + *TCAT '"') /* Reindirizza la lettura sull'elenco librerie. */ OVRDBF FILE(JZONGLIB) SHARE(*YES) /* Sceglie e ordina le librerie del gruppo. */ OPNQRYF FILE((JZONGLIB)) QRYSLT(&QRYSLT) + KEYFLD((ZONGRU) (ZONLIB)) /* Inizio lettura. */ REABEG: /* Legge il record di una libreria. */ RCVF /* Se non ce ne sono altri, abbandona. */ MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(REAEND)) /* Esegue l'estrazione di una libreria. */ JZONL FROMLIB(&ZONLIB) TODIR(&TODIR) /* Ricicla. */ GOTO CMDLBL(REABEG) /* Fine lettura. */ REAEND: /* Chiude il file. */ CLOF OPNID(JZONGLIB) /* Cancella i reindirizzamenti. */ DLTOVR FILE(*ALL) /* Salta all'esecuzione delle attività finali. */ GOTO CMDLBL(RCLRSC) /* Label di esecuzione delle attività finali. */ RCLRSC: /* Cancella i file di lavoro. */ /* ... */ /* Riacquisisce le risorse. */ RCLRSC MONMSG MSGID(CPF0000 MCH0000) /* Se richiesto, rilascia il CPF0001. */ IF COND(&CPF0001) THEN(DO) SNDPGMMSG MSGID(CPF0001) MSGF(QCPFMSG) MSGDTA(JZONGI) + MSGTYPE(*ESCAPE) MONMSG MSGID(CPF0000 MCH0000) ENDDO /* Ritorna. */ RETURN /* Label di errore. */ ERRORE: /* Messaggia esito negativo. */ SNDPGMMSG MSG('JZONGI Esito NEGATIVO per il gruppo + librerie' *BCAT &GRPLIB) MONMSG MSGID(CPF0000 MCH0000) /* Restituisce i messaggi al chiamante, */ /* trasformando eventuali escape in diagnostici. */ JRSNMSG RMV(*NO) 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(JZONGLIB) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Claudio Neroni 03-10-2008 Creato. A UNIQUE A R JZONGLIBR A TEXT('Group Zoner. + A Libraries') A ZONGRU 10 A COLHDG('Group') A ZONLIB 10 A COLHDG('Library') A K ZONGRU A K ZONLIB //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JZONGZ) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Group Zoner. ZipIfs. Cmd */ /* Claudio Neroni 02-12-2008 Creato. */ /* */ CMD PROMPT('Group Zoner. Zip Ifs') PARM KWD(LIBGRP) TYPE(*NAME) LEN(10) MIN(1) + PROMPT('Library group') PARM KWD(DIR) TYPE(*PNAME) LEN(256) + DFT('/home/JZONL') PROMPT('Directory') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JZONGZ1) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Group Zoner. ZipIfs. Cpp */ /* Claudio Neroni 02-12-2008 Creato. */ /* */ PGM PARM(&GRPLIB &DIR) /* Riceve Gruppo librerie da zippare. */ DCL VAR(&GRPLIB) TYPE(*CHAR) LEN(10) /* Riceve Nome indirizzario di provenienza. */ DCL VAR(&DIR) TYPE(*CHAR) LEN(256) /* Utente corrente. */ DCL VAR(&USER) TYPE(*CHAR) LEN(10) /* Tipo corrente. */ DCL VAR(&TYPE) TYPE(*CHAR) LEN(1) /* Query select. */ DCL VAR(&QRYSLT) TYPE(*CHAR) LEN(256) /* Library. */ DCL VAR(&LIB) TYPE(*CHAR) LEN(10) /* Nome file di provenienza. */ DCL VAR(&FROMFILE) TYPE(*CHAR) LEN(256) /* Prenotazione del CPF0001. */ DCL VAR(&CPF0001) TYPE(*LGL) /* Elenco librerie. */ DCLF FILE(JZONGLIB) /* Intercetta gli errori. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Recupera utente corrente e tipo lavoro. */ RTVJOBA USER(&USER) TYPE(&TYPE) /* Se il lavoro è batch, dettaglia il joblog. */ IF COND(&TYPE *EQ '0') THEN(CHGJOB LOG(4 00 + *SECLVL)) /* Verifica che esista l'indirizzario. */ CHKIN OBJ(&DIR) MONMSG MSGID(CPFA0DA) EXEC(GOTO CMDLBL(CHK1END)) SNDPGMMSG MSG('Non esiste l''indirizzario "' *TCAT + &DIR *TCAT '". (NEGATIVO)') GOTO CMDLBL(CPF0001) CHK1END: /* Compone Query select. */ CHGVAR VAR(&QRYSLT) VALUE('ZONGRU = "' *CAT &GRPLIB + *TCAT '"') /* Reindirizza la lettura sull'elenco librerie. */ OVRDBF FILE(JZONGLIB) SHARE(*YES) /* Sceglie e ordina le librerie del gruppo. */ OPNQRYF FILE((JZONGLIB)) QRYSLT(&QRYSLT) + KEYFLD((ZONGRU) (ZONLIB)) /* Inizio lettura. */ REABEG: /* Legge il record di una libreria. */ RCVF /* Se non ce ne sono altri, abbandona. */ MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(REAEND)) /* Tronca l'ultimo carattere della libreria. */ CHGVAR VAR(&LIB) VALUE(%SST(&ZONLIB 1 9)) /* Compone il nome completo dell'indirizzario datore. */ CHGVAR VAR(&FROMFILE) VALUE(&DIR *TCAT '/' *TCAT &LIB) /* Verifica che esista l'indirizzario. */ CHKIN OBJ(&FROMFILE) MONMSG MSGID(CPFA0DA) EXEC(GOTO CMDLBL(CHK2END)) MONMSG MSGID(CPF0000) SNDPGMMSG MSG('Non esiste l''indirizzario "' *TCAT + &FROMFILE *TCAT '". (NEGATIVO)') GOTO CMDLBL(REABEG) CHK2END: /* Esegue la zippatura. */ JZIP FROMDIR(&FROMFILE) TODIR(*FOOT) MONMSG MSGID(CPF0000) EXEC(DO) SNDPGMMSG MSG('Errore zippando l''indirizzario "' + *TCAT &FROMFILE *TCAT '". (NEGATIVO)') GOTO CMDLBL(REABEG) ENDDO /* Messaggia esito positivo. */ SNDPGMMSG MSG('Esito positivo zippando l''indirizzario + "' *TCAT &FROMFILE *TCAT '".') /* Ricicla. */ GOTO CMDLBL(REABEG) /* Fine lettura. */ REAEND: /* Chiude il file. */ CLOF OPNID(JZONGLIB) /* Cancella i reindirizzamenti. */ DLTOVR FILE(*ALL) /* Salta all'esecuzione delle attività finali. */ GOTO CMDLBL(RCLRSC) /* Label di esecuzione delle attività finali. */ RCLRSC: /* Cancella i file di lavoro. */ /* ... */ /* Riacquisisce le risorse. */ RCLRSC MONMSG MSGID(CPF0000 MCH0000) /* Se richiesto, rilascia il CPF0001. */ IF COND(&CPF0001) THEN(DO) SNDPGMMSG MSGID(CPF0001) MSGF(QCPFMSG) MSGDTA(JZONGP) + MSGTYPE(*ESCAPE) MONMSG MSGID(CPF0000 MCH0000) ENDDO /* Ritorna. */ RETURN /* Label di errore. */ ERRORE: /* Messaggia esito negativo. */ SNDPGMMSG MSG('JZONGP Esito NEGATIVO per il gruppo + librerie' *BCAT &GRPLIB) MONMSG MSGID(CPF0000 MCH0000) /* Restituisce i messaggi al chiamante, */ /* trasformando eventuali escape in diagnostici. */ JRSNMSG RMV(*NO) 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 //ENDBCHJOB