head	1.6;
access;
symbols;
locks; strict;
comment	@# @;


1.6
date	94.04.23.10.33.50;	author wolff;	state Exp;
branches;
next	1.5;

1.5
date	94.04.23.10.27.37;	author wolff;	state Exp;
branches;
next	1.4;

1.4
date	93.08.15.18.26.12;	author wolff;	state Exp;
branches;
next	1.3;

1.3
date	93.07.17.20.07.53;	author guest;	state Exp;
branches;
next	1.2;

1.2
date	93.07.02.23.09.44;	author wolff;	state Exp;
branches;
next	1.1;

1.1
date	93.07.02.22.48.00;	author wolff;	state Exp;
branches;
next	;


desc
@Flex Scanner/Parser Version
@


1.6
log
@small Bugfixes
@
text
@/* $Revision: 1.5 $ */

/* $Log: StarDist.flex,v $
# Revision 1.5  1994/04/23  10:27:37  wolff
# Added the [-] Option: if - is added to distance, then only
# the Systems at that distance are printed.
#
# Revision 1.4  1993/08/15  18:26:12  wolff
# *** empty log message ***
#
# Revision 1.3  1993/07/17  20:07:53  guest
# Sectorabfrage eingebaut.
#
# Revision 1.2  1993/07/02  23:09:44  wolff
# Now with Revision and Log entries
# */

%{
#include <stdio.h>
#include <string.h>
#define ID 1
#define COORD 2
#define COMMENT 3
#define DELLIST "(), \0"
#define FILENAME "inputstars"
%}

DIGIT		[0-9]
ID		[a-zA-Z][0-9a-zA-ZäöüÄÖÜß' -]{0,18}
INT		[+-]?{DIGIT}+
XYCOORD		[+-]?{DIGIT}{1,2}
ZCOORD		[+-]?{DIGIT}
_obrack		"{"
_cbrack		"}"
_semicolon	";"

%s s1
%s s2
%%

{_semicolon}[^\n]*	/* Erstmal verschlucken */ 	{ return COMMENT; }

<s1>{ID}		{ yymore(); }

<s1>[ \t]+		{ yymore(); }

<s1>{ID}/\"		{ BEGIN(s2); 
			  yymore();
			  return ID;
			}
	
<s2>\"			{ BEGIN(0); }				

\"			{ BEGIN(s1); }

{ID}			{ return ID; }

"("[ ]*{XYCOORD}","	{ yytext[0]=' ';
                          return COORD; }

[ ]*{XYCOORD}","	{ return COORD; }

[ ]*{ZCOORD}")"		{ return COORD; }

{XYCOORD}		{ return COORD; }

[ \t\n]+		/* Erstmal verschlucken */

.			{ printf("Illegal Char: %s\n", yytext); }
%%
main( argc, argv )
int argc;
char **argv;

{
  char a[30], b[30];
  int ax=99, ay=99, az=99, bx, by, bz, dist=99;
  int dx, dy, dz, dd;
  int symbol;
  char buffer[256];
  int i, j, k=0, len;
  int flag=0;
  char *hp;
  
  --argc;  /* skip over program name	*/
  
  yyin = fopen( FILENAME, "r");
  
  if ( argc == 0 )
    {
      fprintf(stderr, "USAGE: %s {<Systemname> | (x,y,z)} [-]<Distance> \n", argv[0]);
      exit(10);
    }
  else if ((argc == 2) && (argv[1][0]!='('))
    {
      strcpy(a,argv[1]);
      dist=atoi(argv[2]);
      flag=1;
    }
  else 
    {
      for (i=1; i<=argc; i++)
	{
	  len=strlen(argv[i]);
	  for (j=0; j<len; j++)
	    buffer[k++]=argv[i][j];
	  buffer[k++]=' ';
	}
      buffer[k++]='\0';
      if (hp=strtok(buffer, DELLIST)) {
	ax=atoi(hp);
	if (hp=strtok(NULL, DELLIST)) {
	  ay=atoi(hp);
	  if (hp=strtok(NULL, DELLIST)) {
	    az=atoi(hp);
	    if (hp=strtok(NULL, DELLIST)) {
	      dist=atoi(hp);
	    }
	  }
	}
      	}
      if ((ax==99)||(ay==99)||(az==99)||(dist==99)) {
	fprintf(stderr, "Fehler in Kommandozeile!\n");
	exit(20);
      }
      flag=2;
    }

  if (flag==1) {
    symbol=yylex();  
    while (symbol) {
      if(symbol!=ID)
	error("Systemname erwartet");
      else {
	strcpy(b, (char *)yytext);
	symbol=yylex();
	if(symbol!=COORD)
	  error("X-Koordinate erwartet");
        else {
	  bx=atol((char *)yytext);
	  symbol=yylex();
	  if(symbol!=COORD)
	    error("Y-Koordinate erwartet");
	  else {
            by=atol((char *)yytext);
            symbol=yylex();
            if(symbol!=COORD)
              error("Z-Koordinate erwartet");
            else {
	      bz=atol((char *)yytext);
		      if (strncmp(a, b, strlen(a))==0) {
		ax=bx;
		ay=by;
		az=bz;
		printf ("%s (%3d,%3d,%2d)\n\n", b, ax, ay, az);       
		break;
	      }
	    }
          }
	}
	symbol=yylex();
	if (symbol==COMMENT) symbol=yylex();
      }
    }
    if (ax==99) {
      printf("Stern leider nicht gefunden.\n");
      fclose(yyin);
      exit(10);
    }
    rewind(yyin);
    yyrestart(yyin);
    fclose(yyin);
  }
    
  yyin = fopen( FILENAME, "r");
  symbol=yylex();  

  while (symbol)
    {
      if(symbol!=ID)
	error("Systemname erwartet");
      else
	{
	  strcpy(b, (char *)yytext);
	  symbol=yylex();
	  if(symbol!=COORD)
	    error("X-Koordinate erwartet");
	  else
	    {
	      bx=atol((char *)yytext);
	      symbol=yylex();
	      if(symbol!=COORD)
		error("Y-Koordinate erwartet");
	      else
		{
		  by=atol((char *)yytext);
		  symbol=yylex();
		  if(symbol!=COORD)
		    error("Z-Koordinate erwartet");
		  else
		    {
		      bz=atol((char *)yytext);
		      dx=abs(ax-bx);
		      dy=abs(ay-by);
		      dz=abs(az-bz);
		      if (dx>dy)
			if (dx>dz)
			  dd=dx;
			else
			  dd=dz;
		      else
			if (dy>dz)
			  dd=dy;
			else
			  dd=dz;
		      symbol=yylex();
		      if(symbol==COMMENT)
			{
			  if ((dd<=dist)||(dd==abs(dist))) 
			    printf (dd==0 ? "[1m%-20s (%3d,%3d,%2d) Entfernung %d [0m%s\n" 
				    : "%-20s (%3d,%3d,%2d) Entfernung %d %s\n"
				    , b, bx, by, bz, dd, yytext);
			  symbol=yylex();
			}
		      else
			if ((dd<=dist)||(dd==abs(dist))) 
			  printf (dd==0 ? "[1m%-20s (%3d,%3d,%2d) Entfernung %d [0m\n" 
				  : "%-20s (%3d,%3d,%2d) Entfernung %d\n"
				  , b, bx, by, bz, dd);
		    }
		}
	    }
	}
    }
  fclose(yyin);
  return 0;
}

error(char *text)
{
  puts(text);
  exit(20);
}
@


1.5
log
@Added the [-] Option: if - is added to distance, then only
the Systems at that distance are printed.
@
text
@d1 1
a1 1
/* $Revision: 1.4 $ */
d4 4
d25 1
d87 1
a87 1
  yyin = fopen( "Inputstars", "r");
a169 1
/*
a171 1
*/
d175 1
a175 1
  yyin = fopen( "Inputstars", "r");
d219 1
a219 1
			  if ((dd<=dist)||(dd=abs(dist))) 
d226 1
a226 1
			if ((dd<=dist)||(dd=abs(dist))) 
@


1.4
log
@*** empty log message ***
@
text
@d1 1
a1 1
/* $Revision: 1.3 $ */
d4 3
d86 1
a86 1
      fprintf(stderr, "USAGE: %s [<Systemname> <Distance> | (x, y, z) <Distance>]\n", argv[0]);
d165 1
d168 1
d216 1
a216 1
			  if (dd<=dist) 
d223 1
a223 1
			if (dd<=dist) 
@


1.3
log
@Sectorabfrage eingebaut.
@
text
@d1 1
a1 1
/* $Revision: 1.2 $ */
d4 3
d21 1
a21 1
ID		[a-zA-Z][0-9a-zA-ZäöüÄÖÜß' ]{0,18}
@


1.2
log
@Now with Revision and Log entries
@
text
@d1 1
a1 1
/* $Revision$ */
d3 4
a6 1
/* $Log$ */
d9 2
d14 1
d64 1
a64 1
    {
d66 1
a66 1
  int ax=99, ay=99, az=99, bx, by, bz, dist;
d69 5
a73 1

d75 1
a75 1

d77 1
a77 1

d79 5
a83 7
  {
    printf("Bitte Sternname eingeben: ");
    scanf("%s", a);
    printf("Bitte gewünschte Entfernung eingeben: ");
    scanf("%d", &dist);
  }
  else if (argc == 2)
d87 1
d89 1
a89 1
    else
d91 25
a115 2
      fprintf(stderr, "USAGE: %s [<Systemname> <Distance>]\n", argv[0]);
      exit(10);
d118 30
a147 34
  symbol=yylex();  
  while (symbol)
  {
    if(symbol!=ID)
      error("Systemname erwartet");
    else
    {
      strcpy(b, yytext);
      symbol=yylex();
      if(symbol!=COORD)
        error("X-Koordinate erwartet");
      else
      {
        bx=atol((char *)yytext);
        symbol=yylex();
        if(symbol!=COORD)
          error("Y-Koordinate erwartet");
        else
        {
          by=atol((char *)yytext);
          symbol=yylex();
          if(symbol!=COORD)
            error("Z-Koordinate erwartet");
          else
          {
            bz=atol((char *)yytext);
            if (strncmp(a, b, strlen(a))==0) 
            {
              ax=bx;
              ay=by;
              az=bz;
              printf ("%s (%3d,%3d,%2d)\n\n", b, ax, ay, az);       
              break;
            }
d149 3
a151 1
        }
d154 7
a160 6
    symbol=yylex();
    if (symbol==COMMENT) symbol=yylex();
  }
  if (ax==99) 
  {
    printf("Stern leider nicht gefunden.\n");
a161 1
    exit(10);
d163 3
a166 3
  rewind(yyin);
  yyrestart(yyin);
  symbol=yylex();  
a167 4
  {
    if(symbol!=ID)
      error("Systemname erwartet");
    else
d169 2
a170 4
      strcpy(b, yytext);
      symbol=yylex();
      if(symbol!=COORD)
        error("X-Koordinate erwartet");
d172 51
a222 44
      {
        bx=atol((char *)yytext);
        symbol=yylex();
        if(symbol!=COORD)
          error("Y-Koordinate erwartet");
        else
        {
          by=atol((char *)yytext);
          symbol=yylex();
          if(symbol!=COORD)
            error("Z-Koordinate erwartet");
          else
          {
            bz=atol((char *)yytext);
            dx=abs(ax-bx);
            dy=abs(ay-by);
            dz=abs(az-bz);
            if (dx>dy)
              if (dx>dz)
                dd=dx;
              else
                dd=dz;
            else
              if (dy>dz)
                dd=dy;
              else
                dd=dz;
            symbol=yylex();
            if(symbol==COMMENT)
            {
              if (dd<=dist) 
                printf (dd==0 ? "[1m%-20s (%3d,%3d,%2d) Entfernung %d [0m%s\n" 
                              : "%-20s (%3d,%3d,%2d) Entfernung %d %s\n"
                              , b, bx, by, bz, dd, yytext);
              symbol=yylex();
            }
            else
              if (dd<=dist) 
                printf (dd==0 ? "[1m%-20s (%3d,%3d,%2d) Entfernung %d [0m\n" 
                              : "%-20s (%3d,%3d,%2d) Entfernung %d\n"
                              , b, bx, by, bz, dd);
          }
        }
      }
a223 1
  }
@


1.1
log
@Initial revision
@
text
@d1 4
@
