
RM=/bin/rm
AWK=awk
CC="gcc -traditional"


LOCAL_CFLAGS="$CFLAGS -g"
LOCAL_CPPFLAGS="$CPPFLAGS -I$ALLIANCE_INCLUDE -I/usr/include"
LOCAL_LDFLAGS="-L$ALLIANCE_LIB"
LOCAL_LIB="-lPgn101 -lPpt104 -lPat104 -lPhl104 -lMut315"

LOCAL_CFILE=/tmp/GNP`date +%d%H%M%S`.c
LOCAL_TMPFILE=/tmp/GNP`date +%H%S%M`
LOCAL_RES=$1
LOCAL_FLAG="KEEP"

echo  "" 
echo  ""
echo  ""
echo  "      @@@     @@@@@   @   @    @@@@      @    @@@@@    "
echo  "     @   @    @       @@  @    @   @    @ @     @      "
echo  "     @        @       @ @ @    @   @   @   @    @      "
echo  "     @  @@    @@@@@   @ @ @    @@@@    @@@@@    @      "
echo  "     @   @    @       @  @@    @       @   @    @      "
echo  "      @@@     @@@@@   @   @    @       @   @    @ (c)  "
echo  "                                                     "
echo  "   (GEN)eneration (P)rocedurale de p(AT)terns de test"
echo  ""
echo  ""
echo  "       ALLIANCE VLSI CAD --------- RELEASE 2.30      "
echo  "   (c) copyright 1993 Laboratory UPMC/MASI/CAO-VLSI  "
echo  "                  all rights reserved                "
echo  "             e-mail : cao-vlsi@masi.ibp.fr           "
echo  ""
echo  ""
echo  ""

if test \( $# = 0 \)
then
  echo "usage : genpat [-h] [-o] [file]"
  exit
fi

if test \( $1 = "-h" \)
then
  man genpat
  exit
fi

if test \( $1 = "-o" \)
then
  if test \( $# = 1 \)
  then
    echo "genpat : missing filename ........................"
    exit
  fi

  echo "genpat : converting old to new version ............."
  LOCAL_RES=$2
  LOCAL_FLAG="REJECT"

  $AWK \
"BEGIN { RS = \";\" ;\
         print(\"#include <genpat.h>\\n\");\
         OFS = \"\";\
	 ORS = \"\";\
         ofs =\"\"; \
         FS = \",\";\
       }\
{\
 if( NR != 1 )\
  printf(\"%s\",ofs);\
 if( (i = index (\$0, \"ACTION\")) != 0 )\
 {\
	printf( substr(\$0,1,i-1) );\
	printf( \"SAVE()\");\
 	ofs = \"\";\
  }\
  else if( (i = index (\$0, \"COMMENT\")) != 0 )\
      {\
	printf( substr(\$0,1,i-1) );\
	printf ( \"/*\" );\
	printf( \"%s;\",substr(\$0,i) );\
	print ( \"*/\" );\
 	ofs = \"\";\
      }\
      else if( (i = index (\$0, \"PORT\")) != 0)\
           {\
	    printf( substr(\$0,1,i-1) );\
	    printf( \"M_DECLAR\" );\
	    print( substr(\$0,i+4));\
	    ofs =\";\"\
           }\
           else if( ((i = index (\$0, \"REGISTER\")) != 0 ) || \
		    ((j = index (\$0, \"SIGNAL\")) != 0 ) )\
                {\
		 if((index (\$(NF-1),\"TO\")     != 0) || \
		    (index (\$(NF-1),\"to\")     != 0) || \
		    (index (\$(NF-1),\"DOWNTO\") != 0) || \
		    (index (\$(NF-1),\"downto\") != 0) || \
		    (\$(NF-1) !~ /[a-z|A-Z]+/ )) \
		 {\
			if(j == 0 )\
				printf(substr(\$0,1,i-1) );\
			else\
				printf(substr(\$0,1,j-1) );\
			printf( \"M_DECLAR\" );\
		  	p = 1;\
			while((\$p !~ /REGISTER/)  && \
			      (\$p !~ /SIGNAL/) )\
			   p++;\
			if(j == 0)\
			  printf(\"%s,\",substr(\$p,index(\$p,\"REGISTER\")+8));\
			else\
			  printf(\"%s,\",substr(\$p,index(\$p,\"SIGNAL\")+6));\
			p++;\
		  	while(p <= (NF-2)) \
		  	{\
		     	printf(\"%s,\",\$p);\
		     	++p;\
	          	}\
		  	if(j == 0 )\
				printf (\"REGISTER,\");\
			else\
				printf (\"SIGNAL,\");\
		  	printf(\"%s,%s\",\$(NF-1),\$NF);\
			osf = \";\"\
		 }\
		 else\
		 {\
			if(j == 0 )\
				printf(substr(\$0,1,i-1) );\
			else    \
				printf(substr(\$0,1,j-1) );\
			printf( \"M_DECLAR\" );\
		 	p = 1;\
			while((\$p !~ /REGISTER/)  && \
			      (\$p !~ /SIGNAL/) )\
			p++;\
			if(j == 0)\
			  printf(\"%s,\",substr(\$p,index(\$p,\"REGISTER\")+8));\
			else\
			  printf(\"%s,\",substr(\$p,index(\$p,\"SIGNAL\")+6));\
			p++;\
			while(p <= (NF-1))\
			{\
			printf(\"%s,\",\$p);\
			++p;\
			}\
			if(j == 0 )\
				printf (\"REGISTER,\");\
			else\
				printf (\"SIGNAL,\");\
			printf(\"%s\",\$NF);\
			ofs = \";\";\
		 }\
	       }\
	       else\
	       {\
		printf (\"%s\",\$0);\
		ofs = \";\";\
	       }\
}" $LOCAL_RES.c > $LOCAL_TMPFILE.c
else
LOCAL_TMPFILE=$1
fi

if test \( -f $LOCAL_TMPFILE.c \)
then

  echo "genpat : preparing ................................"

  $AWK \
  "BEGIN { line = 1; } \
  { \
  if ((index (\$0, \"DEF_GENPAT\") != 0) || (index (\$0, \"DECLAR\"    ) != 0) || \
      (index (\$0, \"ARRAY\"     ) != 0) || (index (\$0, \"AFFECT\"    ) != 0) || \
      (index (\$0, \"INIT\"      ) != 0) || (index (\$0, \"ACTION\"    ) != 0) || \
      (index (\$0, \"LABEL\"      ) != 0) || (index (\$0, \"GETCPAT\"    ) != 0) || \
      (index (\$0, \"CONV\"      ) != 0) || (index (\$0, \"SAV_GENPAT\") != 0)) \
    { \
    printf (\"GNP_LINE = %d; \", line); \
    } \
  print (\$0); \
  line++; \
  }" $LOCAL_TMPFILE.c > $LOCAL_CFILE


  echo "genpat : compiling ................................"


  $CC $LOCAL_CFLAGS $LOCAL_CPPFLAGS -o $LOCAL_RES $LOCAL_CFILE $LOCAL_LDFLAGS $LOCAL_LIB


  if test \( $LOCAL_FLAG = "REJECT" \)
  then
    $RM -f $LOCAL_TMPFILE.c
  fi
   
  $RM -f $LOCAL_CFILE

  if test \( -f $LOCAL_RES \)
  then
      echo "genpat : generating patterns ......................"
      $LOCAL_RES

      $RM -f $LOCAL_RES

  else
      echo  "genpat : no output file generated "
  fi

else
  echo "genpat : '$LOCAL_TMPFILE.c' no such file or directory"
fi

