#define _POSIX_C_SOURCE 2 #include #include #include #include "zpm.h" /* * -g greater than * -l less than * -e equal * -L least : print least * -G greatest : print greatest * -q quiet: no print */ int main(int ac, char *av[]) { int cmp; char *a = 0, *b = 0; int print = 1; int argn, opt = 0; int inorder = 1, equal = 1; char *greatest = 0; char *least = 0; while ((opt = getopt(ac, av, "qLG")) != -1) { switch (opt) { case 'q': print = 0; break; case 'G': print = 2; break; case 'L': print = 3; break; default: exit(EXIT_FAILURE); break; } } argn = optind; if (ac > argn) { a = av[argn++]; greatest = a; least = a; } while (ac > argn) { b = av[argn++]; cmp = zpm_vercmp(a, b); switch (cmp) { case 0: break; case -1: equal = 0; break; case 1: equal = 0; inorder = 0; break; default: break; } cmp = zpm_vercmp(b, greatest); if (cmp > 0) { greatest = b; } cmp = zpm_vercmp(b, least); if (cmp < 0) { least = b; } a = b; } if (equal) { cmp = 0; } else if (inorder) { cmp = -1; } else { cmp = 1; } switch (print) { case 1: printf("%d\n", cmp); break; case 2: if (greatest) printf("%s\n", greatest); break; case 3: if (least) printf("%s\n", least); break; default: break; } return cmp == -1 ? 2 : cmp; }