Exemplo n.º 1
0
int kopt_rpc_server_init(unsigned short port, int argc, char *argv[])
{
	int i;

	if (port == 0)
		port = 9000;

	i = karg_find(argc, argv, "--or-port", 1);
	if (i > 0 && (i + 1) < argc) {
		int tmp;
		if (!kstr_toint(argv[i + 1], &tmp))
			port = tmp;
	}

	klog("port: %d\n", port);

	ignore_pipe();
	spl_thread_create(worker_thread_or_server, (void*)(long)port, 0);
	return 0;
}
Exemplo n.º 2
0
int main(int argc, char *argv[])
{
    FILE *bron;
    float distweight[1024];
    float total,max,threshold;
    int  i,j,nrddt,mid,sock,connected,nrdist,maxnr;
    char **dtwords;
    char **dwords;
    char thisdtword[1024];
    char thisdword[1024];
    char locaps[1024];
    char target[1024];
    char stem[1024];
    char classifyline[32768];
    char line[32768];
    char buff[32768];
    char feats[NRFEAT][1024];
    char *part;
    char category[1024];
    char ddtmatch;

    sscanf(argv[1],"%f",&threshold);
    if ((threshold<0.5)||
            (threshold>1.0))
    {
        fprintf(stderr,"[t-dt_checker] ERROR: threshold value not between 0.5 and 1.0\n");
        exit(1);
    }

    bron=fopen(argv[2],"r");
    nrddt=0;
    fgets(line,32768,bron);
    while (!feof(bron))
    {
        nrddt++;
        fgets(line,32768,bron);
    }
    fclose(bron);

    dtwords=malloc(nrddt*sizeof(char*));
    dwords=malloc(nrddt*sizeof(char*));

    bron=fopen(argv[2],"r");
    for (i=0; i<nrddt; i++)
    {
        fscanf(bron,"%s %s ",
               thisdtword,thisdword);
        dtwords[i]=malloc((strlen(thisdtword)+1)*sizeof(char));
        strcpy(dtwords[i],thisdtword);
        dwords[i]=malloc((strlen(thisdword)+1)*sizeof(char));
        strcpy(dwords[i],thisdword);
    }
    fclose(bron);

    if (DEBUG)
        fprintf(stderr,"read %d t-dt triggers from %s\n",
                nrddt,argv[2]);

    // process inst file

    // first, start up communications with the Timbl server
    ignore_pipe();
    sock=make_connection(PORT,SOCK_STREAM,MACHINE);
    if (sock==-1)
    {
        fprintf(stderr,"the confusible server is not responding\n");
        exit(1);
    }
    else
        connected=1;

    // cut off the Timbl welcome message
    sock_gets(sock,buff,sizeof(buff)-1);

    // cut off the Timbl base message
    sock_gets(sock,buff,sizeof(buff)-1);

    // tell the Timbl server to use the t-dt base
    sock_puts(sock,"base t-dt\n");

    // cut off the Timbl acknowledgement
    sock_gets(sock,buff,sizeof(buff)-1);

    mid=NRFEAT/2;
    bron=fopen(argv[3],"r");
    fgets(line,32768,bron);
    while (!feof(bron))
    {
        part=strtok(line," \n");
        for (i=0; ((part!=NULL)&&(i<NRFEAT)); i++)
        {
            strcpy(feats[i],part);
            part=strtok(NULL," \n");
        }
        if (!((strcmp(feats[mid],"<begin>")==0)||
                (strcmp(feats[mid],"<end>")==0)))
        {
            strcpy(locaps,"");
            for (i=0; i<strlen(feats[mid]); i++)
            {
                strcat(locaps," ");
                if ((feats[mid][i]>='A')&&
                        (feats[mid][i]<='Z'))
                    locaps[i]=feats[mid][i]+32;
                else
                    locaps[i]=feats[mid][i];
            }

            ddtmatch=0;
            i=0;
            while ((i<nrddt)&&
                    (!ddtmatch))
            {
                if ((strcmp(feats[mid],dtwords[i])==0)||
                        (strcmp(locaps,dtwords[i])==0)||
                        (strcmp(feats[mid],dwords[i])==0)||
                        (strcmp(locaps,dwords[i])==0))
                    ddtmatch=1;
                if (!ddtmatch)
                    i++;
            }

            fprintf(stdout,"%s",
                    feats[mid]);
            if (ddtmatch)
            {
                // call Timbl
                strcpy(classifyline,"c ");
                for (j=0; j<NRFEAT; j++)
                {
                    strcat(classifyline,feats[j]);
                    strcat(classifyline," ");
                }
                strcat(classifyline,"?\n");

                if (DEBUG)
                    fprintf(stderr,"\ncalling Timbl with %s",
                            classifyline);

                sock_puts(sock,classifyline);
                sock_gets(sock,buff,sizeof(buff));

                if (DEBUG)
                    fprintf(stderr,"getting back: %s\n",
                            buff);

                part=strtok(buff," \n");
                part=strtok(NULL," \n");
                strcpy(category,"");
                for (j=1; j<strlen(part)-1; j++)
                {
                    strcat(category," ");
                    category[j-1]=part[j];
                }
                while ((part!=NULL)&&
                        (strcmp(part,"{")!=0))
                    part=strtok(NULL," \n");

                if (part!=NULL)
                {
                    nrdist=0;
                    while ((part!=NULL)&&
                            (strcmp(part,"}")!=0))
                    {
                        part=strtok(NULL," \n");
                        if (strcmp(part,"}")!=0)
                        {
                            part=strtok(NULL," \n");
                            if (part[strlen(part)-1]==',')
                                sscanf(part,"%f,",&distweight[nrdist]);
                            else
                                sscanf(part,"%f",&distweight[nrdist]);
                            nrdist++;
                        }
                    }
                    if (DEBUG)
                    {
                        fprintf(stderr,"distro of %d: ",
                                nrdist);
                        for (i=0; i<nrdist; i++)
                            fprintf(stderr," %9.4f",
                                    distweight[i]);
                    }
                    max=0.0;
                    total=0.0;
                    for (i=0; i<nrdist; i++)
                    {
                        total+=distweight[i];
                        if (distweight[i]>max)
                        {
                            max=distweight[i];
                            maxnr=i;
                        }
                    }

                    if (DEBUG)
                        fprintf(stderr," - max %6.3f certainty\n",
                                (max/total));

                    if ((max/total>=threshold)&&
                            (total>MINOCC))
                    {
                        if (strcmp(category,target)!=0)
                        {
                            fprintf(stdout," %s",
                                    category);
                            fprintf(stderr,"correcting %s to %s\n",
                                    feats[mid],category);
                        }
                    }

                }
            }
            fprintf(stdout,"\n");
        }
        fgets(line,32768,bron);
    }
    fclose(bron);
    close(sock);

    return 0;
}
Exemplo n.º 3
0
int main(int argc, char *argv[])
{
  FILE *bron;
  int  i,j,mid,sock,connected,withletters,nrexceptions=0;
  float letterratio;
  char classifyline[32768];
  char word[1024];
  char word2[1024];
  char locap[1024];
  char partlocap[1024];
  char line[32768];
  char buff[32768];
  char feats[NRFEAT][1024];
  char ***exceptions;
  char *part;
  char inflection,exception,locapmatch;

  // read exceptions

  bron=fopen(argv[1],"r");
  fgets(line,32768,bron);
  while (!feof(bron))
    {
      nrexceptions++;
      fgets(line,32768,bron);
    }
  fclose(bron);
  exceptions=malloc(nrexceptions*sizeof(char**));
  bron=fopen(argv[1],"r");
  for (i=0; i<nrexceptions; i++)
    {
      fscanf(bron,"%s %s ",
	     word,word2);
      exceptions[i]=malloc(2*sizeof(char*));
      exceptions[i][0]=malloc((strlen(word)+1)*sizeof(char));
      exceptions[i][1]=malloc((strlen(word2)+1)*sizeof(char));
      strcpy(exceptions[i][0],word);
      strcpy(exceptions[i][1],word2);
    }
  if (DEBUG2)
    fprintf(stderr,"read %d exception pairs from %s\n",
	    nrexceptions,argv[1]);

  // process inst file

  // first, start up communications with the WOPR server
  ignore_pipe();
  sock=make_connection(PORT,SOCK_STREAM,MACHINE);
  if (sock==-1)
    {
      fprintf(stderr,"the WOPR server is not responding\n");
      exit(1);
    }
  else
    connected=1;

  mid=NRFEAT/2;
  bron=fopen(argv[2],"r");
  fgets(line,32768,bron);
  while (!feof(bron))
    {
      part=strtok(line," \n");
      for (i=0; ((part!=NULL)&&(i<NRFEAT)); i++)
	{
	  strcpy(feats[i],part);
	  part=strtok(NULL," \n");
	}

      strcpy(word,feats[mid]);

      if (!((strcmp(word,"<begin>")==0)||
	    (strcmp(word,"<end>")==0)))
	{

	  fprintf(stdout,"%s",
		  word);
	  
	  strcpy(locap,"");
	  withletters=0;
	  for (i=0; i<strlen(word); i++)
	    {
	      strcat(locap," ");
	      if ((word[i]>='A')&&(word[i]<='Z'))
		locap[i]=word[i]+32;
	      else
		locap[i]=word[i];
	      if ((locap[i]>='a')&&(locap[i]<='z'))
		withletters++;
	    }

	  letterratio=(1.*withletters)/(1.*strlen(word));


	  if (letterratio>0.5)
	    {

	      /*
	      ignore_pipe();
	      sock=make_connection(PORT,SOCK_STREAM,MACHINE);
	      if (sock==-1)
		{
		  fprintf(stderr,"the WOPR server is not responding\n");
		  exit(1);
		}
	      else
		connected=1;
	      */

	      // call WOPR
	      strcpy(classifyline,"");
	      for (j=0; j<NRFEAT; j++)
		{
		  if (j!=mid)
		    {
		      strcat(classifyline,feats[j]);
		      strcat(classifyline," ");
		    }
		}
	      strcat(classifyline,word);
	      strcat(classifyline,"\n");
	      
	      if (DEBUG2)
		fprintf(stderr,"calling WOPR with %s",
			classifyline);
	      
	      sock_puts(sock,classifyline);
	      sock_gets(sock,buff,sizeof(buff));
	      
	      if (DEBUG2)
		fprintf(stderr,"getting back: %s\n",
			buff);
	      
	      part=strtok(buff,"\t\n");
	      
	      while ((part!=NULL)&&
		     (strcmp(part,"__EMPTY__")!=0))
		{
		  // special WOPR check
		  exception=0;
		  for (i=0; ((i<nrexceptions)&&(!exception)); i++)
		    {
		      if (((strcmp(word,exceptions[i][0])==0)&&
			   (strcmp(part,exceptions[i][1])==0))||
			  ((strcmp(word,exceptions[i][1])==0)&&
			   (strcmp(part,exceptions[i][0])==0)))
			{
			  exception=1;
			  if (DEBUG)
			    fprintf(stderr,"WOPR caught an exception (%s %s) and will remain silent\n",
				word,part);
			}
		    }
		 
		  // check: locap match?
		  locapmatch=0;

		  strcpy(partlocap,"");
		  for (i=0; i<strlen(part); i++)
		    {
		      strcat(partlocap," ");
		      if ((part[i]>='A')&&(part[i]<='Z'))
			partlocap[i]=part[i]+32;
		      else
			partlocap[i]=part[i];
		    }

		  if (strcmp(partlocap,locap)==0)
		    locapmatch=1;

		  // check: plural?
		  inflection=0;
		  if (!exception)
		    {
		      if ((((part[strlen(part)-1]=='s')&&
			    (word[strlen(word)-1]!='s')))||
			  (((part[strlen(part)-1]!='s')&&
			    (word[strlen(word)-1]=='s'))))
			inflection=1;
		      if ((((part[strlen(part)-1]=='e')&&
			    (word[strlen(word)-1]!='e')))||
			  (((part[strlen(part)-1]!='e')&&
			    (word[strlen(word)-1]=='e'))))
			inflection=1;
		      if ((((part[strlen(part)-1]=='n')&&
			    (word[strlen(word)-1]=='t')))||
			  (((part[strlen(part)-1]=='t')&&
			    (word[strlen(word)-1]=='n'))))
			inflection=1;
		    }
		  if ((!inflection)&&
		      (!exception)&&
		      (!locapmatch)&&
		      (strlen(part)>MINLEN))
		    {
		      fprintf(stdout," %s",
			      part);
		      fprintf(stderr,"WOPR corrects [%s] into [%s]\n",
			      word,part);
		    }
		  part=strtok(NULL,"\t\n");
		}

	      //close(sock);

	    } 
	  fprintf(stdout,"\n");
	}
      fgets(line,32768,bron);
    }
  fclose(bron);
  close(sock);

  return 0;
}
Exemplo n.º 4
0
int main(int argc, char *argv[])
{
  FILE *bron;
  float distweight[1024];
  float total,max,threshold;
  int  i,j,sock,connected,nrdist,counter,defcon,maxnr,result;
  char classifyline[32768];
  char readbuffer[1024];
  char locap[1024];
  char buffer[NRFEAT][1024];
  char membuffer[NRFEAT+3][1024];
  char buff[32768];
  char timblbuffer[1024];
  char punc[NRFEAT][32];
  char cap[1024];
  char puncstring[1024];
  char *part;
  char category[1024];
  char realout[1024];
  char capped,ready;

  ready=0;
  defcon=maxnr=connected=result=0;

  sscanf(argv[1],"%f",&threshold);
  if ((threshold<0.5)||
      (threshold>1.0))
    {
      fprintf(stderr,"[punc-recase_checker] ERROR: threshold value not between 0.5 and 1.0\n");
      exit(1);
    }

  strcpy(puncstring,",.`'\"’‘!?:;()");

  // process text file (not prefab inst!)

  // first, start up communications with the Timbl server
  ignore_pipe();
  sock=make_connection(PORT,SOCK_STREAM,MACHINE);
  if (sock==-1)
    {
      fprintf(stderr,"the punc-recase server is not responding\n");
      exit(1);
    }
  else
    connected=1;

  // cut off the Timbl welcome message
  sock_gets(sock,buff,sizeof(buff)-1); 

  // cut off the Timbl base message
  sock_gets(sock,buff,sizeof(buff)-1); 

  // tell the Timbl server to use the punc-recase base
  sprintf(timblbuffer,"base punc-recase\n");
  sock_puts(sock,timblbuffer);

  // cut off the Timbl acknowledgement
  sock_gets(sock,buff,sizeof(buff)-1); 

  // initialize buffers
  strcpy(cap,"");
  for (i=0; i<NRFEAT; i++)
    {
      strcpy(membuffer[i],"_");
      strcpy(buffer[i],"_");
      strcpy(punc[i],"NP");
      strcat(cap," ");
      cap[i]='-';
    }

  bron=fopen(argv[2],"r");
  counter=0;
  while (!ready)
    {
      if (!feof(bron))
	{
	  result=fscanf(bron,"%s ",
			readbuffer);
	}
      else
	strcpy(readbuffer,"_");

      /*
      if ((counter>(NRFEAT/2)-1)&&
	  (defcon<=NRFEAT/2))
	{
	  
	  fprintf(stdout,"%s",
		  membuffer[(NRFEAT/2)-1]);
	  if (DEBUG)
	    fprintf(stderr,"original token: [%s]\n",
		    membuffer[(NRFEAT/2)-1]);
	}
      */

      for (i=NRFEAT; i>0; i--)
	strcpy(membuffer[i],membuffer[i-1]);
      strcpy(membuffer[0],readbuffer);

      if (strstr(puncstring,readbuffer))
	{
	  strcpy(punc[NRFEAT-1],readbuffer);
	}
      else
	{
	  capped=0;
	  if ((readbuffer[0]>='A')&&
	      (readbuffer[0]<='Z'))
	    capped=1;
	  strcpy(locap,"");
	  for (i=0; i<strlen(readbuffer); i++)
	    {
	      strcat(locap," ");
	      if ((readbuffer[i]>='A')&&
		  (readbuffer[i]<='Z'))
		locap[i]=readbuffer[i]+32;
	      else
		locap[i]=readbuffer[i];
	    }
	  
	  for (i=0; i<NRFEAT-1; i++)
	    {
	      strcpy(buffer[i],buffer[i+1]);
	      strcpy(punc[i],punc[i+1]);
	      cap[i]=cap[i+1];
	    }
	  strcpy(buffer[NRFEAT-1],locap);
	  if (capped)
	    cap[NRFEAT-1]='C';
	  else
	    cap[NRFEAT-1]='-';
	  strcpy(punc[NRFEAT-1],"NP");
		
      
	  if (DEBUG)
	    fprintf(stderr,"checking [%s]-[%c]-[%s]\n",
		    buffer[(NRFEAT/2)],
		    cap[(NRFEAT/2)],
		    punc[(NRFEAT/2)]);
	  
	  if (counter>2)
	    {
	      //if (strcmp(punc[(NRFEAT/2)],"NP")==0)
		{
		  if ((counter>(NRFEAT/2)-1)&&
		      (defcon<=NRFEAT/2))
		    {
		      
		      fprintf(stdout,"%s",
			     buffer[(NRFEAT/2)]);
		      if (DEBUG)
			fprintf(stderr,"original token: [%s]\n",
				buffer[(NRFEAT/2)]);
		    }


		  if (DEBUG)
		    {
		      fprintf(stderr,"\nbuffer:");
		      for (i=0; i<NRFEAT; i++)
			fprintf(stderr," [%10s]",
				buffer[i]);
		      fprintf(stderr,"\n");
		      
		      fprintf(stderr,"cap:   ");
		      for (i=0; i<NRFEAT; i++)
			fprintf(stderr," [%10c]",
				cap[i]);
		      fprintf(stderr,"\n");
		      
		      fprintf(stderr,"punc:  ");
		      for (i=0; i<NRFEAT; i++)
			fprintf(stderr," [%10s]",
				punc[i]);
		      fprintf(stderr,"\n");
		    }
		  
		  
		  strcpy(classifyline,"c ");
		  
		  for (i=0; i<NRFEAT-1; i++)
		    {
		      strcat(classifyline,buffer[i]);
		      strcat(classifyline," ");
		    }
		  
		  if (strcmp(punc[2],"NP")!=0)
		    {
		      if (cap[3]!='-')
			{
			  strcat(classifyline,punc[2]);
			  strcpy(realout,punc[2]);
			  strcat(classifyline,"C\n");
			  strcat(realout,"C");
			}
		      else
			{
			  strcat(classifyline,punc[2]);
			  strcpy(realout,punc[2]);
			  strcat(classifyline,"\n");
			}
		    }
		  else
		    {
		      if (cap[3]!='-')
			{
			  strcat(classifyline,"C\n");
			  strcpy(realout,"C");
			}
		      else
			{
			  strcat(classifyline,"-\n");
			  strcpy(realout,"-");
			}
		    }
		  
		  if (DEBUG)
		    fprintf(stderr,"\ncalling Timbl with %s",
			    classifyline);
		  
		  sock_puts(sock,classifyline);
		  sock_gets(sock,buff,sizeof(buff));
		  
		  if (DEBUG)
		    fprintf(stderr,"getting back: %s\n",
			    buff);
		  
		  part=strtok(buff," \n");
		  part=strtok(NULL," \n");
		  strcpy(category,"");
		  for (j=1; j<strlen(part)-1; j++)
		    {
		      strcat(category," ");
		      category[j-1]=part[j];
		    }
		  while ((part!=NULL)&&
			 (strcmp(part,"{")!=0))
		    part=strtok(NULL," \n");
		  
		  if (part!=NULL)
		    {
		      nrdist=0;
		      while ((part!=NULL)&&
			     (strcmp(part,"}")!=0))
			{
			  part=strtok(NULL," \n");
			  if (strcmp(part,"}")!=0)
			    {
			      part=strtok(NULL," \n");
			      if (part[strlen(part)-1]==',')
				sscanf(part,"%f,",&distweight[nrdist]);
			      else
				sscanf(part,"%f",&distweight[nrdist]);
			      nrdist++;
			    }
			}
		      if (DEBUG)
			{
			  fprintf(stderr,"distro of %d:",
				  nrdist);
			  for (i=0; i<nrdist; i++)
			    fprintf(stderr," %.0f",
				    distweight[i]);
			}
		      
		      max=0.0;
		      maxnr=0;
		      total=0.0;
		      for (i=0; i<nrdist; i++)
			{
			  total+=distweight[i];
			  if (distweight[i]>max)
			    {
			      max=distweight[i];
			      maxnr=i;
			    }
			}
		      
		      if (DEBUG)
			fprintf(stderr," - max %6.3f certainty\n",
				(max/total));
		      
		      if ((max/total>=threshold)&&
			  // (max/total<1.0)&&
			  (total>MINOCC))
			{
			  if ((strcmp(category,realout)!=0)&&
			      (strcmp(category,"-")!=0))
			    {
			      if (DEBUG)
				{
				  fprintf(stderr,"line: %s",
					  classifyline);
				  fprintf(stderr,"we have to do something: predicted %s is not actual %s\n",
					  category,realout);
				  fprintf(stderr,"correction: [%s]\n",
					  category);
				}
			      fprintf(stdout," %s",
				      category);
			    }
			}
		    }
		}
	      if (strcmp(punc[NRFEAT/2],"NP")!=0)
		{
		  if ((counter>(NRFEAT/2)-1)&&
		      (defcon<=NRFEAT/2))
		    {
		      
		      fprintf(stdout,"\n%s",
			     punc[(NRFEAT/2)]);
		      if (DEBUG)
			fprintf(stderr,"original token: [%s]\n",
				punc[(NRFEAT/2)]);
		    }


		}
	    }
	
	
	  if ((counter>(NRFEAT/2)-1)&&
	      (defcon<=NRFEAT/2))
	    {
	      fprintf(stdout,"\n");
	      if (DEBUG)
		fprintf(stderr,"\n");
	    }
	}

      if (feof(bron))
        defcon++;
      if (defcon>(NRFEAT/2))
        ready=1;

      counter++;
    }
  fclose(bron);
  close(sock);

  return 0;
}
Exemplo n.º 5
0
int main(int argc, char *argv[])
{
  FILE *bron;
  float distweight[1024];
  char word1[1024];
  char capword1[1024];
  char word2[1024];
  char capword2[1024];
  float total,max,threshold;
  int  i,j,mid,sock,connected,nrdist,maxnr;
  char classifyline[32768];
  char line[32768];
  char buff[32768];
  char buffer[1024];
  char feats[NRFEAT][1024];
  char *part;
  char category[1024];
  char match;

  strcpy(word1,argv[1]);
  strcpy(capword1,word1);
  capword1[0]-=32;

  strcpy(word2,argv[2]);
  strcpy(capword2,word2);
  capword2[0]-=32;

  sscanf(argv[3],"%f",&threshold);
  if ((threshold<0.5)||
      (threshold>1.0))
    {
      fprintf(stderr,"[confusible_checker] ERROR: threshold value not between 0.5 and 1.0\n");
      exit(1);
    }

  // process inst file

  // first, start up communications with the Timbl server
  ignore_pipe();
  sock=make_connection(PORT,SOCK_STREAM,MACHINE);
  if (sock==-1)
    {
      fprintf(stderr,"the confusible server is not responding\n");
      exit(1);
    }
  else
    connected=1;

  // cut off the Timbl welcome message
  sock_gets(sock,buff,sizeof(buff)-1); 

  // cut off the Timbl base message
  sock_gets(sock,buff,sizeof(buff)-1); 

  // tell the Timbl server to use the word1-word2 base
  sprintf(buffer,"base %s-%s\n",
	  word1,word2);
  sock_puts(sock,buffer);

  // cut off the Timbl acknowledgement
  sock_gets(sock,buff,sizeof(buff)-1); 
  
  mid=NRFEAT/2;
  bron=fopen(argv[4],"r");
  fgets(line,32768,bron);
  while (!feof(bron))
    {
      part=strtok(line," \n");
      for (i=0; ((part!=NULL)&&(i<NRFEAT)); i++)
	{
	  strcpy(feats[i],part);
	  part=strtok(NULL," \n");
	}
      if (!((strcmp(feats[mid],"<begin>")==0)||
	    (strcmp(feats[mid],"<end>")==0)))
	{
	  match=0;
	  if ((strcmp(feats[mid],word1)==0)||
	      (strcmp(feats[mid],capword1)==0)||
	      (strcmp(feats[mid],word2)==0)||
	      (strcmp(feats[mid],capword2)==0))
	    match=1;
	  
	  fprintf(stdout,"%s",
		  feats[mid]);
	  
	  if (match)
	    {
	      // call Timbl
	      strcpy(classifyline,"c ");
	      for (j=0; j<NRFEAT; j++)
		{
		  if (j!=mid)
		    strcat(classifyline,feats[j]);
		  strcat(classifyline," ");
		}
	      strcat(classifyline,"?\n");

	      if (DEBUG)
		fprintf(stderr,"\ncalling Timbl with %s",
			classifyline);
	      
	      sock_puts(sock,classifyline);
	      sock_gets(sock,buff,sizeof(buff));
	      
	      if (DEBUG)
		fprintf(stderr,"getting back: %s\n",
			buff);
	      
	      part=strtok(buff," \n");
	      part=strtok(NULL," \n");
	      strcpy(category,"");
	      for (j=1; j<strlen(part)-1; j++)
		{
		  strcat(category," ");
		  category[j-1]=part[j];
		}
	      while ((part!=NULL)&&
		     (strcmp(part,"{")!=0))
		part=strtok(NULL," \n");
	      
	      if (part!=NULL)
		{
		  nrdist=0;
		  while ((part!=NULL)&&
			 (strcmp(part,"}")!=0))
		    {
		      part=strtok(NULL," \n");
		      if (strcmp(part,"}")!=0)
			{
			  part=strtok(NULL," \n");
			  if (part[strlen(part)-1]==',')
			    sscanf(part,"%f,",&distweight[nrdist]);
			  else
			    sscanf(part,"%f",&distweight[nrdist]);
			  nrdist++;
			}
		    }
		  if (DEBUG)
		    {
		      fprintf(stderr,"distro of %d:",
			      nrdist);
		      for (i=0; i<nrdist; i++)
			fprintf(stderr," %.0f",
				distweight[i]);
		    }
		  
		  max=0.0;
		  total=0.0;
		  for (i=0; i<nrdist; i++)
		    {
		      total+=distweight[i];
		      if (distweight[i]>max)
			{
			  max=distweight[i];
			  maxnr=i;
			}
		    }
		  
		  if (DEBUG)
		    fprintf(stderr," - max %6.3f certainty\n",
			    (max/total));
		  
		  if ((max/total>=threshold)&&
		      (max/total<1.0)&&
		      (total>MINOCC))
		    {
		      if (strcmp(category,feats[mid])!=0)
			{
			  fprintf(stdout," %s%6.3f",
				  category,(max/total));
			  fprintf(stderr,"corrected %s into %s\n",
				  feats[mid],category);
			}
		    }
		}
	    }
	  fprintf(stdout,"\n");
	}
      fgets(line,32768,bron);
    }
  fclose(bron);
  close(sock);

  return 0;
}
Exemplo n.º 6
0
int main(int argc, char **argv) {

  /*Set default values for tty device, server port and background operation*/
  char ttydev[1024];
  strncpy(ttydev, "/dev/ttyS0", 1023);
  char serverport[1024];
  strncpy(serverport, "3376", 1023);
  int auth = FALSE;
  int verbose = FALSE;
  
  /*Find options on the commandline*/
  int c;
  extern char *optarg;
  
  while ((c = getopt(argc, argv, "s:p:dv")) != -1) {
    switch(c) {
      case 's':
        strncpy(ttydev, optarg, 1023);
        break;
      case 'p':
        strncpy(serverport, optarg, 1023);
	break;
      case 'd':
        background = TRUE;
	break;
      case 'a':
        auth = TRUE;
	break;
      case 'v':
        verbose = TRUE;
	break;
      case '?':
        print_usage();
    }
  }
  
  /*open camera interface*/
  VISCA_open_interface(&interface, &camera, ttydev);
  
  /*Set up some signal handling*/
  ignore_pipe();
  struct sigaction sa;  
  sigemptyset(&sa.sa_mask);
  sa.sa_flags = 0;
  sa.sa_handler = sig_chld;
  sigaction(SIGCHLD, &sa, NULL);
  sa.sa_handler = sig_abort;
  sigaction(SIGINT, &sa, NULL);
  sigaction(SIGQUIT, &sa, NULL);
  sigaction(SIGTERM, &sa, NULL);

  /*initialize network stuff - taken from socket-faq*/
  int port = -1;
  port = atoport(serverport, "tcp");
  if (port == -1) {
    fprintf(stderr,"Unable to find service: %s\n",serverport);
    exit(1);
  }

  /*check for lock file*/
  struct stat tempstat;
  if (stat("/var/lock/visca-daemon.lock", &tempstat) == 0) {
    fprintf(stderr, "Lockfile /var/lock/visca-daemon.lock exists\nMaybe another visca-daemo is running already?\n\n");
    exit(1);      
  }

  /*go to background if the user wants us to*/
  if (background == TRUE) {
    if(daemon(0,0) != 0) {
      fprintf(stderr,"Unable to detach from console\n");
      exit(1);
    }
    openlog("visca-daemon", 0, LOG_DAEMON);
  }

  mknod("/var/lock/visca-daemon.lock", S_IFREG, 0);
  
  if (background == TRUE) {
    syslog(LOG_INFO, "Visca Camera daemon started.\n");
  } else {
    fprintf(stderr, "Visca Camera daemon started.\n");
  } 
  
  /*Wait for a client to make connections*/
  /*forking is handled by sockhelp.c from the socket-faq*/
  int sock = get_connection(SOCK_STREAM, port, &listensock);
  connectsock = sock;
  if (background == TRUE) {
    syslog(LOG_INFO, "New connection established\n");
  } else {
    fprintf(stderr, "New connection established\n");
  } 

  /*Greet the user*/
  char buffer[1024];
  sock_puts(sock,"Welcome to the VISCA camera server\n");
  
  int connected = 1;
  int errorcode;
  int ret1, ret2, ret3;
  while (connected) {
    /* Read input */
    if (sock_gets(sock, buffer, 1024) < 0) {
      connected = 0;
    } else if (buffer[0]=='\0') {
      connected = 0;    
    } else {
      if (verbose == TRUE) {
        if (background == TRUE) {
          syslog(LOG_INFO, "Command received: %s\n", buffer);
	} else {
          fprintf(stderr, "Command received: %s\n", buffer);
	}
      }
      errorcode = VISCA_doCommand(buffer, &ret1, &ret2, &ret3, &interface, &camera);
      switch(errorcode) {
        case 10:
	  snprintf(buffer, 1023, "10 OK - no return value\n");
          break;
        case 11:
	  snprintf(buffer, 1023, "11 OK - one return value\nRET1: %i\n", ret1);
          break;    
        case 12:
	  snprintf(buffer, 1023, "12 OK - two return values\nRET1: %i\nRET2: %i\n", ret1, ret2);
          break;
        case 13:
	  snprintf(buffer, 1023, "13 OK - three return values\nRET1: %i\nRET2: %i\nRET3: %i\n", ret1, ret2, ret3);
          break;
        case 40:
	  snprintf(buffer, 1023, "40 ERROR - command not recognized\n");
          break;
        case 41:
	  snprintf(buffer, 1023, "41 ERROR - argument 1 not recognized\n");
          break;
        case 42:
	  snprintf(buffer, 1023, "42 ERROR - argument 2 not recognized\n");
          break;
        case 43:
	  snprintf(buffer, 1023, "43 ERROR - argument 3 not recognized\n");
          break;
        case 44:
	  snprintf(buffer, 1023, "44 ERROR - argument 4 not recognized\n");
          break;
        case 45:
	  snprintf(buffer, 1023, "45 ERROR - argument 5 not recognized\n");
          break;
        case 46:
	  snprintf(buffer, 1023, "46 ERROR - camera replied with an error\n");
          break;
        case 47:
	  snprintf(buffer, 1023, "47 ERROR - camera replied with an unknown return value\n");
          break;
        default:
	  snprintf(buffer, 1023, "unknown error code: %i\n", errorcode);
      }
      if (verbose == TRUE) {
        if (background == TRUE) {
          syslog(LOG_INFO, "Answer sent: %s", buffer);
	} else {
          fprintf(stderr, "Answer sent: %s", buffer);
	}
      }

      if (sock_puts(sock, buffer) < 0) {
        connected = 0;
      }
    }
  }
  if (background == TRUE) {
    syslog(LOG_INFO, "Connection closed\n");
  } else {
    fprintf(stderr, "Connection closed\n");
  }
  close(sock);
  return 0;
}
Exemplo n.º 7
0
static void *worker_thread_or_server(void *userdata)
{
	int ready, i, n, bufsize = 128 * 1024;
	void *buf;
	struct epoll_event ev, *e;

	unsigned short port = (unsigned short)(int)(long)userdata;

	int s_listen, new_fd;
	struct sockaddr_in their_addr;
	struct sockaddr_in my_addr;
	socklen_t sin_size;

	ignore_pipe();

	if ((s_listen = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
		kerror("c:%s, e:%s\n", "socket", strerror(errno));
		return NULL;
	}

	config_socket(s_listen);

	my_addr.sin_family = AF_INET;
	my_addr.sin_port = htons(port);
	my_addr.sin_addr.s_addr = INADDR_ANY;
	memset(my_addr.sin_zero, '\0', sizeof(my_addr.sin_zero));
	if (bind(s_listen, (struct sockaddr *) &my_addr, sizeof(my_addr)) == -1) {
		kerror("c:%s, e:%s\n", "bind", strerror(errno));
		return NULL;
	}

	if (listen(s_listen, BACKLOG) == -1) {
		kerror("c:%s, e:%s\n", "listen", strerror(errno));
		return NULL;
	}

	__g_epoll_fd = epoll_create(__g_epoll_max);
	memset(&ev, 0, sizeof(ev));
	ev.data.fd = s_listen;
	ev.events = EPOLLIN;
	epoll_ctl(__g_epoll_fd, EPOLL_CTL_ADD, s_listen, &ev);

	buf = kmem_alloc(bufsize, char);
	for (;;) {
		do
			ready = epoll_wait(__g_epoll_fd, __g_epoll_events, __g_epoll_max, -1);
		while ((ready == -1) && (errno == EINTR));

		for (i = 0; i < ready; i++) {
			e = __g_epoll_events + i;

			if (e->data.fd == s_listen) {
				sin_size = sizeof(their_addr);
				if ((new_fd = accept(s_listen, (struct sockaddr *) &their_addr, &sin_size)) == -1) {
					kerror("c:%s, e:%s\n", "accept", strerror(errno));
					continue;
				}

				/* FIXME: non-blocking will cause orbatch bang */
				/* setnonblocking(new_fd); */

				/* XXX: new_fd can be o or w */
				if (process_connect(new_fd))
					close_connect(new_fd);

				continue;
			} else if (!(e->events & EPOLLIN)) {
				kerror("!!! Not EPOLLIN: event is %08x, fd:%d\n", e->events, e->data.fd);
				continue;
			}

			if ((n = recv(e->data.fd, buf, bufsize, 0)) > 0) {
				if (do_opt_command(e->data.fd, buf, n))
					close_connect(e->data.fd);
			} else {
				klog("Remote close socket: %d\n", e->data.fd);
				close_connect(e->data.fd);
			}
		}
	}
	kmem_free(buf);

	close(__g_epoll_fd);
	__g_epoll_fd = -1;

	return NULL;
}