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


  • Subject: Re: Using % type functions
  • From: Rob Berendt <rob@xxxxxxxxx>
  • Date: Thu, 3 Feb 2000 9:18:27 -0500

Check out the manual as suggested, however here is an example:
Adds a number of days to a date.  Used primarily to support 8 digit dates.
Accepts:        An 8 digit numeric representing a date in *ISO format, or, 
YYYYMMDD.
                A 5 digit numeric representing the number of days to add to the 
date.  This number may be negative.
Returns:        A 8 digit numeric representing a date in *ISO format, or, 
YYYYMMDD.  A date of all 9's indicates that the date you passed in was not a 
valid date.
Sample:


...
D* Line 1 with PR indicates a procedure PRototype.  The fact that it has the 
definition 8S 0 indicates that this 
D*  subprocedure will return a value.  And the format is 8S 0.
D* The next two lines have no PR, S, C or anything defining field type.  
Therefore they are part of the prototype
D*  above.  These are the input parameters.  CONST means that we will not let 
the subprocedure change the value
D*  of these variables.  Also we don't have to match variable size exactly.
D AddDays         PR             8S 0                    
D  FromDate                           CONST Like(AddDays)
D  Spread                        5S 0 CONST              

D Date1           S              8S 0 inz(19990101)         
D Date2           S              8S 0 inz(19990231)         
D Result          S              8S 0 inz(0)                
D Spread          S              5S 0                       
...
C* Main body
...
C                   Eval      Spread = 5                    
C* In the following Result will equal 19990106              
C                   Eval      Result = AddDays(Date1:Spread)
C* In the following Result will equal 99999999              
C                   Eval      Result = AddDays(Date2:Spread)
...
C* Bottom of your program
...
 * Yes you put the P specs at the bottom.  And it may be a little confusing to 
see D specs down here also.
 * Stick with us.
 * The first P spec indicates the Beginning of the subprocedure.
 /eject                                                              
P     AddDays     B                                            
 ***** AddDays - Adds a number of days to a YYYYMMDD date.  A date of
 *             - all 9's indicates an invalid date was passed in.    
 *             - Input:  8 digit date in *ISO format                 
 *                       5 digit number of days to add.              
 *             - Result: 8 digit date in *ISO format                 
 * The PI should match the PRototype you defined earlier.  Why you have to do 
this twice becomes more evident
 *  when you start doing external subprocedures in service programs and the 
like.
D AddDays         PI             8S 0                                
D Digit8Date                     8S 0 CONST                          
D Spread                         5S 0 CONST                          
 * Now we have local variables!  These are defined here only.  Outside of this 
subprocedure, back in the 
 * main body they have no value.  You could have multiple subprocedures, each 
defining X.  And X could be
 * alpha in one, numeric in another ...
D WorkDate        S               D   Datfmt(*ISO)                   
D EightDigits     S              8S 0                                
                                                                     
 * I hope you don't find the jumping from one spec to another as confusing as 
WSU.
 * Just remember that this subprocedure is much like having your own called 
program within a program.
C     *iso          Test(D E)               Digit8Date               
C                   If        not %Error                             
C     *iso          Move      Digit8Date    WorkDate    
C                   AddDur    Spread:*D     WorkDate    
C     *iso          Move      WorkDate      EightDigits 
C                   Return    EightDigits               
 *                                                      
C                   Else                                
C                   Return    *All'9'                   
C                   EndIf                               
 * The final P spec indicates the End of this subprocedure.                     
                                   
P     AddDays     E                                     
+---
| This is the RPG/400 Mailing List!
| To submit a new message, send your mail to RPG400-L@midrange.com.
| To subscribe to this list send email to RPG400-L-SUB@midrange.com.
| To unsubscribe from this list send email to RPG400-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: david@midrange.com
+---


As an Amazon Associate we earn from qualifying purchases.

This thread ...


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.