home *** CD-ROM | disk | FTP | other *** search
- #INCLUDE <STDIO.H>
-
- #DEFINE ╠╔╬┼╙ 500
- #DEFINE ═┴╪╠┼╬ 81
- #DEFINE ╘╥╒┼ 1
- #DEFINE ╞┴╠╙┼ 0
-
-
- MAIN (ARGC, ARGV)
-
- UNSIGNED ARGC;
- CHAR **ARGV;
-
- █
- STATIC CHAR *LINEPTR[╠╔╬┼╙];
- INT NLINES;
- INT STRCOMP(), NUMCMP();
- INT NUMERIC = ╞┴╠╙┼;
- CHAR *S;
-
- S = *++ARGV;
- IF (ARGC>1 && *S++ == '-' && *S == 'N')
- NUMERIC = ╘╥╒┼;
- IF ((NLINES = READLINES(LINEPTR, ╠╔╬┼╙)) >= 0) █
- IF (NUMERIC)
- QSORT(LINEPTR, NLINES, SIZEOF(CHAR *), NUMCMP);
- ELSE
- QSORT(LINEPTR, NLINES, SIZEOF(CHAR *), STRCOMP);
- WRITELINES (LINEPTR, NLINES);
- ▌ ELSE
- PRINTF("INPUT TOO BIG TO SORT\N");
- ▌
-
- READLINES(LINEPTR, MAXLINES)
- CHAR *LINEPTR[];
- UNSIGNED MAXLINES;
- █
- UNSIGNED LEN, NLINES;
- CHAR *P, *MALLOC(), LINE[═┴╪╠┼╬];
-
- NLINES = 0;
- WHILE ((LEN = GETLINE(LINE, ═┴╪╠┼╬))) █
- IF (NLINES >= MAXLINES)
- RETURN (-1);
- IF ((P = MALLOC(LEN)) == ╬╒╠╠)
- RETURN (-1);
- STRCPY(P, LINE);
- LINEPTR[NLINES++] = P;
- ▌
- RETURN (NLINES);
- ▌
-
- GETLINE (S, LIM)
- CHAR *S;
- UNSIGNED LIM;
- █
- IF (FGETS(S, LIM, STDIN) == ╬╒╠╠)
- RETURN (0);
- RETURN (STRLEN(S)+1);
- ▌
-
- STRCOMP (S1, S2)
- CHAR **S1, **S2;
- █
- RETURN (STRCMP(*S1, *S2));
- ▌
-
- NUMCMP (S1, S2)
- CHAR **S1, **S2;
- █
- DOUBLE ATOF(), V1, V2;
-
- V1 = ATOF(*S1);
- V2 = ATOF(*S2);
- IF (V1 < V2)
- RETURN(-1);
- IF (V1 > V2)
- RETURN(1);
- RETURN(0);
- ▌
-
- WRITELINES (LINEPTR, NLINES)
- CHAR *LINEPTR[];
- UNSIGNED NLINES;
- █
- WHILE (NLINES--)
- PRINTF ("%S", *LINEPTR++);
- ▌
-