home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / BDSC / BDSC-3 / ALPH.CQ / ALPH.C
Text File  |  2000-06-30  |  2KB  |  104 lines

  1. /*
  2.     Alphabetize a file by lines.
  3.     Usage:
  4.         alph <inputfile> <outputfile>
  5. */
  6.  
  7. #include "bdscio.h"
  8. #include "dio.h"
  9. #define stderr 4
  10.  
  11. #define MAXLINES   2000        /* max number of lines */
  12.  
  13. int strcmp();
  14. char iobuf[BUFSIZ];
  15. char *ltab[MAXLINES];
  16. int lcount;
  17. char *allocp;
  18.  
  19. main(argc,argv)
  20. int argc;
  21. char **argv;
  22. {
  23.     int i;
  24.     char linbuf[300];
  25.  
  26.     dioinit(&argc,argv);
  27.  
  28.     if (argc > 1)
  29.         if(fopen(argv[1],iobuf)== ERROR)
  30.             exit(fputs("Can't open input file\n",stderr));
  31.  
  32.     lcount = 0;
  33.     for (i = 0; i < MAXLINES; i++)
  34.     {
  35.         if (argc > 1) {
  36.             if (!fgets(linbuf,iobuf)) break;
  37.         }
  38.         else
  39.             if (!gets2(linbuf)) break;
  40.         
  41.         if ((allocp = sbrk(strlen(linbuf) + 1))    == ERROR)
  42.             exit(fputs("Out of allocation space\n",stderr));
  43.         ltab[lcount++] = allocp;
  44.         strcpy(allocp,linbuf);
  45.     }
  46.  
  47.     if (argc > 1)
  48.         fclose(iobuf);
  49.  
  50.     if (i == MAXLINES) exit(fputs("Too many lines. Change MAXLINES\n"
  51.                             ,stderr));
  52.  
  53.     qsort(ltab,lcount,2,&strcmp);
  54.  
  55.     if (argc > 2) {
  56.         if (fcreat(argv[2],iobuf) == ERROR)
  57.             exit(fputs("Can't creat output file\n",stderr));
  58.     }
  59.     else fputs("******** Alphabetized: *********\n",stderr);
  60.  
  61.     for (i = 0; i < lcount; i++)
  62.         if (argc > 2)
  63.             fputs(ltab[i],iobuf);
  64.         else
  65.             puts(ltab[i]);
  66.     if (argc > 2) {
  67.         putc(CPMEOF,iobuf);
  68.         fflush(iobuf);    
  69.         fclose(iobuf);
  70.     }    
  71.     fputs("\n*********** All done ***********\n",stderr);
  72.     dioflush();
  73. }
  74.  
  75. int gets2(str)
  76. char *str;
  77. {
  78.     int c;
  79.  
  80.     if ((c = getchar()) == EOF) return NULL;
  81.     do {
  82.         if ((*str++ = c) == '\n')
  83.             break;;
  84.     } while (c = getchar());
  85.     *str = '\0';
  86.     if (c == EOF) return NULL;
  87.     return 1;
  88. }
  89.  
  90.  
  91. int strcmp(s,t)
  92. char **s, **t;
  93. {
  94.     char *s1, *t1;
  95.     s1 = *s;
  96.     t1 = *t;
  97.     int i;
  98.     i = 0;
  99.     while (s1[i] == t1[i])
  100.         if (s1[i++] == '\0')
  101.             return 0;
  102.     return s1[i] - t1[i];
  103. }
  104.