home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Datafile PD-CD 5
/
DATAFILE_PDCD5.iso
/
utilities
/
r
/
rsynth
/
!rsynth
/
compd_c
< prev
next >
Wrap
Text File
|
1994-04-05
|
2KB
|
119 lines
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "getopt.h"
int getline(char *s,int lim,FILE *fp)
{
int c,i;
i = 0;
while(--lim > 0 && (c=getc(fp)) != EOF && c != '\n')
s[i++] = c;
if(c == '\n')
s[i++] = c;
s[i] = '\0';
return i;
}
void use(void)
{
fprintf(stderr,"Use:\nCompdict -i<inputfile> -o<outputfile> -s<level>\n");
fprintf(stderr,"level = 0 : all entries\n");
fprintf(stderr,"level = 1 : no rare entries\n");
fprintf(stderr,"level = 2 : only top 500\n");
exit(0);
}
int main(int argc,char **argv)
{
char line[256],outl[256],*otp;
int i,pri,minpri,c,accept,lineno,bf;
FILE *fpin,*fpout;
line[0] = outl[0] = 0;
minpri = -1;
while((c = getopt(argc,argv,"i:o:s:")) != EOF)
{
switch(c)
{
case 'i':
strcpy(line,optarg);
break;
case 'o':
strcpy(outl,optarg);
break;
case 's':
minpri = strtol(optarg,NULL,10);
break;
case '?':
use();
}
}
if(!line[0] || !outl[0] || (minpri < 0) || (minpri > 2))
use();
fpin = fopen(line,"r");
if(!fpin)
{
fprintf(stderr,"file %s not found\n",line);
exit(1);
}
fpout = fopen(outl,"w");
if(!fpout)
{
fprintf(stderr,"could not open output file %s \n",outl);
exit(1);
}
accept = 0;
lineno = 0;
while(getline(line,256,fpin))
{
lineno++;
otp = outl;
bf = 0;
for(i=0;i<23 && line[i] != ' ';i++)
{
if(line[i] == '|')
{fprintf(stderr,"illegal character '|' in line %d %s\n ignoring line\n",lineno,line);
bf = 1;
break;
}
*otp++ = line[i];
}
if(bf)
continue;
for(;i<23 && line[i] == ' ';i++);
if(i!=23)
{
fprintf(stderr,"error in line %d %s\n ignoring it\n",lineno,line);
continue;
}
*otp++ = '|';
for(i=23;i<46 && line[i] != ' ';i++)
*otp++ = line[i];
for(;i<46 && line[i] == ' ';i++);
if(i!=46)
{
fprintf(stderr,"error in line %d %s\n ignoring it\n",lineno,line);
continue;
}
*otp++ = '\0';
pri = 0;
for(i=46;i<69 && line[i] != ' ';i++)
{
if(line[i] == '*') pri = 2;
if(line[i] == '%' && pri < 1) pri = 1;
}
if(pri >= minpri)
{
fprintf(fpout,"%s\n",outl);
accept++;
}
}
fclose(fpin);
fclose(fpout);
printf("Done.\nLines read: %d\nLines transferred to output: %d\n",lineno,accept);
}