//BCHJOB JOB(JCHKLIBLE) JOBD(NERONI2/NERONI2) OUTQ(QPRINT) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) /* Open source from www.neroni.it */ /* LA JOB DESCRIPTION "NERONI2/NERONI2" DEVE PREESISTERE. PUO' ESSERE */ /* IDENTICA A QBATCH E PUO' ESSERE SOSTITUITA DA QBATCH O SIMILE. */ /* From System: "DEV720" */ /* From Library: "NERONI2" */ /* Unload Time: 2016-04-20 14:23 */ /* To File : "JCHKLIBLE" */ /* To Library : "NERONI2" */ /* To Text : "Check Library List Entry. 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 "JCHKLIBLE.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:\JCHKLIBLE.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JCHKLIBLE.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(JCHKLIBLE) 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/JCHKLIBLE" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JCHKLIBLE) MBR(JCHKLIBLE.) JOBQ(QBATCH) */ /********* FINE ISTRUZIONI *********************************************/ /* Crea la libreria. */ MKDIR DIR('/qsys.lib/NERONI2.lib') CHGLIB LIB(NERONI2) TEXT('Claudio Neroni Utility') /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP NERONI2 QGPL) /* Crea il file sorgente. */ DLTF FILE(NERONI2/JCHKLIBLE) CRTSRCPF FILE(NERONI2/JCHKLIBLE) RCDLEN(112) + TEXT('Check Library List Entry. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCHKLIBLE) TOFILE(NERONI2/JCHKLIBLE) + TOMBR(JCHKLIBLE) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCHKLIBLE) MBR(JCHKLIBLE) + SRCTYPE(CMD) + TEXT('Check Library List Entry. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCHKLIBLE.) TOFILE(NERONI2/JCHKLIBLE) + TOMBR(JCHKLIBLE.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCHKLIBLE) MBR(JCHKLIBLE.) + SRCTYPE(CL) + TEXT('Check Library List Entry. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCHKLIBLEC) TOFILE(NERONI2/JCHKLIBLE) + TOMBR(JCHKLIBLEC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCHKLIBLE) MBR(JCHKLIBLEC) + SRCTYPE(CLLE) + TEXT('Check Library List Entry. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCHKLIBLEI) TOFILE(NERONI2/JCHKLIBLE) + TOMBR(JCHKLIBLEI) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCHKLIBLE) MBR(JCHKLIBLEI) + SRCTYPE(CMD) + TEXT('Check Library List Entry. CmdInter') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JCHKLIBLET) TOFILE(NERONI2/JCHKLIBLE) + TOMBR(JCHKLIBLET) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JCHKLIBLE) MBR(JCHKLIBLET) + SRCTYPE(CLLE) + TEXT('Check Library List Entry. Test') /*---------------------------------------------------------------------*/ //DATA FILE(JCHKLIBLE) FILETYPE(*SRC) ENDCHAR('//ENDSRC') CMD PROMPT('Check Library List Entry') PARM KWD(LIB) TYPE(*GENERIC) MIN(1) + PROMPT('Library') PARM KWD(PRESENT) TYPE(*CHAR) LEN(4) RTNVAL(*YES) + MIN(1) PROMPT('Present *YES/*NO Var 4') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JCHKLIBLE.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JCHKLIBLE.) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) CCSID(280) jmy /* Claudio Neroni 12-03-2015 Creato. */ /* JCHKLIBLE */ /* Check Library List Entry. */ /* Prerequisiti: nessuno */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella il file messaggi preesistente. */ DLTMSGF MSGF(NERONI2/JCHKLIBLE) /* Cancella i testi d'aiuto preesistenti. */ DLTPNLGRP PNLGRP(NERONI2/JCHKLIBLEP) /* Cancella i logici preesistenti. */ /* Cancella i fisici preesistenti. */ /* Cancella i comandi preesistenti. */ DLTCMD CMD(NERONI2/JCHKLIBLE) DLTCMD CMD(NERONI2/JCHKLIBLEI) /* Cancella i programmi preesistenti. */ DLTPGM PGM(NERONI2/JCHKLIBLEC) DLTPGM PGM(NERONI2/JCHKLIBLET) /* Crea i file fisici. */ /* Crea i file logici. */ /* Crea i comandi. */ CRTCMD CMD(NERONI2/JCHKLIBLE) PGM(JCHKLIBLEC) SRCFILE(JCHKLIBLE) + ALLOW(*BPGM *IPGM) HLPPNLGRP(JCHKLIBLEP) HLPID(CMD) + PRDLIB(NERONI2) CRTCMD CMD(NERONI2/JCHKLIBLEI) PGM(JCHKLIBLEC) + SRCFILE(JCHKLIBLE) ALLOW(*ALL) HLPPNLGRP(JCHKLIBLEP) + HLPID(CMD) PRDLIB(NERONI2) /* Duplica i comandi in QGPL. */ CRTPRXCMD CMD(QGPL/JCHKLIBLE) TGTCMD(NERONI2/JCHKLIBLE) AUT(*USE) + REPLACE(*YES) CRTPRXCMD CMD(QGPL/JCHKLIBLEI) TGTCMD(NERONI2/JCHKLIBLEI) AUT(*USE) + REPLACE(*YES) /* Crea i programmi. */ CRTBNDCL PGM(NERONI2/JCHKLIBLEC) SRCFILE(JCHKLIBLE) + TGTRLS(*CURRENT) DBGVIEW(*ALL) CRTBNDCL PGM(NERONI2/JCHKLIBLET) SRCFILE(JCHKLIBLE) + TGTRLS(*CURRENT) DBGVIEW(*ALL) /* Crea il file messaggi. */ CRTMSGF MSGF(NERONI2/JCHKLIBLE) TEXT('Check Library List Entry. Msgf') /* Fotografia comandi (xxxA001). */ /* Messaggi comuni a pgm di comandi diversi (xxx0001). */ /* Messaggi nei pgm del Cmd 1 (xxx0101). */ ADDMSGD MSGID(JCE0101) MSGF(NERONI2/JCHKLIBLE) MSG('La libreria + &1 e'' in lista librerie.') FMT((*CHAR 10)) ADDMSGD MSGID(JCE0102) MSGF(NERONI2/JCHKLIBLE) MSG('La libreria + &1 NON e'' in lista librerie.') FMT((*CHAR 10)) /* Messaggi nei pgm del Cmd 2 (xxx0201). */ /* Messaggi dei Cmd (xxx1001). */ /* Crea i testi d'aiuto. */ CRTPNLGRP PNLGRP(NERONI2/JCHKLIBLEP) SRCFILE(JCHKLIBLE) //ENDBCHJOB //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JCHKLIBLEC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Check Library List Entry. Cpp */ /* Claudio Neroni 12-03-1015 Creato. */ /* */ PGM PARM(&LIB &PRESENT) /* Riceve il nome (anche generico) della Libreria. */ DCL VAR(&LIB) TYPE(*CHAR) LEN(10) /* Riceve il Modo richiesto. */ /* Restituisce se La Libreria e' in lista (*YES/*NO). */ DCL VAR(&PRESENT) TYPE(*CHAR) LEN(4) /* Modo richiesto. */ DCL VAR(&MODE) TYPE(*CHAR) LEN(4) /* System Library List. */ DCL VAR(&SYSLIBL) TYPE(*CHAR) LEN(165) /* Current Library. */ DCL VAR(&CURLIB) TYPE(*CHAR) LEN(10) /* User Library List. */ DCL VAR(&USRLIBL) TYPE(*CHAR) LEN(2750) /* Total Library List. */ DCL VAR(&TLIBL) TYPE(*CHAR) LEN(2926) /* Exploration Index. */ DCL VAR(&EI) TYPE(*INT) /* Displacement. */ DCL VAR(&DISP) TYPE(*DEC) LEN(5) /* Element. */ DCL VAR(&ELEM) TYPE(*CHAR) LEN(10) /* Messaggio. */ DCL VAR(&MSG) TYPE(*CHAR) LEN(512) /* Posizione dell'eventuale asterisco nel nome Libreria. */ DCL VAR(&AST) TYPE(*DEC) LEN(3) /* Numero di caratteri dall'asterisco compreso alla fine del nome. */ DCL VAR(&LAST) TYPE(*DEC) LEN(3) /* Salva il modo richiesto. */ CHGVAR VAR(&MODE) VALUE(&PRESENT) /* Assume che la Libreria non sia in lista. */ CHGVAR VAR(&PRESENT) VALUE(*NO) /* Cerca la posizione di un eventuale asterisco nel nome Libreria. */ CHGVAR VAR(&AST) VALUE(%SCAN(* &LIB 1)) /* Calcola il Numero di caratteri dall'asterisco compreso alla fine del nome. */ CHGVAR VAR(&LAST) VALUE(11 - &AST) /* Recupera la lista delle librerie. */ RTVJOBA SYSLIBL(&SYSLIBL) CURLIB(&CURLIB) + USRLIBL(&USRLIBL) /* Compone la Total Library List. */ CHGVAR VAR(&TLIBL) VALUE(&SYSLIBL *CAT &CURLIB *CAT + ' ' *CAT &USRLIBL) /* Esamina tutte le librerie della Total Library List. */ DOFOR VAR(&EI) FROM(1) TO(266) /* Calcola il Displacement dell'elemento lungo la Total Library List. */ CHGVAR VAR(&DISP) VALUE((&EI -1) * 11 +1) /* Estrae dalla Total Library List l'elemento corrispondente all'indice. */ CHGVAR VAR(&ELEM) VALUE(%SST(&TLIBL &DISP 10)) /* Se si sta esaminando la parte user della Total Library List */ /* e se l'elemento corrente e' vuoto, abbandona la ricerca. */ IF COND(&EI *GT 16 *AND &ELEM *EQ ' ') THEN(LEAVE) /* Se presente asterisco nel nome della libreria, */ /* altera l'elemento estratto per compararlo come nome generico. */ IF COND(&AST *GT 0) THEN(CHGVAR VAR(%SST(&ELEM + &AST &LAST)) VALUE(*)) /* Se l'elemento corrente e' uguale alla libreria cercata. */ IF COND(&ELEM *EQ &LIB) THEN(DO) /* Annota che la Libreria e' in lista. */ CHGVAR VAR(&PRESENT) VALUE(*YES) /* Abbandona la ricerca. */ LEAVE /* Se l'elemento corrente e' uguale alla libreria cercata. */ ENDDO /* Esamina tutte le librerie della Total Library List. */ ENDDO /* Se richiesto, manda un messaggio. */ IF COND(&MODE *EQ *MSG) THEN(DO) IF COND(&PRESENT *EQ *YES) THEN(SNDPGMMSG + MSGID(JCE0101) MSGF(JCHKLIBLE) MSGDTA(&LIB)) ELSE CMD(SNDPGMMSG MSGID(JCE0102) MSGF(JCHKLIBLE) + MSGDTA(&LIB)) ENDDO /* Fine. */ ENDPGM: ENDPGM //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JCHKLIBLEI) FILETYPE(*SRC) ENDCHAR('//ENDSRC') CMD PROMPT('Check Library List Entry') PARM KWD(LIB) TYPE(*GENERIC) MIN(1) + PROMPT('Library') PARM KWD(PRESENT) TYPE(*CHAR) LEN(4) CONSTANT(*MSG) //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JCHKLIBLET) FILETYPE(*SRC) ENDCHAR('//ENDSRC') PGM PARM(&LIB) DCL VAR(&LIB) TYPE(*CHAR) LEN(10) DCL VAR(&PRESENT) TYPE(*CHAR) LEN(4) JCHKLIBLE LIB(&LIB) PRESENT(&PRESENT) SNDPGMMSG MSG(&PRESENT) ENDPGM //ENDSRC //ENDBCHJOB