rtai-core/include/rtai_nam2num.h

Go to the documentation of this file.
00001 
00032 #ifndef _RTAI_NAM2NUM_H
00033 #define _RTAI_NAM2NUM_H
00034 
00035 #include <rtai_types.h>
00036 
00053 static inline unsigned long nam2num (const char *name)
00054 {
00055         unsigned long retval = 0;
00056         int c, i;
00057 
00058         for (i = 0; i < 6; i++) {
00059                 if (!(c = name[i]))
00060                         break;
00061                 if (c >= 'a' && c <= 'z') {
00062                         c +=  (11 - 'a');
00063                 } else if (c >= 'A' && c <= 'Z') {
00064                         c += (11 - 'A');
00065                 } else if (c >= '0' && c <= '9') {
00066                         c -= ('0' - 1);
00067                 } else {
00068                         c = c == '_' ? 37 : 38;
00069                 }
00070                 retval = retval*39 + c;
00071         }
00072         if (i > 0)
00073                 return retval;
00074         else
00075                 return 0xFFFFFFFF;
00076 }
00077 
00087 static inline void num2nam (unsigned long num, char *name)
00088 {
00089         int c, i, k, q; 
00090         if (num == 0xFFFFFFFF) {
00091                 name[0] = 0;
00092                 return;
00093         }
00094         i = 5; 
00095         while (num && i >= 0) {
00096                 q = num/39;
00097                 c = num - q*39;
00098                 num = q;
00099                 if ( c < 37) {
00100                         name[i--] = c > 10 ? c + 'A' - 11 : c + '0' - 1;
00101                 } else {
00102                         name[i--] = c == 37 ? '_' : '$';
00103                 }
00104         }
00105         for (k = 0; i < 5; k++) {
00106                 name[k] = name[++i];
00107         }
00108         name[k] = 0;
00109 }
00110 
00111 #endif /* !_RTAI_NAM2NUM_H */

Generated on Sat Jul 24 19:36:03 2004 for RTAI API by doxygen 1.3.4