//BCHJOB JOB(JDTAARA) JOBD(NERONI2/NERONI2) OUTQ(QPRINT) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) /* Open source scaricabile da 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: "S65D69DA" */ /* From Library: "NERONI2" */ /* Unload Time: 2015-06-30 17:42 */ /* To File : "JDTAARA" */ /* To Library : "NERONI2" */ /* To Text : "Change data area. 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 "JDTAARA.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:\JDTAARA.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JDTAARA.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(JDTAARA) 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/JDTAARA" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JDTAARA) MBR(JDTAARA.) 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/JDTAARA) CRTSRCPF FILE(NERONI2/JDTAARA) RCDLEN(112) + TEXT('Change data area. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JDTAARA) TOFILE(NERONI2/JDTAARA) + TOMBR(JDTAARA) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JDTAARA) MBR(JDTAARA) + SRCTYPE(CMD) + TEXT('Change data area. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JDTAARA.) TOFILE(NERONI2/JDTAARA) + TOMBR(JDTAARA.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JDTAARA) MBR(JDTAARA.) + SRCTYPE(CL) + TEXT('Change data area. Cjs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JDTAARAC) TOFILE(NERONI2/JDTAARA) + TOMBR(JDTAARAC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JDTAARA) MBR(JDTAARAC) + SRCTYPE(CLLE) + TEXT('Change data area. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JDTAARAD) TOFILE(NERONI2/JDTAARA) + TOMBR(JDTAARAD) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JDTAARA) MBR(JDTAARAD) + SRCTYPE(RPGLE) + TEXT('Change data area. VarToFile') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JDTAARAE) TOFILE(NERONI2/JDTAARA) + TOMBR(JDTAARAE) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JDTAARA) MBR(JDTAARAE) + SRCTYPE(RPGLE) + TEXT('Change data area. FileToVar') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JDTAARAP) TOFILE(NERONI2/JDTAARA) + TOMBR(JDTAARAP) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JDTAARA) MBR(JDTAARAP) + SRCTYPE(PNLGRP) + TEXT('Change data area. Help') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JDTAARAS) TOFILE(NERONI2/JDTAARA) + TOMBR(JDTAARAS) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JDTAARA) MBR(JDTAARAS) + SRCTYPE(RPGLE) + TEXT('Change data area. CrtSrc') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JDTAARA1) TOFILE(NERONI2/JDTAARA) + TOMBR(JDTAARA1) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JDTAARA) MBR(JDTAARA1) + SRCTYPE(PF) + TEXT('Change data area. Wrkf') /*---------------------------------------------------------------------*/ //DATA FILE(JDTAARA) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Change data area. Cmd */ /* Claudio Neroni 11/11/2000 Creato. */ CMD PROMPT('Change data area') PARM KWD(DTAARA) TYPE(DTAARA) SNGVAL((*LDA)) + MIN(1) PROMPT('Data area') DTAARA: QUAL TYPE(*NAME) EXPR(*YES) QUAL TYPE(*NAME) DFT(*LIBL) SPCVAL((*LIBL)) + EXPR(*YES) PROMPT('library') PARM KWD(DS) TYPE(DS) DFT(*DTAARA) + SNGVAL((*DTAARA) (*NONE)) PROMPT('Data + structure') DS: QUAL TYPE(*NAME) SPCVAL((*NAME)) QUAL TYPE(*NAME) DFT(*LIBL) SPCVAL((*LIBL)) + EXPR(*YES) PROMPT('library') /*ƒ RIMUOVERE DAL CMD LE UTILITY ASSENTI: KUPDF, TWF, WRKDBF */ /*********** PARM KWD(UPDPGM) TYPE(*CHAR) LEN(10) RSTD(*YES) + DFT(DFU) VALUES(DFU KUPDF TWF WRKDBF) + PROMPT('Update program') *********************/ PARM KWD(UPDPGM) TYPE(*CHAR) LEN(10) RSTD(*YES) + DFT(WRKDBF) VALUES(DFU WRKDBF) + PROMPT('Update program') PARM KWD(TOPGMQ) TYPE(*CHAR) LEN(4) RSTD(*YES) + DFT(*PRV) VALUES(*PRV *EXT) PROMPT('To + program queue') PARM KWD(LENREL) TYPE(*CHAR) LEN(4) RSTD(*YES) + DFT(*EQ) VALUES(*LE *EQ *GE) + PROMPT('Lenght relation (Ds vs DtaAra)') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JDTAARA.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JDTAARA.) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) /* Claudio Neroni 10/11/2000 Creato. */ /* JDTAARA */ /* Change data area. */ /* Prerequisiti: JAI, JCV, JCPYCLR, JRSNMSG */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /*ƒ RIMUOVERE DAL CMD LE UTILITY ASSENTI: KUPDF, TWF, WRKDBF */ /*ƒ RIMUOVERE DAL CPP LE UTILITY ASSENTI: KUPDF, TWF, WRKDBF */ /* UTILITY KUPDF */ ADDLIBLE LIB(ACGGAA) POSITION(*LAST) CHGCMD CMD(ACGGAA/KUPDF) ALLOW(*INTERACT *IPGM *EXEC) /* UTILITY TWF */ ADDLIBLE LIB(TWF ) POSITION(*LAST) /* UTILITY WRKDBF */ ADDLIBLE LIB(WRKDBF) POSITION(*LAST) /* Cancella gli oggetti preesistenti. */ DLTCMD CMD(NERONI2/JDTAARA) DLTPNLGRP PNLGRP(NERONI2/JDTAARAP) DLTPGM PGM(NERONI2/JDTAARAC) DLTPGM PGM(NERONI2/JDTAARAD) DLTPGM PGM(NERONI2/JDTAARAE) DLTPGM PGM(NERONI2/JDTAARAF) DLTPGM PGM(NERONI2/JDTAARAG) DLTPGM PGM(NERONI2/JDTAARAS) DLTF FILE(NERONI2/JDTAARA1) DLTMSGF MSGF(NERONI2/JDTAARA) /* Crea gli oggetti. */ CRTPF FILE(NERONI2/JDTAARA1) SRCFILE(JDTAARA) MAXMBRS(*NOMAX) + SIZE(*NOMAX) CRTBNDCL PGM(NERONI2/JDTAARAC) SRCFILE(JDTAARA) DBGVIEW(*ALL) CRTBNDRPG PGM(NERONI2/JDTAARAD) SRCFILE(JDTAARA) DBGVIEW(*ALL) CRTBNDRPG PGM(NERONI2/JDTAARAE) SRCFILE(JDTAARA) DBGVIEW(*ALL) CRTBNDRPG PGM(NERONI2/JDTAARAF) SRCFILE(JDTAARA) DBGVIEW(*ALL) CRTBNDRPG PGM(NERONI2/JDTAARAG) SRCFILE(JDTAARA) DBGVIEW(*ALL) CRTBNDRPG PGM(NERONI2/JDTAARAS) SRCFILE(JDTAARA) DBGVIEW(*ALL) CRTPNLGRP PNLGRP(NERONI2/JDTAARAP) SRCFILE(JDTAARA) CRTCMD CMD(NERONI2/JDTAARA) PGM(JDTAARAC) SRCFILE(JDTAARA) + HLPPNLGRP(JDTAARAP) HLPID(CMD) PRDLIB(NERONI2) CRTMSGF MSGF(NERONI2/JDTAARA) TEXT('Change data area. Msgf') /* Messaggi del Ccp. */ ADDMSGD MSGID(JDA0001) MSGF(NERONI2/JDTAARA) MSG('Area dati &2/&1 + non modificata.') SECLVL('Per l''area dati &1 di tipo + &3 nella libreria &2 non hai richiesto alcuna modifica + e nessuna modifica è stata eseguita. Il tracciato con + cui hai esaminato l''area dati è &6 nella libreria + &7.') FMT((*CHAR 10) (*CHAR 10) (*CHAR 10) (*DEC 9) + (*DEC 9) (*CHAR 10) (*CHAR 10) (*DEC 9) (*DEC 9) + (*CHAR 3)) ADDMSGD MSGID(JDA0002) MSGF(NERONI2/JDTAARA) MSG('Area dati &2/&1 + modificata da altri.') SECLVL('Mentre esitavi + nell''aggiornamento dell''area dati &1 di tipo &3 + nella libreria &2 secondo il tracciato &7/&6, un altro + lavoro l''ha modificata. &N Le tue modifiche sono + perdute. Ritenta.') SEV(70) FMT((*CHAR 10) (*CHAR 10) + (*CHAR 10) (*DEC 9) (*DEC 9) (*CHAR 10) (*CHAR 10) + (*DEC 9) (*DEC 9) (*CHAR 3)) ADDMSGD MSGID(JDA0003) MSGF(NERONI2/JDTAARA) MSG('Area dati &2/&1 + modificata con tracciato &7/&6.') SECLVL('L''area dati + &1 di tipo &3 nella libreria &2 è stata felicemente + modificata secondo il tracciato &6 nella libreria + &7.') FMT((*CHAR 10) (*CHAR 10) (*CHAR 10) (*DEC 9) + (*DEC 9) (*CHAR 10) (*CHAR 10) (*DEC 9) (*DEC 9) + (*CHAR 3)) ADDMSGD MSGID(JDA0004) MSGF(NERONI2/JDTAARA) MSG('La struttura dati + multiformato &7/&6 non è permessa.') SECLVL('Non è + possibile usare il tracciato &6 della libreria &7 per + aggiornare l''area dati &1 nella libreria &2 perché è + dotato di &9 formati.') FMT((*CHAR 10) (*CHAR 10) + (*CHAR 10) (*DEC 9) (*DEC 9) (*CHAR 10) (*CHAR 10) + (*DEC 9) (*DEC 9) (*CHAR 3)) ADDMSGD MSGID(JDA0005) MSGF(NERONI2/JDTAARA) MSG('Lunghezza area + dati &2/&1 incompatibile con tracciato &7/&6.') + SECLVL('La lunghezza &4 dell''area dati &1 di tipo &3 + nella libreria &2 non rispetta la relazione &10 + richiesta con la lunghezza &8 della struttura dati &6 + nella libreria &7.') FMT((*CHAR 10) (*CHAR 10) (*CHAR + 10) (*DEC 9) (*DEC 9) (*CHAR 10) (*CHAR 10) (*DEC 9) + (*DEC 9) (*CHAR 3)) ADDMSGD MSGID(JDA0006) MSGF(NERONI2/JDTAARA) MSG('Per un''area dati + di tipo &3 non è permesso il parametro struttura + dati.') SECLVL('Essendo l''area dati &1 nella libreria + &2 di tipo &3, non è previsto l''uso di una struttura + dati interpretativa.') FMT((*CHAR 10) (*CHAR 10) + (*CHAR 10) (*DEC 9) (*DEC 9) (*CHAR 10) (*CHAR 10) + (*DEC 9) (*DEC 9) (*CHAR 3)) ADDMSGD MSGID(JDA0011) MSGF(NERONI2/JDTAARA) MSG('Area dati &2/&1 + non modificata.') SECLVL('Per l''area dati &1 di tipo + &3 nella libreria &2 non hai richiesto alcuna modifica + e nessuna modifica è stata eseguita. L''esame è + avvenuto senza fare uso di un tracciato.') FMT((*CHAR + 10) (*CHAR 10) (*CHAR 10) (*DEC 9) (*DEC 9) (*CHAR 10) + (*CHAR 10) (*DEC 9) (*DEC 9) (*CHAR 3)) ADDMSGD MSGID(JDA0012) MSGF(NERONI2/JDTAARA) MSG('Area dati &2/&1 + modificata da altri.') SECLVL('Mentre esitavi + nell''aggiornamento dell''area dati &1 di tipo &3 + nella libreria &2 senza fare uso di un tracciato, un + altro lavoro l''ha modificata. &N Le tue modifiche + sono perdute. Ritenta.') FMT((*CHAR 10) (*CHAR 10) + (*CHAR 10) (*DEC 9) (*DEC 9) (*CHAR 10) (*CHAR 10) + (*DEC 9) (*DEC 9) (*CHAR 3)) ADDMSGD MSGID(JDA0013) MSGF(NERONI2/JDTAARA) MSG('Area dati &2/&1 + modificata senza tracciato.') SECLVL('L''area dati &1 + di tipo &3 e lunghezza &4 nella libreria &2 è stata + felicemente modificata senza tracciato.') FMT((*CHAR + 10) (*CHAR 10) (*CHAR 10) (*DEC 9) (*DEC 9) (*CHAR 10) + (*CHAR 10) (*DEC 9) (*DEC 9) (*CHAR 3)) ADDMSGD MSGID(JDA0021) MSGF(NERONI2/JDTAARA) MSG('Area dati &2/&1 + non modificata.') SECLVL('Per l''area dati &1 di tipo + &3 nella libreria &2 non hai richiesto alcuna modifica + e nessuna modifica è stata eseguita.') FMT((*CHAR 10) + (*CHAR 10) (*CHAR 10) (*DEC 9) (*DEC 9) (*CHAR 10) + (*CHAR 10) (*DEC 9) (*DEC 9) (*CHAR 3)) ADDMSGD MSGID(JDA0022) MSGF(NERONI2/JDTAARA) MSG('Area dati &2/&1 + modificata da altri.') SECLVL('Mentre esitavi + nell''aggiornamento dell''area dati &1 di tipo &3 + nella libreria &2, un altro lavoro l''ha modificata. + &N Le tue modifiche sono perdute. Ritenta.') + FMT((*CHAR 10) (*CHAR 10) (*CHAR 10) (*DEC 9) (*DEC 9) + (*CHAR 10) (*CHAR 10) (*DEC 9) (*DEC 9) (*CHAR 3)) ADDMSGD MSGID(JDA0023) MSGF(NERONI2/JDTAARA) MSG('Area dati &2/&1 + modificata.') SECLVL('L''area dati &1 di tipo &3 nella + libreria &2, lunghezza &4 e decimali &5 è stata + felicemente modificata.') FMT((*CHAR 10) (*CHAR 10) + (*CHAR 10) (*DEC 9) (*DEC 9) (*CHAR 10) (*CHAR 10) + (*DEC 9) (*DEC 9) (*CHAR 3)) ADDMSGD MSGID(JDA0031) MSGF(NERONI2/JDTAARA) MSG('Area dati &2/&1 + non modificata.') SECLVL('Per l''area dati &1 di tipo + &3 nella libreria &2 non hai richiesto alcuna modifica + e nessuna modifica è stata eseguita.') FMT((*CHAR 10) + (*CHAR 10) (*CHAR 10) (*DEC 9) (*DEC 9) (*CHAR 10) + (*CHAR 10) (*DEC 9) (*DEC 9) (*CHAR 3)) ADDMSGD MSGID(JDA0032) MSGF(NERONI2/JDTAARA) MSG('Area dati &2/&1 + modificata da altri.') SECLVL('Mentre esitavi + nell''aggiornamento dell''area dati &1 di tipo &3 + nella libreria &2, un altro lavoro l''ha modificata. + &N Le tue modifiche sono perdute. Ritenta.') + FMT((*CHAR 10) (*CHAR 10) (*CHAR 10) (*DEC 9) (*DEC 9) + (*CHAR 10) (*CHAR 10) (*DEC 9) (*DEC 9) (*CHAR 3)) ADDMSGD MSGID(JDA0033) MSGF(NERONI2/JDTAARA) MSG('Area dati &2/&1 + modificata.') SECLVL('L''area dati &1 di tipo &3 nella + libreria &2 è stata felicemente modificata.') + FMT((*CHAR 10) (*CHAR 10) (*CHAR 10) (*DEC 9) (*DEC 9) + (*CHAR 10) (*CHAR 10) (*DEC 9) (*DEC 9) (*CHAR 3)) /* Messaggi del Cmd. */ /* Nessuno. */ //ENDBCHJOB //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JDTAARAC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Claudio Neroni 10/11/2000 Creato. */ /* Change data area. Cpp */ /*ƒ RIMUOVERE LE UTILITY ASSENTI: KUPDF, TWF, WRKDBF */ /* */ /* Riceve i parametri. */ PGM PARM(&DAQ &DSQ &UP &TOPGMQ &LENREL) /* Area dati qualificata. */ DCL VAR(&DAQ) TYPE(*CHAR) LEN(20) /* Struttura dati qualificata. */ DCL VAR(&DSQ) TYPE(*CHAR) LEN(20) /* Programma di aggiornamento. */ DCL VAR(&UP) TYPE(*CHAR) LEN(10) /* Coda di programma. */ DCL VAR(&TOPGMQ) TYPE(*CHAR) LEN(4) /* Relazione tra le lunghezze. */ DCL VAR(&LENREL) TYPE(*CHAR) LEN(3) /* Area dati. */ DCL VAR(&DA) TYPE(*CHAR) LEN(10) /* Area dati: Libreria. */ DCL VAR(&DALIB) TYPE(*CHAR) LEN(10) /* Struttura dati. */ DCL VAR(&DS) TYPE(*CHAR) LEN(10) /* Struttura dati: Libreria. */ DCL VAR(&DSLIB) TYPE(*CHAR) LEN(10) /* Valore dell'AreaDati alla prima lettura. */ DCL VAR(&RTNVAR1) TYPE(*CHAR) LEN(2000) /* Valore dell'AreaDati alla seconda lettura. */ DCL VAR(&RTNVAR2) TYPE(*CHAR) LEN(2000) /* Valore da imporre all'AreaDati. */ DCL VAR(&RTNVAR3) TYPE(*CHAR) LEN(2000) /* Libreria di produzione. */ DCL VAR(&PRDLIB) TYPE(*CHAR) LEN(10) /* Dati per messaggi. */ DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(512) /* Tipo messaggio. */ DCL VAR(&MSGTYPE) TYPE(*CHAR) LEN(7) /* Identificatori messaggi. */ /* Per default quelli relativi alla modifica di un'AreaDati tramite */ /* una StrutturaDati significativa. */ DCL VAR(&MI1) TYPE(*CHAR) LEN(7) VALUE(JDA0001) DCL VAR(&MI2) TYPE(*CHAR) LEN(7) VALUE(JDA0002) DCL VAR(&MI3) TYPE(*CHAR) LEN(7) VALUE(JDA0003) DCL VAR(&MI4) TYPE(*CHAR) LEN(7) VALUE(JDA0004) DCL VAR(&MI5) TYPE(*CHAR) LEN(7) VALUE(JDA0005) DCL VAR(&MI6) TYPE(*CHAR) LEN(7) VALUE(JDA0006) /* AreaDati. Tipo. */ DCL VAR(&DATYP) TYPE(*CHAR) LEN(10) /* AreaDati. Lunghezza. */ DCL VAR(&DALEN) TYPE(*DEC) LEN(9 0) DCL VAR(&DALENA) TYPE(*CHAR) LEN(5) /* AreaDati. Decimali. */ DCL VAR(&DADEC) TYPE(*DEC) LEN(9 0) DCL VAR(&DADECA) TYPE(*CHAR) LEN(5) /* StrutturaDati. Massima lunghezza record. */ DCL VAR(&DSMRL) TYPE(*DEC) LEN(5 0) DCL VAR(&DSMRLA) TYPE(*CHAR) LEN(5) /* StrutturaDati. Numero dei formati record. */ DCL VAR(&DSNRF) TYPE(*DEC) LEN(4 0) DCL VAR(&DSNRFA) TYPE(*CHAR) LEN(4) /* Lunghezza gestibile (la minima tra AreaDati e StrutturaDati). */ DCL VAR(&MIN) TYPE(*DEC) LEN(9 0) /* Stringa per modifica area dati numerica. */ DCL VAR(&STRING) TYPE(*CHAR) LEN(32) /* Comando da eseguire. */ DCL VAR(&CMD) TYPE(*CHAR) LEN(200) /* Variabile logica. */ DCL VAR(&LGL) TYPE(*LGL) /* Prenotazione del CPF0001. */ DCL VAR(&CPF0001) TYPE(*LGL) /* Intercetta gli errori. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Estrae parametri. */ CHGVAR VAR(&DA) VALUE(%SST(&DAQ 1 10)) CHGVAR VAR(&DALIB) VALUE(%SST(&DAQ 11 10)) CHGVAR VAR(&DS) VALUE(%SST(&DSQ 1 10)) CHGVAR VAR(&DSLIB) VALUE(%SST(&DSQ 11 10)) /* Recupera la libreria dell'AreaDati. */ IF COND(&DA *NE *LDA) THEN(DO) RTVOBJD OBJ(&DALIB/&DA) OBJTYPE(*DTAARA) RTNLIB(&DALIB) ENDDO /* Se richiesta StrutturaDati uguale a AreaDati, nome e lib, la assume.*/ IF COND(&DSQ *EQ *DTAARA) THEN(DO) CHGVAR VAR(&DS) VALUE(&DA) CHGVAR VAR(&DSLIB) VALUE(&DALIB) ENDDO /* Se richiesta StrutturaDati uguale a AreaDati, nome, la assume. */ IF COND(&DS *EQ *NAME) THEN(DO) CHGVAR VAR(&DS) VALUE(&DA) ENDDO /* Decide il tipo messaggio in base alla destinazione. */ IF COND(&TOPGMQ *EQ *EXT) THEN(CHGVAR + VAR(&MSGTYPE) VALUE(*INQ)) ELSE CMD(CHGVAR VAR(&MSGTYPE) VALUE(*DIAG)) /* Recupera la LibreriaDiProduzione. */ RTVOBJD OBJ(JDTAARAC) OBJTYPE(*PGM) RTNLIB(&PRDLIB) /* Dealloca l'AreaDati per rimediare eventuali incidenti precedenti. */ IF COND(&DA *NE *LDA) THEN(DO) DLCOBJ OBJ((&DALIB/&DA *DTAARA *EXCL)) MONMSG MSGID(CPF0000 MCH0000) ENDDO /* Recupera dati e caratteristiche dell'AreaDati. */ CALL PGM(JAIRDA) PARM(&DA &DALIB &DATYP &DALEN + &DADEC &RTNVAR1) /* Converte dati numerici per variabili messaggi. */ CALL PGM(JCVPNPC) PARM(&DALEN &DALENA 5) CALL PGM(JCVPNPC) PARM(&DADEC &DADECA 5) /* Se l'AreaDati è di tipo numerico. */ IF COND(&DATYP *EQ *DEC) THEN(DO) /* Assume altri Identificatori messaggi. */ CHGVAR VAR(&MI1) VALUE(JDA0021) CHGVAR VAR(&MI2) VALUE(JDA0022) CHGVAR VAR(&MI3) VALUE(JDA0023) /* Compone Dati per messaggi. */ CHGVAR VAR(&MSGDTA) VALUE(&DA *CAT &DALIB *CAT + &DATYP *CAT &DALENA *CAT &DADECA *CAT &DS + *CAT &DSLIB *CAT &DSMRLA *CAT &DSNRFA + *CAT &LENREL) /* Se scelta una StrutturaDati, errore. */ IF COND((&DSQ *NE *DTAARA) *AND (&DSQ *NE + *NONE)) THEN(DO) SNDPGMMSG MSGID(&MI6) MSGF(JDTAARA) MSGDTA(&MSGDTA) + TOPGMQ(&TOPGMQ) MSGTYPE(&MSGTYPE) IF COND(&MSGTYPE *EQ *DIAG) THEN(GOTO + CMDLBL(CPF0001)) GOTO CMDLBL(RCLRSC) ENDDO /* Assume la LunghezzaGestibile. */ CHGVAR VAR(&MIN) VALUE(16) /* Assume un nome di fantasia per il membro */ /* del SecondoFileDiTransito. */ CHGVAR VAR(&DS) VALUE(DECIMAL) /* Crea un sorgente di comodo. */ DLTF FILE(QTEMP/JDTAARAS) MONMSG MSGID(CPF0000) CRTSRCPF FILE(QTEMP/JDTAARAS) RCDLEN(92) MBR(JDTAARAS) /* Riempie il sorgente del SecondoFileDiTransito. */ OVRDBF FILE(JDTAARAS) TOFILE(QTEMP/JDTAARAS) + MBR(JDTAARAS) CALL PGM(JDTAARAS) PARM(&DALEN &DADEC) /* Genera il SecondoFileDiTransito compilando il sorgente. */ DLTF FILE(QTEMP/JDTAARA2) MONMSG MSGID(CPF0000) CRTPF FILE(QTEMP/JDTAARA2) SRCFILE(QTEMP/JDTAARAS) + SRCMBR(JDTAARAS) MBR(&DS) /* Se l'AreaDati è di tipo numerico. */ ENDDO /* Se l'AreaDati è di tipo logico. */ IF COND(&DATYP *EQ *LGL) THEN(DO) /* Assume altri Identificatori messaggi. */ CHGVAR VAR(&MI1) VALUE(JDA0031) CHGVAR VAR(&MI2) VALUE(JDA0032) CHGVAR VAR(&MI3) VALUE(JDA0033) /* Compone Dati per messaggi. */ CHGVAR VAR(&MSGDTA) VALUE(&DA *CAT &DALIB *CAT + &DATYP *CAT &DALENA *CAT &DADECA *CAT &DS + *CAT &DSLIB *CAT &DSMRLA *CAT &DSNRFA + *CAT &LENREL) /* Se scelta una StrutturaDati, errore. */ IF COND((&DSQ *NE *DTAARA) *AND (&DSQ *NE + *NONE)) THEN(DO) SNDPGMMSG MSGID(&MI6) MSGF(JDTAARA) MSGDTA(&MSGDTA) + TOPGMQ(&TOPGMQ) MSGTYPE(&MSGTYPE) IF COND(&MSGTYPE *EQ *DIAG) THEN(GOTO + CMDLBL(CPF0001)) GOTO CMDLBL(RCLRSC) ENDDO /* Assume la LunghezzaGestibile. */ CHGVAR VAR(&MIN) VALUE(1) /* Assume un nome di fantasia per il membro */ /* del SecondoFileDiTransito. */ CHGVAR VAR(&DS) VALUE(LOGICAL) /* Genera il SecondoFileDiTransito creandolo estemporaneamente */ /* di lunghezza 1. */ DLTF FILE(QTEMP/JDTAARA2) MONMSG MSGID(CPF0000 MCH0000) CRTPF FILE(QTEMP/JDTAARA2) RCDLEN(1) MBR(&DS) /* Se l'AreaDati è di tipo logico. */ ENDDO /* Se l'AreaDati è di tipo carattere. */ IF COND(&DATYP *EQ *CHAR) THEN(DO) /* Se richiesta StrutturaDati *NONE. */ IF COND(&DSQ *EQ *NONE) THEN(DO) /* Assume la StrutturaDati *NONE (SenzaTracciato). */ CHGVAR VAR(&DS) VALUE(JDTAARA2) CHGVAR VAR(&DSLIB) VALUE(QTEMP) /* Assume altri Identificatori messaggi. */ CHGVAR VAR(&MI1) VALUE(JDA0011) CHGVAR VAR(&MI2) VALUE(JDA0012) CHGVAR VAR(&MI3) VALUE(JDA0013) /* Genera il SecondoFileDiTransito creandolo estemporaneamente */ /* della lunghezza opportuna. */ DLTF FILE(QTEMP/JDTAARA2) MONMSG MSGID(CPF0000 MCH0000) CRTPF FILE(QTEMP/JDTAARA2) RCDLEN(&DALEN) /* Se richiesta StrutturaDati *NONE. */ ENDDO /* Controlla l'esistenza della StrutturaDati. */ RTVOBJD OBJ(&DSLIB/&DS) OBJTYPE(*FILE) RTNLIB(&DSLIB) /* Recupera caratteristiche della StrutturaDati. */ JRTVFD FILE(&DS) LIB(&DSLIB) MAXRCDLEN(&DSMRL) + NBRRCDFMT(&DSNRF) /* Converte dati numerici per variabili messaggi. */ CALL PGM(JCVPNPC) PARM(&DSMRL &DSMRLA 5) CALL PGM(JCVPNPC) PARM(&DSNRF &DSNRFA 4) /* Compone Dati per messaggi. */ CHGVAR VAR(&MSGDTA) VALUE(&DA *CAT &DALIB *CAT + &DATYP *CAT &DALENA *CAT &DADECA *CAT &DS + *CAT &DSLIB *CAT &DSMRLA *CAT &DSNRFA + *CAT &LENREL) /* Calcola la LunghezzaGestibile */ /* come la minima tra AreaDati e StrutturaDati. */ CHGVAR VAR(&MIN) VALUE(&DALEN) IF COND(&DSMRL *LT &MIN) THEN(CHGVAR VAR(&MIN) + VALUE(&DSMRL)) /* Se richiesta StrutturaDati diversa da *NONE. */ IF COND(&DSQ *NE *NONE) THEN(DO) /* Se la StrutturaDati è multiformato, errore. */ IF COND(&DSNRF *GT 1) THEN(DO) SNDPGMMSG MSGID(&MI4) MSGF(JDTAARA) MSGDTA(&MSGDTA) + TOPGMQ(&TOPGMQ) MSGTYPE(&MSGTYPE) IF COND(&MSGTYPE *EQ *DIAG) THEN(GOTO + CMDLBL(CPF0001)) GOTO CMDLBL(RCLRSC) ENDDO /* Se le lunghezze di AreaDati e StrutturaDati */ /* sono incompatibili con la relazione richiesta, errore. */ IF COND(((&LENREL *EQ '*EQ') *AND *NOT (&DSMRL + *EQ &DALEN)) *OR ((&LENREL *EQ '*GE') + *AND *NOT (&DSMRL *GE &DALEN)) *OR + ((&LENREL *EQ '*LE') *AND *NOT (&DSMRL + *LE &DALEN))) THEN(DO) SNDPGMMSG MSGID(&MI5) MSGF(JDTAARA) MSGDTA(&MSGDTA) + TOPGMQ(&TOPGMQ) MSGTYPE(&MSGTYPE) IF COND(&MSGTYPE *EQ *DIAG) THEN(GOTO + CMDLBL(CPF0001)) GOTO CMDLBL(RCLRSC) ENDDO /* Genera il SecondoFileDiTransito duplicando la StrutturaDati. */ JCPYCLR FROMFILE(&DSLIB/&DS) TOFILE(JDTAARA2) MBR1(&DS) /* Se richiesta StrutturaDati diversa da *NONE. */ ENDDO /* Se l'AreaDati è di tipo carattere. */ ENDDO /* Genera il PrimoFileDiTransito. */ JCPYCLR FROMFILE(&PRDLIB/JDTAARA1) TOFILE(JDTAARA1T) /* Copia l'AreaDati nella Variabile da manipolare. */ CHGVAR VAR(&RTNVAR3) VALUE(&RTNVAR1) /* Copia l'AreaDati nel PrimoFileDiTransito. */ OVRDBF FILE(JDTAARA1) TOFILE(QTEMP/JDTAARA1T) CALL PGM(JDTAARAD) PARM(&RTNVAR3) DLTOVR FILE(*ALL) /* Copia il PrimoFileDiTransito (senza tracciato) */ /* nel SecondoFileDiTransito (con il tracciato predisposto). */ CPYF FROMFILE(QTEMP/JDTAARA1T) + TOFILE(QTEMP/JDTAARA2) MBROPT(*REPLACE) + FMTOPT(*NOCHK) /* Se richiesto DFU come ProgrammaDiAggiornamento, lo chiama. */ IF COND(&UP *EQ DFU) THEN(DO) UPDDTA FILE(QTEMP/JDTAARA2) MBR(&DS) ENDDO /*ƒ RIMUOVERE LE UTILITY ASSENTI: KUPDF. */ /* Se richiesto KUPDF come ProgrammaDiAggiornamento, lo chiama. */ IF COND(&UP *EQ KUPDF) THEN(DO) /*********** KUPDF FILE(QTEMP/JDTAARA2) MEMBRO(&DS) ***************/ ENDDO /*ƒ RIMUOVERE LE UTILITY ASSENTI: TWF. */ /* Se richiesto TWF come ProgrammaDiAggiornamento, lo chiama. */ IF COND(&UP *EQ TWF) THEN(DO) /*********** TWF FILE(QTEMP/JDTAARA2) MBR(&DS) MODE(*CHG) + FORMAT(*SINGLE) ACCKEY(*NO) PROMPT(*NMTX) + HEADING(*NAME) MULTVIEW(2) MAXREC(1) + RVKDSP(*YES) RVKADD(*YES) RVKDLT(*YES) + RVKCHGM(*NO) *******************************/ ENDDO /*ƒ RIMUOVERE LE UTILITY ASSENTI: WRKDBF. */ /* Se richiesto WRKDBF come ProgrammaDiAggiornamento, lo chiama. */ IF COND(&UP *EQ WRKDBF) THEN(DO) WRKDBF FILENAME(QTEMP/JDTAARA2) MBR(&DS) ENDDO /* Copia indietro il SecondoFileDiTransito nel PrimoFileDiTransito. */ CPYF FROMFILE(QTEMP/JDTAARA2) + TOFILE(QTEMP/JDTAARA1T) MBROPT(*REPLACE) + FMTOPT(*NOCHK) /* Copia indietro il PrimoFileDiTransito nella Variabile. */ OVRDBF FILE(JDTAARA1) TOFILE(QTEMP/JDTAARA1T) CALL PGM(JDTAARAE) PARM(&RTNVAR3) DLTOVR FILE(*ALL) /* Se la Variabile non ha cambiato valore, messaggia e abbandona. */ IF COND(%SST(&RTNVAR3 1 &MIN) *EQ %SST(&RTNVAR1 + 1 &MIN)) THEN(DO) SNDPGMMSG MSGID(&MI1) MSGF(JDTAARA) MSGDTA(&MSGDTA) + MSGTYPE(*COMP) GOTO CMDLBL(RCLRSC) ENDDO /* Alloca esclusivamente l'AreaDati per aggiornarla. */ IF COND(&DA *NE *LDA) THEN(DO) ALCOBJ OBJ((&DALIB/&DA *DTAARA *EXCL)) ENDDO /* Recupera dati e caratteristiche dell'AreaDati. */ CALL PGM(JAIRDA) PARM(&DA &DALIB &DATYP &DALEN + &DADEC &RTNVAR2) /* Se l'AreaDati ha cambiato valore, messaggia e abbandona. */ IF COND(&RTNVAR2 *NE &RTNVAR1) THEN(DO) /* Manda messaggio di infelice esecuzione. */ SNDPGMMSG MSGID(&MI2) MSGF(JDTAARA) MSGDTA(&MSGDTA) + TOPGMQ(&TOPGMQ) MSGTYPE(&MSGTYPE) IF COND(&MSGTYPE *EQ *DIAG) THEN(GOTO + CMDLBL(CPF0001)) GOTO CMDLBL(RCLRSC) ENDDO /* Se l'AreaDati è di tipo numerico. */ IF COND(&DATYP *EQ *DEC) THEN(DO) /* Trascrive il valore numerico impaccato dalla Variabile */ /* alla Stringa adatta alla modifica. */ CALL PGM(JCVPCST) PARM(&RTNVAR3 &DALEN &DADEC + &STRING) /* Compone un comando eseguibile. */ CHGVAR VAR(&CMD) VALUE('CHGDTAARA DTAARA(' *CAT + &DALIB *TCAT '/' *TCAT &DA *TCAT ') + VALUE(' *TCAT &STRING *TCAT ')') /* Esegue il comando. */ CALL PGM(QCMDEXC) PARM(&CMD 200) /* Se l'AreaDati è di tipo numerico. */ ENDDO /* Se l'AreaDati è di tipo logico. */ IF COND(&DATYP *EQ *LGL) THEN(DO) /* Sceglie il valore logico. */ IF COND(%SST(&RTNVAR3 1 1) *EQ '0') THEN(CHGVAR + VAR(&LGL) VALUE('0')) ELSE CMD(CHGVAR VAR(&LGL) VALUE('1')) /* Modifica l'AreaDati. */ CHGDTAARA DTAARA(&DALIB/&DA) VALUE(&LGL) /* Se l'AreaDati è di tipo logico. */ ENDDO /* Se l'AreaDati è di tipo carattere. */ IF COND(&DATYP *EQ *CHAR) THEN(DO) /* Copia la Variabile nell'AreaDati solo per la LunghezzaGestibile. */ IF COND(&DA *NE *LDA) THEN(DO) CHGDTAARA DTAARA(&DALIB/&DA (1 &MIN)) + VALUE(%SST(&RTNVAR3 1 &MIN)) ENDDO ELSE CMD(DO) CHGDTAARA DTAARA(&DA (1 &MIN)) VALUE(%SST(&RTNVAR3 1 + &MIN)) ENDDO /* Se l'AreaDati è di tipo carattere. */ ENDDO /* Manda messaggio di felice esecuzione. */ SNDPGMMSG MSGID(&MI3) MSGF(JDTAARA) MSGDTA(&MSGDTA) + MSGTYPE(*COMP) /* Label di esecuzione delle attività finali. */ RCLRSC: /* Riacquisisce le risorse. */ RCLRSC MONMSG MSGID(CPF0000 MCH0000) /* Dealloca l'AreaDati. */ IF COND(&DA *NE *LDA) THEN(DO) DLCOBJ OBJ((&DALIB/&DA *DTAARA *EXCL)) MONMSG MSGID(CPF0000 MCH0000) ENDDO /* Se richiesto, rilascia il CPF0001. */ IF COND(&CPF0001) THEN(DO) SNDPGMMSG MSGID(CPF0001) MSGF(QCPFMSG) MSGDTA(JDTAARA) + 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(JDTAARAD) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /TITLE Change data area. VarToFile * Claudio Neroni 11/11/2000 Creato. * Copia il parametro ricevuto nell'unico record del file * di transito. * La lunghezza trattata è la massima consentita per un'area dati. FJdtaara1 o e disk C *entry plist C parm p2000 2000 C movel(p) p2000 f2000 C write r2000 C seton lr //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JDTAARAE) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /TITLE Change data area. FileToVar * Claudio Neroni 11/11/2000 Creato. * Copia l'unico record del file di transito nel parametro * di ritorno. FJdtaara1 ip e disk C *entry plist C parm f2000 C seton lr //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JDTAARAP) FILETYPE(*SRC) ENDCHAR('//ENDSRC') :PNLGRP. .*--------------------------------------------------------------------- :HELP NAME=CMD. :H3.Comando JDTAARA :H2.Modifica un'area dati :P.Il comando permette di modificare il contenuto di un'area dati di qualunque tipo. La modifica avviene a ricalco digitando sopra i valori precedenti. :P.Se l'area dati è alfanumerica, la modifica può avvenire tramite il tracciato di una struttura dati. :PC.Per eseguire il ricalco dei dati, si usa uno dei programmi di servizio disponibili: DFU, TWF, WRKDBF o, alla disperata, KUPDF. :P.Il comando trascrive i dati in un file di transito che viene manipolato dal programma di servizio scelto. Quando quest'ultimo viene mandato a fine, i dati, se modificati, vengono ritrascritti nell'area dati. :EHELP. .*--------------------------------------------------------------------- :HELP name='CMD/dtaara'. :H3.Data area (DTAARA) - data area :P.Nome dell'area dati da modificare. :P.Valori permessi: :PARML. :PT.nome-area-dati :PD.Il valore è obbligatorio. :EPARML. :H3.Data area (DTAARA) - library :P.Nome della libreria in cui risiede l'area dati. :P.Valori permessi: :PARML. :PT.:PK DEF.*LIBL:EPK.€ :PD.L'area dati viene cercata in lista librerie. :PT.nome-libreria :PD.L'area dati viene cercata nella libreria richiesta. :EPARML. :EHELP. .*--------------------------------------------------------------------- :HELP name='CMD/ds'. :H3.Data structure (DS) - data structure :P.Nome della struttura dati da usare come tracciato durante la modifica. :PC.Il parametro ha significato solo se l'area dati è alfanumerica. :P.Valori permessi: :PARML. :PT.:PK DEF.*DTAARA:EPK.€ :PD.Richiede l'uso di una struttura dati omonima dell'area dati e residente nella stessa libreria. :PC.Parametro singolo. :PT.*NAME :PD.Richiede l'uso di una struttura dati omonima dell'area dati e residente nella libreria specificata nel qualificatore. :PT.*NONE :PD.Non viene usato alcun tracciato. :PC.Parametro singolo. :PT.nome-struttura-dati :PD.Indicare il nome di una struttura dati da usare come tracciato durante la modifica. :EPARML. :H3.Data structure (DS) - library :P.Nome della libreria in cui risiede la struttura dati. :P.Valori permessi: :PARML. :PT.:PK DEF.*LIBL:EPK.€ :PD.La struttura dati viene cercata in lista librerie. :PT.nome-libreria :PD.La struttura dati viene cercata nella libreria richiesta. :EPARML. :EHELP. .*--------------------------------------------------------------------- :HELP name='CMD/updpgm'. :H3.Update program (UPDPGM) :P.Programma da usare durante la modifica. :NOTE.Si ipotizza la presenza sul sistema di almeno un programma di manutenzione archivi che faccia da manipolatore del file di transito in cui vengono trascritti i dati da modificare. :ENOTE. :P.Valori permessi: :PARML. :PT.:PK DEF.DFU:EPK.€ :PD.Viene utilizzato il programma Data File Utility Ibm. :PT.KUPDF :PD.Viene utilizzato il programma Update File del Modulo Base Ibm. :PC.Questo programma non fa uso di tracciati ed è perciò il meno indicato tra quelli elencati. :PT.TWF :PD.Viene utilizzato il programma Tool that Work with File Datasys. :PT.WRKDBF :PD.Viene utilizzato il programma Work with Data Base File di ... :EPARML. :EHELP. .*--------------------------------------------------------------------- :HELP name='CMD/topgmq'. :H3.To program queue (TOPGMQ) :P.Coda messaggi a cui segnalare. :P.Normalmente è sufficiente che i messaggi di completamento vengano mandati al programma chiamante che li visualizza nel modo migliore, ad esempio nel log a video per l'immissione comandi o nel subfile messaggi per le righe comandi. :PC.Se invece il programma chiamante non possiede questa capacità e se l'esecuzione del comando avviene in un contesto guidato e rigido, è possibile mandare i messaggi alla coda esterna che li visualizza immediatamente. :P.Valori permessi: :PARML. :PT.:PK DEF.*PRV:EPK.€ :PD.La coda a cui segnalare è quella del programma chiamante. :PT.*EXT :PD.La coda a cui segnalare è quella esterna. :EPARML. :EHELP. .*--------------------------------------------------------------------- :HELP name='CMD/lenrel'. :H3.Length relation (DS Vs DtaAra) (LENREL) :P.Relazione tra la lunghezza della struttura dati e quella dell'area dati. :PC.Il parametro ha significato solo se l'area dati è alfanumerica. :P.Il primo dei controlli di congruenza e, per ora l'unico, permette di imporre che la struttura dati abbia la stessa lunghezza dell'area dati. Naturalmente sono previste anche diseguaglianze in entrambi i sensi. :P.Valori permessi: :PARML. :PT.:PK DEF.*EQ:EPK.€ :PD.La struttura deve avere la stessa lungezza dell'area. :PT.*LE :PD.La struttura deve avere lungezza minore o uguale all'area. :PT.*GE :PD.La struttura deve avere lungezza maggiore o uguale all'area. :EPARML. :EHELP. .*--------------------------------------------------------------------- :EPNLGRP. //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JDTAARAS) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /TITLE Change data area. CrtSrc * Claudio Neroni 28/11/2000 Creato. * Crea il sorgente della struttura dati interpretativa * delle aree dati decimali. FJdtaaras o f 92 disk D stm s 92 dim(4) ctdata perrcd(1) C *entry plist C parm len 9 0 C parm dec 9 0 C z-add len len5 5 0 C z-add dec dec2 2 0 C except wri C seton lr OJdtaaras e wri O stm(1) O e wri O stm(2) O len5 46 O dec2 49 O e wri O stm(3) O len5 73 O e wri O stm(4) O dec2 70 ** 000100000000 A R DECIMALR TEXT('Number') 000200000000 A DECIMAL 00024 09 COLHDG('Number' + 000300000000 A 'len 00024' + 000400000000 A 'dec 09') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JDTAARA1) FILETYPE(*SRC) ENDCHAR('//ENDSRC') A R R2000 A F2000 2000 //ENDSRC //ENDBCHJOB