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
Wrap
Text File
|
2000-06-30
|
2KB
|
104 lines
/*
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];
}