En la TAATOOL existía un comando ADDTIM.
Aquí va la version traducida: un CMD (ADDTIM) y un CLP (ADDTIMCL). En el fuente del comando aparece el modo de creación. Saludos Ignacio ________________________________ De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] En nombre de Albert López Enviado el: Miércoles 14 de Noviembre de 2007 11:08 Para: [email protected] Asunto: Hora... Hola a todos, sabeis de alguna funcion para sumarle minutos a una hora en CLLE ?... O sea,... teniendo por ejemplo.. RTVSYSVAL SYSVAL(QTIME) RTNVAR(&HORA) poder hacer algo parecido a HORA + 5, para sumar 5 minutos. Ya sé que con RPG se puede hacer... pero me interessaria poderlo hacer en una CLLE, si es posible, Gracias de antemano... Albert López I.T. Department Departamento de Sistemas [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> Ext. 1129 FLUIDRA | Filadors, 35-41 Planta 4a | 08208 Sabadell - Barcelona | Spain | Tel. +34 937 243 900 | Fax. +34 937 238 665 | www.fluidra.com <http://www.fluidra.com/> This e-mail may contain confidential or priviliged information. If you are not the intended recipient please advise by return email and delete immediately without regarding or fowarding to others. P Antes de imprimir este mensaje, asegúrese de que es necesario. El medio ambiente está en nuestra mano. Please consider your environmental responsibility before printing this e-mail.
<<image001.gif>>
/* ADDTIMCL - Add time ** DE TAATOOL ** */
PGM PARM(&NBRSEC &ENDTIM &ENDDAT &ENDHR &ENDMIN +
&BGNTIM &BGNDAT)
DCL VAR(&NBRSEC) TYPE(*DEC) LEN(5)
DCL VAR(&ENDTIM) TYPE(*CHAR) LEN(6)
DCL VAR(&ENDDAT) TYPE(*CHAR) LEN(6)
DCL VAR(&ENDHR) TYPE(*CHAR) LEN(2)
DCL VAR(&ENDMIN) TYPE(*CHAR) LEN(2)
DCL VAR(&BGNTIM) TYPE(*CHAR) LEN(6)
DCL VAR(&BGNDAT) TYPE(*CHAR) LEN(6)
DCL VAR(&DAYS) TYPE(*DEC) LEN(5 0)
DCL VAR(&TIMEA) TYPE(*CHAR) LEN(6)
DCL VAR(&WORK2) TYPE(*DEC) LEN(2 0)
DCL VAR(&HRS) TYPE(*DEC) LEN(5 0)
DCL VAR(&MIN) TYPE(*DEC) LEN(5 0)
DCL VAR(&SEC) TYPE(*DEC) LEN(5 0)
DCL VAR(&DATEA) TYPE(*CHAR) LEN(6)
DCL VAR(&DATEN) TYPE(*DEC) LEN(6 0)
DCL VAR(&NEWDAT) TYPE(*CHAR) LEN(6)
DCL VAR(&ERRORSW) TYPE(*LGL) /* Std err */
DCL VAR(&MSGID) TYPE(*CHAR) LEN(7) /* Std err */
DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(100) /* Std err */
DCL VAR(&MSGF) TYPE(*CHAR) LEN(10) /* Std err */
DCL VAR(&MSGFLIB) TYPE(*CHAR) LEN(10) /* Std err */
DCL VAR(&KEYVAR) TYPE(*CHAR) LEN(4) /* Std err */
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(STDERR1)) /* +
Std err */
CHGVAR VAR(&SEC) VALUE(&NBRSEC) /* Parm */
IF COND(&BGNTIM *EQ 'CURTIM') THEN(DO) /* Use +
curr time */
RTVSYSVAL SYSVAL(QTIME) RTNVAR(&TIMEA)
ENDDO /* Use curr time */
ELSE CMD(CHGVAR VAR(&TIMEA) VALUE(&BGNTIM)) /* +
Begin time */
CHGVAR VAR(&WORK2) VALUE(%SST(&TIMEA 1 2)) /* +
Extract hours */
CHGVAR VAR(&HRS) VALUE(&WORK2) /* Numeric hours */
CHGVAR VAR(&WORK2) VALUE(%SST(&TIMEA 3 2))
CHGVAR VAR(&MIN) VALUE(&WORK2) /* Minutes */
CHGVAR VAR(&WORK2) VALUE(%SST(&TIMEA 5 2))
CHGVAR VAR(&SEC) VALUE(&SEC + &WORK2) /* Seconds */
SECLOOP: IF COND(&SEC *GE 60) THEN(DO) /* More than 60 +
secs */
CHGVAR VAR(&SEC) VALUE(&SEC - 60)
CHGVAR VAR(&MIN) VALUE(&MIN + 1)
GOTO CMDLBL(SECLOOP)
ENDDO /* More than 60 secs */
NEGSEC: IF COND(&SEC *LT 0) THEN(DO) /* Negative +
seconds */
CHGVAR VAR(&SEC) VALUE(&SEC + 60)
CHGVAR VAR(&MIN) VALUE(&MIN - 1)
GOTO CMDLBL(NEGSEC)
ENDDO /* Negative seconds */
MINLOOP: IF COND(&MIN *GE 60) THEN(DO) /* More than 60 +
min */
CHGVAR VAR(&MIN) VALUE(&MIN - 60)
CHGVAR VAR(&HRS) VALUE(&HRS + 1)
GOTO MINLOOP
ENDDO /* More than 60 min */
NEGMIN: IF COND(&MIN *LT 0) THEN(DO) /* Negative +
minutes */
CHGVAR VAR(&MIN) VALUE(&MIN + 60)
CHGVAR VAR(&HRS) VALUE(&HRS - 1)
GOTO CMDLBL(NEGMIN)
ENDDO /* Negative minutes */
HRSLOOP: IF COND(&HRS *GE 24) THEN(DO) /* More than 24 +
hrs */
CHGVAR VAR(&HRS) VALUE(&HRS - 24)
CHGVAR VAR(&DAYS) VALUE(&DAYS + 1)
GOTO CMDLBL(HRSLOOP)
ENDDO /* More than 24 hrs */
NEGHRS: IF (&HRS *LT 0) DO /* Negative hours */
CHGVAR VAR(&HRS) VALUE(&HRS + 24)
CHGVAR VAR(&DAYS) VALUE(&DAYS - 1)
GOTO CMDLBL(NEGHRS)
ENDDO /* Negative hours */
CHGVAR VAR(%SST(&ENDTIM 1 2)) VALUE(&HRS) /* +
Assemble end time */
MONMSG MSGID(MCH3601) /* Parm not specified */
CHGVAR %SST(&ENDTIM 3 2) &MIN
MONMSG MSGID(MCH3601) /* Parm not specified */
CHGVAR %SST(&ENDTIM 5 2) &SEC
MONMSG MSGID(MCH3601) /* Parm not specified */
CHGVAR &ENDHR &HRS
MONMSG MSGID(MCH3601) /* Parm not specified */
CHGVAR &ENDMIN &MIN
MONMSG MSGID(MCH3601) /* Parm not specified */
IF COND(&BGNDAT *EQ 'CURDAT') THEN(RTVSYSVAL +
SYSVAL(QDATE) RTNVAR(&DATEA)) /* Use curr +
date */
ELSE CMD(CHGVAR VAR(&DATEA) VALUE(&BGNDAT))
CHGVAR VAR(&DATEN) VALUE(&DATEA) /* Make numeric */
IF COND(&DAYS *NE 0) THEN(DO) /* Add for more +
days */
ADDDAT DAYS(&DAYS) TOVAR(&NEWDAT) DATE(&DATEN)
CHGVAR VAR(&DATEA) VALUE(&NEWDAT)
ENDDO /* Add for more days */
CHGVAR VAR(&ENDDAT) VALUE(&DATEA) /* Move to return +
parm */
MONMSG MSGID(MCH3601) /* Parm not specified */
RMVMSG CLEAR(*ALL)
RETURN /* Normal end of program */
STDERR1: /* Standard error handling routine */
IF COND(&ERRORSW) THEN(SNDPGMMSG MSGID(CPF9999) +
MSGF(QCPFMSG) MSGTYPE(*ESCAPE)) /* Func +
chk */
CHGVAR VAR(&ERRORSW) VALUE('1') /* Set to fail if +
error occurs */
STDERR2: RCVMSG MSGTYPE(*DIAG) RMV(*NO) KEYVAR(&KEYVAR) +
MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) +
SNDMSGFLIB(&MSGFLIB)
IF COND(&KEYVAR *EQ ' ') THEN(GOTO +
CMDLBL(STDERR3))
RMVMSG MSGKEY(&KEYVAR)
SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
MSGDTA(&MSGDTA) MSGTYPE(*DIAG)
GOTO STDERR2 /* Loop back for addl diagnostics */
STDERR3: RCVMSG MSGTYPE(*EXCP) MSGDTA(&MSGDTA) MSGID(&MSGID) +
MSGF(&MSGF) SNDMSGFLIB(&MSGFLIB)
SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE)
ENDPGM
/* ADDTIMCL - Add time - ADDTIM cmd */
/*PARMS PGM(ADDTIMCL) ALLOW((*IPGM)(*BPGM)) PRDLIB(DISTOOLS) */
/* */
/* The ADDTIM command adds a variable number of seconds to either */
/* the current time or an entered time and returns an ending */
/* time. An ending date is also returned. A beginning date can */
/* be entered. */
/* */
/* The CPP is ADDTIMCL */
/* */
CMD PROMPT('Add time')
PARM KWD(NBRSECS) TYPE(*DEC) LEN(5 0) MIN(1) +
PROMPT('NBR de segundos a agregar(5 0)')
PARM KWD(ENDTIM) TYPE(*CHAR) LEN(6) RTNVAL(*YES) +
PROMPT('Hora final (6)')
PARM KWD(ENDDAT) TYPE(*CHAR) LEN(6) RTNVAL(*YES) +
PROMPT('Fecha final (6)')
PARM KWD(ENDHR) TYPE(*CHAR) LEN(2) RTNVAL(*YES) +
PROMPT('Hora Final HH (2)')
PARM KWD(ENDMIN) TYPE(*CHAR) LEN(2) RTNVAL(*YES) +
PROMPT('Minuto final MM (2)')
PARM KWD(BGNTIM) TYPE(*CHAR) LEN(6) DFT(*CURTIM) +
REL(*GT 0) SPCVAL((*CURTIM CURTIM)) +
PROMPT('Hora inicial (6)')
PARM KWD(BGNDAT) TYPE(*CHAR) LEN(6) DFT(*CURDAT) +
REL(*GT 0) SPCVAL((*CURDAT CURDAT)) +
PROMPT('Fecha inicial en FMT sist. (6)')
__________________________________________________ Forum.HELP400 es un servicio m&#225;s de NEWS/400. &#169; Publicaciones Help400, S.L. - Todos los derechos reservados http://www.help400.es _____________________________________________________ Para darte de baja visita la siguente URL: http://listas.combios.es/mailman/listinfo/forum.help400

