| /* This Source Code Form is subject to the terms of the Mozilla Public |
| * License, v. 2.0. If a copy of the MPL was not distributed with this |
| * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| |
| int |
| main(int argc, char **argv) |
| { |
| char *curstr; |
| char *nextstr; |
| unsigned int firstval; |
| unsigned int secondval; |
| unsigned int val; |
| unsigned char buf[5]; |
| int count; |
| |
| if (argc != 2) { |
| fprintf(stderr, "wrong number of args\n"); |
| exit(-1); |
| } |
| |
| curstr = argv[1]; |
| |
| nextstr = strchr(curstr, '.'); |
| |
| if (nextstr == NULL) { |
| fprintf(stderr, "only one component\n"); |
| exit(-1); |
| } |
| |
| *nextstr = '\0'; |
| firstval = atoi(curstr); |
| |
| curstr = nextstr + 1; |
| |
| nextstr = strchr(curstr, '.'); |
| |
| if (nextstr) { |
| *nextstr = '\0'; |
| } |
| |
| secondval = atoi(curstr); |
| |
| if (firstval > 2) { |
| fprintf(stderr, "first component out of range\n"); |
| exit(-1); |
| } |
| |
| if (secondval > 39) { |
| fprintf(stderr, "second component out of range\n"); |
| exit(-1); |
| } |
| |
| printf("0x%x, ", (firstval * 40) + secondval); |
| while (nextstr) { |
| curstr = nextstr + 1; |
| |
| nextstr = strchr(curstr, '.'); |
| |
| if (nextstr) { |
| *nextstr = '\0'; |
| } |
| |
| memset(buf, 0, sizeof(buf)); |
| val = atoi(curstr); |
| count = 0; |
| while (val) { |
| buf[count] = (val & 0x7f); |
| val = val >> 7; |
| count++; |
| } |
| |
| while (count--) { |
| if (count) { |
| printf("0x%x, ", buf[count] | 0x80); |
| } else { |
| printf("0x%x, ", buf[count]); |
| } |
| } |
| } |
| printf("\n"); |
| return 0; |
| } |