110898Sroland.mainz@nrubsig.org /*********************************************************************** 210898Sroland.mainz@nrubsig.org * * 310898Sroland.mainz@nrubsig.org * This software is part of the ast package * 4*12068SRoger.Faulkner@Oracle.COM * Copyright (c) 1985-2010 AT&T Intellectual Property * 510898Sroland.mainz@nrubsig.org * and is licensed under the * 610898Sroland.mainz@nrubsig.org * Common Public License, Version 1.0 * 710898Sroland.mainz@nrubsig.org * by AT&T Intellectual Property * 810898Sroland.mainz@nrubsig.org * * 910898Sroland.mainz@nrubsig.org * A copy of the License is available at * 1010898Sroland.mainz@nrubsig.org * http://www.opensource.org/licenses/cpl1.0.txt * 1110898Sroland.mainz@nrubsig.org * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 1210898Sroland.mainz@nrubsig.org * * 1310898Sroland.mainz@nrubsig.org * Information and Software Systems Research * 1410898Sroland.mainz@nrubsig.org * AT&T Research * 1510898Sroland.mainz@nrubsig.org * Florham Park NJ * 1610898Sroland.mainz@nrubsig.org * * 1710898Sroland.mainz@nrubsig.org * Glenn Fowler <gsf@research.att.com> * 1810898Sroland.mainz@nrubsig.org * David Korn <dgk@research.att.com> * 1910898Sroland.mainz@nrubsig.org * Phong Vo <kpv@research.att.com> * 2010898Sroland.mainz@nrubsig.org * * 2110898Sroland.mainz@nrubsig.org ***********************************************************************/ 2210898Sroland.mainz@nrubsig.org #pragma prototyped 2310898Sroland.mainz@nrubsig.org 2410898Sroland.mainz@nrubsig.org #include <ast.h> 2510898Sroland.mainz@nrubsig.org #include <ctype.h> 2610898Sroland.mainz@nrubsig.org 2710898Sroland.mainz@nrubsig.org /* 2810898Sroland.mainz@nrubsig.org * version strcmp(3) 2910898Sroland.mainz@nrubsig.org */ 3010898Sroland.mainz@nrubsig.org 3110898Sroland.mainz@nrubsig.org int 3210898Sroland.mainz@nrubsig.org strvcmp(register const char* a, register const char* b) 3310898Sroland.mainz@nrubsig.org { 3410898Sroland.mainz@nrubsig.org register unsigned long na; 3510898Sroland.mainz@nrubsig.org register unsigned long nb; 3610898Sroland.mainz@nrubsig.org 3710898Sroland.mainz@nrubsig.org for (;;) 3810898Sroland.mainz@nrubsig.org { 3910898Sroland.mainz@nrubsig.org if (isdigit(*a) && isdigit(*b)) 4010898Sroland.mainz@nrubsig.org { 4110898Sroland.mainz@nrubsig.org na = nb = 0; 4210898Sroland.mainz@nrubsig.org while (isdigit(*a)) 4310898Sroland.mainz@nrubsig.org na = na * 10 + *a++ - '0'; 4410898Sroland.mainz@nrubsig.org while (isdigit(*b)) 4510898Sroland.mainz@nrubsig.org nb = nb * 10 + *b++ - '0'; 4610898Sroland.mainz@nrubsig.org if (na < nb) 4710898Sroland.mainz@nrubsig.org return -1; 4810898Sroland.mainz@nrubsig.org if (na > nb) 4910898Sroland.mainz@nrubsig.org return 1; 5010898Sroland.mainz@nrubsig.org } 5110898Sroland.mainz@nrubsig.org else if (*a != *b) 5210898Sroland.mainz@nrubsig.org break; 5310898Sroland.mainz@nrubsig.org else if (!*a) 5410898Sroland.mainz@nrubsig.org return 0; 5510898Sroland.mainz@nrubsig.org else 5610898Sroland.mainz@nrubsig.org { 5710898Sroland.mainz@nrubsig.org a++; 5810898Sroland.mainz@nrubsig.org b++; 5910898Sroland.mainz@nrubsig.org } 6010898Sroland.mainz@nrubsig.org } 6110898Sroland.mainz@nrubsig.org if (*a == 0) 6210898Sroland.mainz@nrubsig.org return -1; 6310898Sroland.mainz@nrubsig.org if (*b == 0) 6410898Sroland.mainz@nrubsig.org return 1; 6510898Sroland.mainz@nrubsig.org if (*a == '.') 6610898Sroland.mainz@nrubsig.org return -1; 6710898Sroland.mainz@nrubsig.org if (*b == '.') 6810898Sroland.mainz@nrubsig.org return 1; 6910898Sroland.mainz@nrubsig.org if (*a == '-') 7010898Sroland.mainz@nrubsig.org return -1; 7110898Sroland.mainz@nrubsig.org if (*b == '-') 7210898Sroland.mainz@nrubsig.org return 1; 7310898Sroland.mainz@nrubsig.org return *a < *b ? -1 : 1; 7410898Sroland.mainz@nrubsig.org } 75