× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



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 thread ...

Follow-Ups:
Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

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.