home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
enterprs
/
c128
/
util
/
128c.arc
/
SORT.C
< prev
next >
Wrap
Text File
|
1993-03-04
|
2KB
|
89 lines
#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++);
▌