#Saluton Emacson! Bonvolu elekti -*- mode: awk; -*-. Dankon.

BEGIN{
  headerfile="wrapped.h"
  deffile="wrapdef.h";
  structfile="wrapstruct.h";
  tmpffile="wraptmpf.h"
  FS=" *; *";
  WARNING="/* Automatically generated file. Do not edit. Edit wrapawk/wrapfunc.inp. */"
  print WARNING > headerfile
  print "#ifndef WRAPPED_H" > headerfile;
  print "#define WRAPPED_H" > headerfile;
  print WARNING > deffile
  print "#ifndef WRAPDEF_H" > deffile;
  print "#define WRAPDEF_H" > deffile;
  print WARNING > tmpffile
  print "#ifndef WRAPTMPF_H" > tmpffile;
  print "#define WRAPTMPF_H" > tmpffile;
  print WARNING > structfile
  print "#ifndef WRAPSTRUCT_H" > structfile;
  print "#define WRAPSTRUCT_H" > structfile;
  print "struct next_wrap_st next_wrap[]= {" > structfile;
}

END{
  print "  {NULL, NULL}," > structfile;
  print "};"              > structfile;
  print "#endif"          > structfile;
  print "#endif"          > tmpffile;
  print "#endif"          > deffile;
  print "#endif"          > headerfile;
}
/\/\*/{
}
/^(\#)/{
  print $0 > structfile;
  print $0 > tmpffile;
  print $0 > deffile;
  print $0 > headerfile;

}
/;.*;.*;/{
  name=$1;
  ret=$2;
  argtype=$3;
  argname=$4;

  print "  {(void(*))&next_" name ", \"" name "\"},"  > structfile;
  print "extern " ret " (*next_" name ")" argtype ";" > headerfile;
  print ret " (*next_" name ")" argtype "=tmp_" name ";"> deffile;

  print ret " tmp_" name  argtype "{"                 > tmpffile;
  print "  load_library_symbols();"                   > tmpffile;
  print "  return  next_" name  argname ";"           > tmpffile;
  print "}"                                           > tmpffile;
  print ""                                            > tmpffile;
}

/^ *$/{
  print > structfile;
  print > headerfile;
  print > deffile;  
  print > tmpffile;
}





