* Postcode                                           
d postcode        ds                  qualified       
d  outcode                       4a                   
d  incode                        3a                   
                                                      
 * Procedure prototypes                               
d SplitPostcode   pr                  likeds(Postcode)
d  iPostcode                    10    value           

 **********************************************************************************************
 * Split postcode into outcode and (optional) incode                                           
 **********************************************************************************************
p SplitPostcode   b                   export                                                   
d SplitPostcode   pi                  likeds(Postcode)                                         
d  iPostcode                    10    value                                                    
                                                                                               
 * Define local variables:                                                                     
d oPostcode       ds                  likeds(Postcode)                                         
d lLength         s              5u 0                                                          
d lFirstSpace     s              5u 0                                                          
d lTrailing       s                   like(iPostcode)                                          
d cUpper          c                   const('ABCDEFGHIJKLMNOPQRSTUVWXYZ')                      
d cLower          c                   const('abcdefghijklmnopqrstuvwxyz')                      
                                                                                               
 * Translate to upper case                                                                     
c                   eval      iPostcode = %xlate(cLower:cUpper:iPostcode)                      
                                                                                               
 * Remove embedded spaces                                                                      
c                   dow       cForever                                                         
c                   eval      lFirstSpace = %scan(' ':iPostcode)                               
c                   eval      lTrailing = %trim(%subst(iPostcode:                              
c                                                      lFirstSpace:                            
c                                                      %len(iPostcode)                         

c                                                            -lFirstSpace))
c                   if        lTrailing = *blanks                          
c                   leave                                                  
c                   endif                                                  
                                                                           
c                   eval      iPostcode = %subst(iPostcode:                
c                                                1:                        
c                                                lFirstSpace-1) +          
c                                         lTrailing                        
                                                                           
c                   enddo                                                  
                                                                           
 * Postcode length                                                         
c                   eval      lLength = %scan(' ':iPostcode) - 1           
                                                                           
 * Outcode only                                                            
c                   if        lLength <= 4                                 
c                   eval      oPostcode.outcode = iPostcode                
c                   eval      oPostcode.incode = *blanks                   
c                   else                                                   
 * Full postcode                                                           
c                   eval      oPostcode.outcode = %subst(iPostcode:        
c                                                        1:                
c                                                        lLength-3)        
c                   eval      oPostcode.incode = %subst(iPostcode:                             
c                                                       lLength-2:                             
c                                                       3)                                     
c                   endif                                                                      
                                                                                               
c                   return    oPostcode                                                        
                                                                                               
p                 e                                                                            
 *********************************************************************************************
 
 * Usage example
c                   eval      postcode = SplitPostcode(in.pcd118)
c                   eval      out.pcdo18 = postcode.outcode      
c                   eval      out.pcdi18 = postcode.incode