/* REXX HEXADECIMAL TO DECIMAL CONVERSION */                            
/*----------------------------------------*/                            
/* GENERATE DECIMAL TABLE FOR CONVERSION  */                            
/* FROM HEX VALUE UP TO 6 DIGITS          */                            
/*----------------------------------------*/                            
I = 1                                                                   
DO N = 0 TO 5                                                           
   SIXTEEN_POWER = 16 ** N                                              
   DO D = 0 TO 15                                                       
      DEC_VALUE.I = SIXTEEN_POWER * D                                   
      I = I + 1                                                         
   END                                                                  
END                                                                     
/*----------------------------------------*/                            
/* GENERATE HEX TABLE                     */                            
/*----------------------------------------*/                            
DO X = 1 TO 16                                                          
  HEX_VALUE.X = SUBSTR('0123456789ABCDEF',X,1)                          
END                                                                     
SAY "HEXADECIMAL TO DECIMAL CONVERSION"                                 
SAY "ENTER YOUR HEXADECIMAL: "                                          
PULL HEX                                                                
SIZE = LENGTH(HEX)                                                      
IF SIZE > 6 THEN DO                                                     
   SAY "HEX VALUE IS TO LARGE"                                          
   EXIT                                                                 
END                                                                     
/*----------------------------------------*/                            
/* DECIMAL CONVERSION                     */                            
/*----------------------------------------*/                            
ANS = 0                                                                 
HEX_TBLE_COL = 1                                                        
DO WHILE SIZE > 0                                                       
   X = 1                                                                
   IF SUBSTR(HEX,SIZE,1) = 0                                            
      THEN X = 1                                                        
   ELSE                                                                 
      DO UNTIL HEX_VALUE.X = SUBSTR(HEX,SIZE,1)                         
         X = X +1                                                       
         IF X > 16 THEN DO                                              
            SAY "INVALID HEX VALUE: " HEX                               
            EXIT                                                        
         END                                                            
      END                                                               
   D = HEX_TBLE_COL + X - 1                                             
   ANS = ANS + DEC_VALUE.D                                              
   SIZE = SIZE - 1                                                      
   HEX_TBLE_COL = HEX_TBLE_COL + 16                                     
END                                                                     
SAY "DECIMAL VALUE IS: " ANS                                            
EXIT                                                                    

    Source: geocities.com/swede27410