|
Capito! -Bob Cozzi www.RPGxTools.com RPG xTools - Enjoy programming again. -----Original Message----- From: mi400-bounces@xxxxxxxxxxxx [mailto:mi400-bounces@xxxxxxxxxxxx] On Behalf Of Beppe Costa Sent: Monday, October 17, 2005 8:39 AM To: MI Programming on the AS400 / iSeries Subject: Re: [MI400] Compute Date Duration Bob, you aren't missing anything. I already have some basic knowledge of the various RPG opcodes like %DIFF, xxxDUR, etc. but my main program is in MI and not in RPG. I already solved the problem by calculating the object aging in another way but I'm still interested in seeing how the MI/CDD works. (isn't this the MI forum ?) The sample code has been posted in RPG just to make it easier to understand the CDD. Giuseppe. ----- Original Message ----- From: "Bob Cozzi" <cozzi@xxxxxxxxx> To: "'MI Programming on the AS400 / iSeries'" <mi400@xxxxxxxxxxxx> Sent: Monday, October 17, 2005 3:08 PM Subject: RE: [MI400] Compute Date Duration > Did I miss something? Why wouldn't you use SUBDUR in RPG IV to calculate the > number of days between two dates? The question always get is how to do > exactly what you've already done; calculate 50 years, 11 months, 30 days. > Which you can't do natively in RPG IV, directly. > > -Bob Cozzi > www.RPGxTools.com > RPG xTools - Enjoy programming again. > > -----Original Message----- > From: mi400-bounces+cozzi=rpgiv.com@xxxxxxxxxxxx > [mailto:mi400-bounces+cozzi=rpgiv.com@xxxxxxxxxxxx] On Behalf Of Beppe Costa > Sent: Monday, October 17, 2005 3:39 AM > To: MI Programming on the AS400 / iSeries > Subject: Re: [MI400] Compute Date Duration > > For those who are interested to explore the MI builtin _CDD, the code > follows. > > It returns a duration in the format 8,0 Pack. In this case the returned > value is 00501130 (that is 50 years + 11 month + 30 days). > > Than, how can I convert this figure to a number of days ? > > I've also tried to use CVTD but always unsuccesfully. > > =========== > > h dftactgrp(*no) actgrp('QILE') > > d DateFrom s 10 inz('1954-12-03') > d DateTo s 10 inz('2005-12-02') > > d Duration s 8P 0 > > d CDD PR ExtProc('_CDD') > d DateDuration * value > d Date1 * value > d Date2 * value > d InstTemplate * value > > d TemplateT1 ds > d TemplateSize 10I 0 inz(%len(TemplateT1)) > d DDAT_1 5I 0 inz(1) > d DDAT_2 5I 0 inz(2) > d DDAT_3 5I 0 inz(2) > d Reserved1_2 2 inz(*allx'00') > d Length_2 5I 0 inz(10) > d Length_3 5I 0 inz(10) > d Reserved3_26 26 inz(*allx'00') > > d*---- DDAT list --- > d DDAT_Size 10I 0 inz(198) > d Num_DDATs 5I 0 inz(2) > d Reserved4_10 10 inz(*allx'00') > d D1_Offset 10I 0 inz(24) > d D2_Offset 10I 0 inz(140) > > d*---- DDAT_1 ------ > d D1_lenght 5I 0 inz(116) > d D1_format 5I 0 inz(x'0014') > d D1_datseptype 1 inz(x'00') > d D1_timseptype 1 inz(x'00') > d D1_hourzone 5I 0 inz(0) > d D1_minzone 5I 0 inz(0) > d D1_monthdef 5I 0 inz(0) > d D1_yeardef 5I 0 inz(0) > d D1_curcent 10I 0 inz(0) > d D1_centdiv 10I 0 inz(0) > d D1_caltoff 10I 0 inz(0) > d D1_resvd1_6 6 inz(*allx'00') > d D1_eratableN 5I 0 inz(0) > d D1_eratable 48 inz(*allx'00') > d D1_caltableN 5I 0 inz(0) > d D1_caltable1n 16 inz(*allx'00') > d D1_caltable2 16 inz(*allx'00') > > d*---- DDAT_2 ------ > d D2_lenght 5I 0 inz(116) > d D2_format 5I 0 inz(x'0003') > > d*-D2_separator 2 > d D2_datseptype 1 inz(x'00') > d D2_timseptype 1 inz(x'00') > d*-D2_timezone 4 > d D2_hourzone 5I 0 inz(0) > d D2_minzone 5I 0 inz(0) > d*-D2_duratdef 4 > d D2_monthdef 5I 0 inz(0) > d D2_yeardef 5I 0 inz(0) > d*-D2_century 8 > d D2_curcent 10I 0 inz(0) > d D2_centdiv 10I 0 inz(0) > > d D2_caltoff 10I 0 inz(82) > d D2_resvd1_6 6 inz(*allx'00') > > d*-D2_eratb 50 inz(*allx'00') > d D2_eratbNum 5I 0 inz(1) > d D2_eratbOrig 10I 0 inz(1721424) > d D2_eratbName 32 inz('AD') > d D2_eratbRsvd 12 inz(*allx'00') > > d*-D2_caltable 34 inz(*allx'00') > d D2_caltbNum 5I 0 inz(2) > d D2_caltb1Date 10I 0 inz(1721424) > d D2_caltb1Type 5I 0 inz(x'0001') > d D2_caltb1Rsvd 10 inz(*allx'00') > d D2_caltb2Date 10I 0 inz(5373485) > d D2_caltb2Type 5I 0 inz(x'0000') > d D2_caltb2Rsvd 10 inz(*allx'00') > > /free > > CDD (%addr(duration): > %addr(DateTo): > %addr(DateFrom): > %addr(TemplateT1)); > > *inlr = *on; > > /end-free > > > > > ----- Original Message ----- > From: "Dave McKenzie" <davemck@xxxxxxxxxxxxx> > To: "MI Programming on the AS400 / iSeries" <mi400@xxxxxxxxxxxx> > Sent: Friday, October 14, 2005 6:27 PM > Subject: Re: [MI400] Compute Date Duration > > > > Beppe, > > > > In the CDD documentation it says "The DDAT for operand 1 must be valid > > for a date duration." > > > > In the list of format codes it lists "Date duration" (x14) as separate > > from the "Labeled durations" (x0D - x13). > > > > Maybe that means that the only valid format code for operand 1 is x14. > > > > In any case, I don't know exactly what a "labeled duration" is. > > > > --Dave > > > > Beppe Costa wrote: > > > I've tried to call CDD from RPG as ExtProc('_CDD') and from MI. > > > > > > When the DDAT 1 is of type x'0014' I pass a pointer to a packed 8,0 and > CDD > > > returns correct data (number of years+number of month+number of days). > > > > > > When the DDAT 1 is of type x'000F' I pass a pointer to a packed 15,0 and > it > > > fails. The message says "exactly" that the error is at offset x'0004' > where > > > DDAT 1 starts. > > > > > > A similar error occurs when I use a format other than ISO or a char(6) > date > > > for DDAT 2 and DDAT 3. > > > > > > For example If I use a YYMMDD date it works fine. If I try to use a > CYYMMDD > > > or another format it crashes and the MCH5601 signals the offset od DDAT > 2. > > > > > > Btw in the meanwhile I solved the problem and I compute the duration in > > > another way but it would be interesting to see if there is someone that > > > tried to use this instruction. > > > > > > Giuseppe. > > > > > > ----- Original Message ----- > > > From: "Postmaster" <fbns@xxxxxxxxxxxxxxxxx> > > > To: "MI Programming on the AS400 / iSeries" <mi400@xxxxxxxxxxxx> > > > Sent: Tuesday, October 11, 2005 1:24 PM > > > Subject: Re: [MI400] Compute Date Duration > > > > > > > > >>On 11/10/2005, at 6:48 PM, Beppe Costa wrote: > > >> > > >>>Simon, > > >>>I don't think that there is a validation on the output parameter > > >>>because > > >>>it's only a pointer. > > >>Are you trying to run CDD from C or MI? If from C then you pass a > > >>pointer to a packed decimal variable. If from MI then you pass the > > >>scalar itself. > > >> > > >>The error you reported is caused by validating the 4th input parameter. > > >>All MI instructions that accept a template validate the content of the > > >>template. When the template contains an invalid value the MCH5601 > > >>message is sent. This message tells you exactly what part of the > > >>template is invalid. > > >> > > >>>Btw I'm missing something because the DDAT1 duration in x0014 is > > >>>returned > > >>>correctly with ISO and YMD date but I can't get it with other date > > >>>format. > > >>>And in any case I can never get a Labeled Duration. Unfortunately the > > >>>only > > >>>documentation is from a single page in the MI functional reference and > > >>>an > > >>>example in C that uses ISO dates. I've found nothing else. > > >>http://publib/boulder.ibm.com/infocenter/iseries/v5r3/topic/rzatk/ > > >>topics.htm > > >> > > >>Click Date/Time/Timestamp > > >> > > >>Click Date/Time Concepts > > >> > > >>Read carefully. > > >> > > >>>Thanks in any > > >>>case for your response. > > >>>Giuseppe. > > >>> > > >>> > > >>>----- Original Message ----- > > >>>From: "Simon Coulter" <shc@xxxxxxxxxxxxxxxxx> > > >>>To: "MI Programming on the AS400 / iSeries" <mi400@xxxxxxxxxxxx> > > >>>Sent: Monday, October 10, 2005 11:41 PM > > >>>Subject: Re: [MI400] Compute Date Duration > > >>> > > >>> > > >>>>On 10/10/2005, at 10:53 PM, Beppe Costa wrote: > > >>>> > > >>>>>I'm trying to use the the MI CDD. > > >>>>> > > >>>>>When Operand1 is a DDAT x'0014' (Date Duration) I get the right value > > >>>>>expressed in Years, Month and Days but when Operand1 is x'000F' > > >>>>>(Labeled Duration DAY) I always get a "template value invalid". > > >>>>Show the complete message text of the MCH5601 message. The > > >>>>substitution > > >>>>text will usually tell you what part of the template is wrong. > > >>>> > > >>>>My guess is that the variable containing the duration value is of the > > >>>>wrong type. For x'0014' it must be PKD(8,0) but for x'000F' it must be > > >>>>PKD(15,0) > > >>>> > > >>>>Regards, > > >>>>Simon Coulter. > > >>>>-------------------------------------------------------------------- > > >>>> FlyByNight Software AS/400 Technical Specialists > > >>>> > > >>>> http://www.flybynight.com.au/ > > >>>> Phone: +61 3 9419 0175 Mobile: +61 0411 091 400 /"\ > > >>>> Fax: +61 3 9419 0175 \ / > > >>>> X > > >>>> ASCII Ribbon campaign against HTML E-Mail / \ > > >>>>-------------------------------------------------------------------- > > > > _______________________________________________ > > This is the MI Programming on the AS400 / iSeries (MI400) mailing list > > To post a message email: MI400@xxxxxxxxxxxx > > To subscribe, unsubscribe, or change list options, > > visit: http://lists.midrange.com/mailman/listinfo/mi400 > > or email: MI400-request@xxxxxxxxxxxx > > Before posting, please take a moment to review the archives > > at http://archive.midrange.com/mi400. > > > > _______________________________________________ > This is the MI Programming on the AS400 / iSeries (MI400) mailing list > To post a message email: MI400@xxxxxxxxxxxx > To subscribe, unsubscribe, or change list options, > visit: http://lists.midrange.com/mailman/listinfo/mi400 > or email: MI400-request@xxxxxxxxxxxx > Before posting, please take a moment to review the archives > at http://archive.midrange.com/mi400. > > > > > _______________________________________________ > This is the MI Programming on the AS400 / iSeries (MI400) mailing list > To post a message email: MI400@xxxxxxxxxxxx > To subscribe, unsubscribe, or change list options, > visit: http://lists.midrange.com/mailman/listinfo/mi400 > or email: MI400-request@xxxxxxxxxxxx > Before posting, please take a moment to review the archives > at http://archive.midrange.com/mi400. > _______________________________________________ This is the MI Programming on the AS400 / iSeries (MI400) mailing list To post a message email: MI400@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/mailman/listinfo/mi400 or email: MI400-request@xxxxxxxxxxxx Before posting, please take a moment to review the archives at http://archive.midrange.com/mi400.
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.