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