+/* parse octal string */
+
+long int octal (char *s, int n) {
+ int i;
+ long int l = 0;
+ for (i = 0; i < n; i++) {
+ if ((s[i] >= '0') && (s[i] <= '9')) {
+ l = l * 8 + s[i] - '0';
+ } else {
+ return -1;
+ }
+ }
+ return l;
+}
+
+/* parse hexa string */
+
+long int hexa (char *s, int n) {
+ int i;
+ long int l = 0;
+ for (i = 0; i < n; i++) {
+ l *= 16;
+ if ((s[i] >= '0') && (s[i] <= '9')) {
+ l += s[i] - '0';
+ } else if ((s[i] >= 'A') && (s[i] <= 'F')) {
+ l += s[i] + 10 - 'A';
+ } else if ((s[i] >= 'a') && (s[i] <= 'f')) {
+ l += s[i] + 10 - 'a';
+ } else {
+ return -1;
+ }
+ }
+ return l;
+}
+