lib/iec_std_lib.h
changeset 48 3d24cc85bb3c
parent 43 37dd4e2fd2ec
child 55 8b7a21820737
equal deleted inserted replaced
47:017efb738d95 48:3d24cc85bb3c
   674     }
   674     }
   675     if(res.len > STR_MAX_LEN) res.len = STR_MAX_LEN;
   675     if(res.len > STR_MAX_LEN) res.len = STR_MAX_LEN;
   676     return res;
   676     return res;
   677 }
   677 }
   678     /* BCD */
   678     /* BCD */
       
   679 #define __bcd_digit(fac) 
   679 static inline ULINT __bcd_to_uint(LWORD IN){
   680 static inline ULINT __bcd_to_uint(LWORD IN){
   680     return IN & 0xf +
   681     return IN & 0xf +
   681            ((IN >>= 4) & 0xf) * 10 + 
   682            !(IN >>= 4) ? 0 : IN & 0xf * 10ULL + 
   682            ((IN >>= 4) & 0xf) * 100 + 
   683            !(IN >>= 4) ? 0 : IN & 0xf * 100ULL + 
   683            ((IN >>= 4) & 0xf) * 1000 + 
   684            !(IN >>= 4) ? 0 : IN & 0xf * 1000ULL + 
   684            ((IN >>= 4) & 0xf) * 10000 + 
   685            !(IN >>= 4) ? 0 : IN & 0xf * 10000ULL + 
   685            ((IN >>= 4) & 0xf) * 100000 + 
   686            !(IN >>= 4) ? 0 : IN & 0xf * 100000ULL + 
   686            ((IN >>= 4) & 0xf) * 1000000 + 
   687            !(IN >>= 4) ? 0 : IN & 0xf * 1000000ULL + 
   687            ((IN >>= 4) & 0xf) * 10000000 + 
   688            !(IN >>= 4) ? 0 : IN & 0xf * 10000000ULL + 
   688            ((IN >>= 4) & 0xf) * 100000000 + 
   689            !(IN >>= 4) ? 0 : IN & 0xf * 100000000ULL + 
   689            ((IN >>= 4) & 0xf) * 1000000000 + 
   690            !(IN >>= 4) ? 0 : IN & 0xf * 1000000000ULL + 
   690            ((IN >>= 4) & 0xf) * 10000000000 + 
   691            !(IN >>= 4) ? 0 : IN & 0xf * 10000000000ULL + 
   691            ((IN >>= 4) & 0xf) * 100000000000 + 
   692            !(IN >>= 4) ? 0 : IN & 0xf * 100000000000ULL + 
   692            ((IN >>= 4) & 0xf) * 1000000000000 + 
   693            !(IN >>= 4) ? 0 : IN & 0xf * 1000000000000ULL + 
   693            ((IN >>= 4) & 0xf) * 10000000000000 + 
   694            !(IN >>= 4) ? 0 : IN & 0xf * 10000000000000ULL + 
   694            ((IN >>= 4) & 0xf) * 100000000000000 + 
   695            !(IN >>= 4) ? 0 : IN & 0xf * 100000000000000ULL + 
   695            ((IN >>= 4) & 0xf) * 1000000000000000;
   696            !(IN >>= 4) ? 0 : IN & 0xf * 1000000000000000ULL;
       
   697            
   696 }
   698 }
   697 static inline LWORD __uint_to_bcd(ULINT IN){
   699 static inline LWORD __uint_to_bcd(ULINT IN){
   698     return (IN - (IN /= 10))|
   700     return (IN - (IN /= 10))|
   699            (IN - (IN /= 10)) << 4 |
   701            (IN - (IN /= 10)) << 4 |
   700            (IN - (IN /= 10)) << 8 |
   702            (IN - (IN /= 10)) << 8 |