home *** CD-ROM | disk | FTP | other *** search
- /*
- Alphabetize a file by lines.
- Usage:
- alph <inputfile> <outputfile>
- */
-
- #include "bdscio.h"
- #include "dio.h"
- #define stderr 4
-
- #define MAXLINES 2000 /* max number of lines */
-
- int strcmp();
- char iobuf[BUFSIZ];
- char *ltab[MAXLINES];
- int lcount;
- char *allocp;
-
- main(argc,argv)
- int argc;
- char **argv;
- {
- int i;
- char linbuf[300];
-
- dioinit(&argc,argv);
-
- if (argc > 1)
- if(fopen(argv[1],iobuf)== ERROR)
- exit(fputs("Can't open input file\n",stderr));
-
- lcount = 0;
- for (i = 0; i < MAXLINES; i++)
- {
- if (argc > 1) {
- if (!fgets(linbuf,iobuf)) break;
- }
- else
- if (!gets2(linbuf)) break;
-
- if ((allocp = sbrk(strlen(linbuf) + 1)) == ERROR)
- exit(fputs("Out of allocation space\n",stderr));
- ltab[lcount++] = allocp;
- strcpy(allocp,linbuf);
- }
-
- if (argc > 1)
- fclose(iobuf);
-
- if (i == MAXLINES) exit(fputs("Too many lines. Change MAXLINES\n"
- ,stderr));
-
- qsort(ltab,lcount,2,&strcmp);
-
- if (argc > 2) {
- if (fcreat(argv[2],iobuf) == ERROR)
- exit(fputs("Can't creat output file\n",stderr));
- }
- else fputs("******** Alphabetized: *********\n",stderr);
-
- for (i = 0; i < lcount; i++)
- if (argc > 2)
- fputs(ltab[i],iobuf);
- else
- puts(ltab[i]);
- if (argc > 2) {
- putc(CPMEOF,iobuf);
- fflush(iobuf);
- fclose(iobuf);
- }
- fputs("\n*********** All done ***********\n",stderr);
- dioflush();
- }
-
- int gets2(str)
- char *str;
- {
- int c;
-
- if ((c = getchar()) == EOF) return NULL;
- do {
- if ((*str++ = c) == '\n')
- break;;
- } while (c = getchar());
- *str = '\0';
- if (c == EOF) return NULL;
- return 1;
- }
-
-
- int strcmp(s,t)
- char **s, **t;
- {
- char *s1, *t1;
- s1 = *s;
- t1 = *t;
- int i;
- i = 0;
- while (s1[i] == t1[i])
- if (s1[i++] == '\0')
- return 0;
- return s1[i] - t1[i];
- }