pa = vchr(&va, val); pb = vchr(&vb, vbl);
for (;;) {
- if (pa == va && pb == vb)
- break;
- else if (pa == va)
- return (-1);
- else if (pb == vb)
- return (+1);
- else if (*pa == *pb) {
- pa++; pb++;
- continue;
- } else if (isalpha((unsigned char)*pa) == isalpha((unsigned char)*pb))
- return (CMP(*pa, *pb));
- else if (isalpha((unsigned char)*pa))
- return (-1);
- else
- return (+1);
+ if (pa == va) ia = 1;
+ else if (isalpha((unsigned char)*pa)) ia = 2;
+ else if (*pa == '~') ia = 0;
+ else ia = 3;
+
+ if (pb == vb) ib = 1;
+ else if (isalpha((unsigned char)*pb)) ib = 2;
+ else if (*pb == '~') ib = 0;
+ else ib = 3;
+
+ if (ia != ib) return (CMP(ia, ib));
+ else if (pa == va && pb == vb) break;
+ else if (*pa != *pb) return (CMP(*pa, *pb));
+ pa++; pb++;
}
/* --- Compare digit portions --- */
ia = vint(&va, val); ib = vint(&vb, vbl);
- if (ia != ib)
- return (CMP(ia, ib));
+ if (ia != ib) return (CMP(ia, ib));
}
}