home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / enterprs / c128 / util / 128c.arc / SORT.C < prev    next >
Text File  |  1993-03-04  |  2KB  |  89 lines

  1. #INCLUDE <STDIO.H>
  2.  
  3. #DEFINE ╠╔╬┼╙  500
  4. #DEFINE ═┴╪╠┼╬  81
  5. #DEFINE ╘╥╒┼     1
  6. #DEFINE ╞┴╠╙┼    0
  7.  
  8.  
  9. MAIN (ARGC, ARGV)
  10.  
  11. UNSIGNED ARGC;
  12. CHAR **ARGV;
  13.  
  14.    STATIC CHAR *LINEPTR[╠╔╬┼╙];
  15.    INT NLINES;
  16.    INT STRCOMP(), NUMCMP();
  17.    INT NUMERIC = ╞┴╠╙┼;
  18.    CHAR *S;
  19.  
  20.    S = *++ARGV;
  21.    IF (ARGC>1 && *S++ == '-' && *S == 'N')
  22.       NUMERIC = ╘╥╒┼;
  23.    IF ((NLINES = READLINES(LINEPTR, ╠╔╬┼╙)) >= 0) █
  24.       IF (NUMERIC)
  25.          QSORT(LINEPTR, NLINES, SIZEOF(CHAR *), NUMCMP);
  26.       ELSE
  27.          QSORT(LINEPTR, NLINES, SIZEOF(CHAR *), STRCOMP);
  28.       WRITELINES (LINEPTR, NLINES);
  29.    ▌ ELSE
  30.       PRINTF("INPUT TOO BIG TO SORT\N");
  31.  
  32. READLINES(LINEPTR, MAXLINES)
  33. CHAR *LINEPTR[];
  34. UNSIGNED MAXLINES;
  35.    UNSIGNED LEN, NLINES;
  36.    CHAR *P, *MALLOC(), LINE[═┴╪╠┼╬];
  37.  
  38.    NLINES = 0;
  39.    WHILE ((LEN = GETLINE(LINE, ═┴╪╠┼╬))) █
  40.       IF (NLINES >= MAXLINES)
  41.          RETURN (-1);
  42.       IF ((P = MALLOC(LEN)) == ╬╒╠╠)
  43.          RETURN (-1);
  44.       STRCPY(P, LINE);
  45.       LINEPTR[NLINES++] = P;
  46.    ▌
  47.    RETURN (NLINES);
  48.  
  49. GETLINE (S, LIM)
  50. CHAR *S;
  51. UNSIGNED LIM;
  52.    IF (FGETS(S, LIM, STDIN) == ╬╒╠╠)
  53.       RETURN (0);
  54.    RETURN (STRLEN(S)+1);
  55.  
  56. STRCOMP (S1, S2)
  57. CHAR **S1, **S2;
  58.    RETURN (STRCMP(*S1, *S2));
  59.  
  60. NUMCMP (S1, S2)
  61. CHAR **S1, **S2;
  62.    DOUBLE ATOF(), V1, V2;
  63.  
  64.    V1 = ATOF(*S1);
  65.    V2 = ATOF(*S2);
  66.    IF (V1 < V2)
  67.       RETURN(-1);
  68.    IF (V1 > V2)
  69.       RETURN(1);
  70.    RETURN(0);
  71.  
  72. WRITELINES (LINEPTR, NLINES)
  73. CHAR *LINEPTR[];
  74. UNSIGNED NLINES;
  75.    WHILE (NLINES--)
  76.       PRINTF ("%S", *LINEPTR++);
  77.