|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T n
Length: 1056 (0x420) Types: TextFile Names: »numcmp.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─⟦this⟧ »EUUGD11/stat-5.3/eu/stat/src/numcmp.c«
/* Copyright 1986 Gary Perlman */ /*LINTLIBRARY*/ #ifndef lint static char sccsfid[] = "@(#) numcmp.c 5.0 (|stat) 6/11/86"; #endif /* first compare integer component, then, if equal, use signed strcmp on decimal part */ #include <ctype.h> #define issign(c) ((c) == '-' || (c) == '+') #define skipint(s) \ if (issign(*s)) s++; \ while (isdigit (*s)) s++; \ if (*s == '.') s++; #define skip0(s) while (*(s) == '0') (s)++; int numcmp (s1, s2) register char *s1, *s2; { register int diff; int sign = (*s1 == '-') ? -1 : 1; /* try to get out quickly for signed comparisons */ if (*s1 == '-' && *s2 != '-') return (-1); if (*s1 != '-' && *s2 == '-') return (1); /* now they are both positive, or both negative */ if (diff = atoi (s1) - atoi (s2)) return (diff); skipint (s1); skipint (s2); while (isdigit (*s1) && isdigit (*s2)) /* must count leading zeros */ { if (diff = (*s1 - *s2)) return (sign * diff); s1++; s2++; } skip0 (s1); skip0 (s2); return (sign * (isdigit (*s1) * (*s1) - isdigit (*s2) * (*s2))); }