head 1.9;
access;
symbols;
locks; strict;
comment @ * @;
1.9
date 94.03.12.00.59.25; author paul; state Exp;
branches;
next 1.8;
1.8
date 93.06.14.20.29.06; author paul; state Exp;
branches;
next 1.7;
1.7
date 93.02.01.16.29.11; author paul; state Exp;
branches;
next 1.6;
1.6
date 92.12.12.19.10.54; author paul; state Exp;
branches;
next 1.5;
1.5
date 92.07.30.03.46.08; author paul; state Exp;
branches;
next 1.4;
1.4
date 92.07.29.05.21.13; author paul; state Exp;
branches;
next 1.3;
1.3
date 92.07.28.18.31.42; author paul; state Exp;
branches;
next 1.2;
1.2
date 92.07.27.22.20.02; author paul; state Exp;
branches;
next 1.1;
1.1
date 92.07.27.21.37.00; author paul; state Exp;
branches;
next ;
desc
@@
1.9
log
@New copyright statement.
@
text
@/*
* Copyright (c) 1985 Corporation for Research and Educational Networking
* Copyright (c) 1988 University of Illinois Board of Trustees, Steven
* Dorner, and Paul Pomes
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the Corporation for
* Research and Educational Networking (CREN), the University of
* Illinois at Urbana, and their contributors.
* 4. Neither the name of CREN, the University nor the names of their
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE TRUSTEES AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE TRUSTEES OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
/*
* count the lines, and replace newlines with nulls
*/
for (spot = buffer; spot <= buffer + size; spot++)
if (*spot == '\n')
{
nLines++;
if (!(nLines % 500))
fprintf(stderr, "reading %d\r", nLines);
*spot = '\0';
}
nLines--;
putc('\n', stderr);
/*
* build an array of pointers to the lines
*/
if (nLines == 0) /* nothing to do and malloc(0) often dies */
exit(0);
ptrs = (char **) malloc(nLines * sizeof (char *));
if (!ptrs)
perror("malloc");
spot = buffer;
for (this = ptrs; this < ptrs + nLines; this++)
{
*this = spot;
while (*spot++) ;
}
1.1
log
@Initial revision
@
text
@d6 1
a6 1
int pstrcmp(char *p1, char *p2);
d12 65
a76 59
int size=0;
int iRead;
char *buffer=malloc(BSIZE);
char *spot;
int nLines=0;
char **ptrs, **this;
/*
* pass 1; read the file
*/
if (!buffer) perror("malloc");
while ((iRead = read(0,buffer+size,BSIZE))>0)
{
size += iRead;
buffer = realloc(buffer,size+BSIZE);
if (!buffer) perror("realloc");
}
buffer = realloc(buffer,size+1);
if (!buffer) perror("realloc");
buffer[size] = '\n';
/*
* count the lines, and replace newlines with nulls
*/
for (spot=buffer;spot<=buffer+size;spot++)
if (*spot=='\n')
{
nLines++;
if (!(nLines%500)) fprintf(stderr,"reading %d\r",nLines);
*spot = '\0';
}
nLines--;
putc('\n',stderr);
/*
* build an array of pointers to the lines
*/
ptrs = (char **) malloc(nLines*sizeof(char *));
if (!ptrs) perror("malloc");
spot = buffer;
for (this=ptrs;this<ptrs+nLines;this++)
{
*this = spot;
while (*spot++);
}
/*
* sort them
*/
qsort(ptrs,nLines,sizeof(char *),pstrcmp);
/*
* output them
*/
while (nLines--)
puts(*ptrs++);
d79 2
a80 1
int pstrcmp(char *p1, char *p2)
d82 2
a83 2
return (strcmp(*(char **)p1,*(char **)p2));
}@