summaryrefslogtreecommitdiff
path: root/bin/info2src.awk
diff options
context:
space:
mode:
Diffstat (limited to 'bin/info2src.awk')
-rwxr-xr-xbin/info2src.awk630
1 files changed, 630 insertions, 0 deletions
diff --git a/bin/info2src.awk b/bin/info2src.awk
new file mode 100755
index 00000000000..1a8b19ae964
--- /dev/null
+++ b/bin/info2src.awk
@@ -0,0 +1,630 @@
+# =============================================================================
+#
+# = DESCRIPTION
+# Awk script to convert classinfo description file to src stubs.
+#
+# = AUTHOR(S)
+# Graham Dumpleton
+# K. Dorn
+#
+# = COPYRIGHT
+# Copyright 1991 OTC LIMITED
+#
+# =============================================================================
+
+BEGIN {
+# separator = "/* ------------------------------"\
+# "------------------------------------------- */"
+ separator = ""
+ csa_method_trailer=sprintf("\n/*] END Method */\n\n")
+ FS="\n"; RS=""
+ firsttime = "first"
+ templ=""
+ blank=" "
+ classfunc = ""
+ rettyp = ""
+ classname=""
+ classtitle=""
+ filedate=""
+ filename=""
+ filename1=""
+ author=""
+ classdescription=""
+ methoddescription=""
+
+# csaprintheader=1
+
+# accpubl = "off"
+# accprot = "off"
+# accpriv = "off"
+}
+#
+# variable von awk sind nicht in begin zuweisbar!
+#
+{
+ accmergecxxhxx = merge
+ accloop = loop
+ accpubl = publ
+ accprot = prot
+ accpriv = priv
+#printf("\nmerge=%s loop=%s csaprintheader=%s firsttime=%s\n",merge,loop,csaprintheader,firsttime);
+}
+
+function csa_print_compilation_header_alt()
+{
+ if ( length( firsttime ) > 3 )
+ {
+
+ csa_compilation_header=sprintf("\n/*[ Compilation unit "\
+ "----------------------------------------------------------\n"\
+ "\n"\
+ " Component : CSA - OSC\n"\
+ "\n"\
+ " Name : %s.[Ci]\n"\
+ "\n"\
+ " Author : %s\n"\
+ "\n"\
+ " Language : C++\n"\
+ "\n"\
+ " Creation Date : %s\n"\
+ "\n"\
+ " Test State : %%Q%%\n"\
+ "\n"\
+ " Description : %s\n"\
+ "\n"\
+ "\n"\
+ " Copyright (C) Siemens AG 1995 All Rights Reserved\n"\
+ "\n"\
+ "--------------------------------------"\
+ "---------------------------------------*/\n"\
+ "/*] END */\n"\
+ "#pragma ident \"%%Z%% %%M%% %%I%% (%%G%%), %%Y%% %%Q%%:"\
+ " implementation file for class \n"\
+ "%s\"\n"\
+ "\n"\
+ "#undef __STDC__\n"\
+ "#undef __GNUG__\n"\
+ "\n",filename1,author,filedate,classdescription,names[$2]);
+ printf("%s",csa_compilation_header);
+ firsttime = ""
+ }
+}
+
+function csa_print_compilation_header()
+{
+ if ((csaprintheader == "on" && merge != "on") || (merge == "on" && loop == "1"))
+ {
+ if ( length( firsttime ) > 3 )
+ {
+ FS=" "; RS="\n"
+ read_fvmecxx_file()
+ read_fvcocxx_file()
+ FS="\n"; RS=""
+
+ #csa_compilation_header=sprintf(vcocxx,filename1,author,filedate,classdescription,names[$2]);
+csa_compilation_header=sprintf(vcocxx,filename1,author,filedate,classdescription,classname);
+ printf("%s",csa_compilation_header);
+ firsttime = ""
+ }
+ }
+ else if (csaprintheader == "on" && merge == "on" && loop != "1" && length( firsttime ) > 3)
+ {
+ FS=" "; RS="\n"
+ read_fvmecxx_file()
+ read_fvcocxx_file()
+ FS="\n"; RS=""
+ firsttime = ""
+ }
+}
+
+function csa_print_method_header_alt()
+{
+ prrettyp = ""
+ if (rettyp != "")
+ prrettyp=sprintf("type = %s",rettyp);
+ else
+ prrettyp=sprintf("-");
+
+ csa_method_header=sprintf("\n/*[ Method ---------------------"\
+ "-------------------------------------------\n"\
+ "\n"\
+ " Name : %s\n"\
+ "\n"\
+ " Description : %s\n"\
+ "\n"\
+ " Return : %s\n"\
+ "\n"\
+ "--------------------------------------------"\
+ "------------------------------*/\n\n",classfunc,methoddescription,prrettyp)
+ printf("%s",csa_method_header);
+}
+
+function csa_print_method_header()
+{
+ if (csaprintheader == "on")
+ {
+ prrettyp = ""
+ if (rettyp != "")
+ prrettyp=sprintf("type = %s",rettyp);
+ else
+ prrettyp=sprintf("-");
+
+ csa_method_header=sprintf(vmecxx,classfunc,methoddescription,prrettyp)
+ printf("%s",csa_method_header);
+ }
+}
+
+function csa_print_method_trailer()
+{
+ if (csaprintheader == "on")
+ {
+ csa_method_trailer=sprintf("/*] END Method */\n")
+ printf("\n%s\n",csa_method_trailer);
+ }
+}
+
+function csa_get_method_description()
+{
+ n = split( $0, line, "\n" )
+ methoddescription=""
+ for ( i=5; i<=n; i++ )
+ {
+ len = length(line[i])
+ comm = substr(line[i],4,len)
+ methoddescription = methoddescription comm "\n "
+ }
+}
+
+
+function read_fvmecxx_file()
+{
+ vmecxx1 = "\n"
+ while ( getline < fvmecxx > 0 )
+ vmecxx1 = vmecxx1 $0 "\n"
+ vmecxx = vmecxx1
+}
+
+function read_fvcocxx_file()
+{
+ vcocxx1 = "\n"
+ while ( getline < fvcocxx > 0 )
+ vcocxx1 = vcocxx1 $0 "\n"
+ vcocxx = vcocxx1
+}
+
+
+#
+# hier laueft er durch mit allen zeilen
+#
+
+$1 ~ /CLASS2INFO/ {
+ filedate=$2
+ filename=$3
+ len=length($3)
+ filename1=substr($3,1,(len-2))
+}
+
+$1 ~ /INFO/ && $2 ~ /GLOBAL/ && $3 ~ /LIBRARY/ {
+ library=$4
+ len=length(library)
+ library=substr(library,4,len)
+ if ( merge != "on")
+ printf( "#include <%s/%s>\n", library, filename )
+ else
+ if ( loop == "1")
+ printf( "#include <%s/%s>\n", library, filename )
+}
+
+$1 ~ /INFO/ && $2 ~ /GLOBAL/ && $3 ~ /AUTHOR/ {
+ l=length($4)
+ author=substr($4,4,l)
+}
+
+$1 ~ /INFO/ && $2 ~ /HDR/ && $3 ~ /TITLE/ {
+ classname=$4
+ classtitle=$5
+}
+
+$1 ~ /INFO/ && $2 ~ /HDR/ && $3 ~ /DESCRIPTION/ {
+ n = split( $0, line, "\n" )
+ classdescription=""
+ for ( i=5; i<=n; i++ )
+ {
+ len = length(line[i])
+ comm = substr(line[i],4,len)
+ classdescription = classdescription comm "\n "
+ }
+# if (csaprintheader == "on")
+# csa_print_compilation_header()
+}
+
+$1 ~ /INCLUDE/ {
+ if ( merge != "on")
+ printf( "#include %s\n", $2)
+# else
+# if ( loop == "1")
+# printf( "#include %s\n", $2)
+}
+
+#
+# neu mit nested classes
+#
+$1 ~ /(CLASS|STRUCT|UNION)/ {
+ nestedclass = ""
+ nested = ""
+ templnested = ""
+ containerclass = ""
+ if ( $2 ~ "(::|<)" )
+ {
+ len = length($2)
+ match( $2, "(::|<).*$")
+ newclass = substr( $2,RSTART+2,RLENGTH)
+ thisclass = substr( $2,1,RSTART-1)
+ if (thisclass == classext)
+ {
+ nestedclass = newclass
+ nested = "on"
+ containerclass = thisclass
+ class = newclass $3 # 23.10.95
+ }
+ else
+ nestedclass = ""
+ }
+ else
+ {
+ names[$2] = $2
+ }
+}
+
+#
+# neu mit nested classes
+#
+$1 ~ /TEMPLATE/ {
+ templnestedclass = ""
+ nested = ""
+ templnested = ""
+ if ( $2 ~ /(class|union|struct)/ && $3 ~ "(::|<)" )
+ {
+ len = length($3)
+ match( $3, "(::|<).*$")
+ templnewclass = substr( $3,RSTART+2,RLENGTH)
+ templthisclass = substr( $3,1,RSTART-1)
+ if (templthisclass == classext)
+ {
+ templnestedclass = templnewclass
+ nestedtempl = $4
+#printf("\n------nestedtempl=%s----\n",nestedtempl);
+ class = templnewclass $4
+ nestedtemplclass = templnewclass $4
+ nested = "on"
+ templnested = "on"
+ containerclass = templthisclass
+ }
+ else
+ templnestedclass = ""
+ }
+ else
+ {
+ class = $3 $4
+ templclass = $3 $4
+ args[$3] = $4
+ templ=$4
+ # This needs extra work.
+ #
+ # macht aus: <class hans,class otto> folgendes:
+ # <hans,otto>
+
+ sub( "<[\t ]*(class)[\t ]+", "<", class )
+ sub( ",[\t ]*(class)[\t ]+", ",", class )
+
+ names[$3] = class
+ }
+}
+
+#
+# neu nested classes, achtung: nur level1 moeglich, da keine rekursion!
+#
+$1 ~ /END/ && $2 == class{
+ nested= ""
+ templnested= ""
+}
+
+#
+# alt ohne nested classes
+#
+#$1 ~ /(CLASS|STRUCT|UNION)/ {
+# names[$2] = $2
+#}
+
+#
+# alt ohne nested classes
+#
+#$1 ~ /TEMPLATE/ {
+# class = $3 $4
+# templclass = $3 $4
+# args[$3] = $4
+# templ=$4
+# # This needs extra work.
+#
+# macht aus: <class hans,class otto> folgendes:
+# <hans,otto>
+#
+# sub( "<[\t ]*(class)[\t ]+", "<", class )
+# sub( ",[\t ]*(class)[\t ]+", ",", class )
+
+# names[$3] = class
+#}
+
+
+$1 ~ /FUNC/ {
+ prototype = $4
+ class = $2
+ hiding = $3
+ if ( (((hiding == "private") && (accpriv == "on") ) || ((hiding == "public") && (accpubl == "on") ) || ((hiding == "protected") && (accprot == "on") )) && ((mode != "single") || ((mode == "single") && ((classext == class) || (class == nestedclass) || (class == templnestedclass))) ))
+ {
+# printf("\nclassext=%s\n",classext);
+# printf("\nclass =%s\n",class);
+# printf("\nhiding=%s\n",hiding);
+ csa_print_compilation_header()
+ # Filter out inline functions.
+ flinline=0
+ if ( prototype ~ /^[\t ]*inline[\t ]+/ )
+ {
+ flinline=1
+#printf("\n######inline####\n");
+# next
+ sub( "^[\t ]*inline[\t ]+", "", prototype )
+ }
+ # Filter out pure virtual functions: wenn prototype "= 0 ;" enthaelt!
+ flpurevirt=0
+ if ( prototype ~ /[\t ]*=[\t ]*0[\t ]*;[\t ]*$/ )
+ {
+ flpurevirt=1
+ next
+ }
+ # Strip out unwanted bits "static oder virtual".
+ flstatic=0
+ if ( prototype ~ /^[\t ]*static[\t ]+/ )
+ {
+ flstatic=1
+ }
+ flvirtual=0
+ if ( prototype ~ /^[\t ]*virtual[\t ]+/ )
+ {
+ flvirtual=1
+ }
+ sub( "^[\t ]*(static|virtual)[\t ]+", "", prototype )
+# suchstring ersetzen src/zielstring
+ # Strip out unwanted bits ";
+ # blank und tab" am ende der methode.
+ sub( ";[\t ]*$", "", prototype )
+ # Strip out unwanted bits : 1. default werte der methode aus class def und comma.
+# gsub( "[\t ]*\\(=[^(=][^,=]*,", ",", prototype )
+# gsub( "[\t ]*\\(=[^(=][^,=]*\\)", ")", prototype )
+
+#neu
+ if ( prototype !~ /[\t \&\*]*operator[^a-zA-Z0-9]+/ )
+ {
+#neu
+ # Strip out unwanted bits : 1. default werte der methode aus class def und comma, aber nicht bei
+ # operator funs , wegen deren "=" !
+ gsub( "[\t ]*=[^(=][^,=]*,", ",", prototype )
+ gsub( "[\t ]*=[^(=][^,=]*\\)", ")", prototype )
+#neu
+ }
+#neu
+
+#printf("\nprototype=|%s|\n",prototype);
+
+ # Put in class name.
+ floperator=0
+ if ( prototype ~ /[\t \&\*]*operator[^a-zA-Z0-9]+/ )
+ {
+ #
+ # operator funcs
+ #
+ floperator=1
+#printf("\noperatorfunc|%s|\n",prototype);
+ match( prototype, "[^\t \&\*]*operator" )
+ typoper = substr( prototype, 1,RSTART-1)
+#printf("\ntypoper=|%s|\n",typoper);
+ wholelen=length(prototype)
+ restoper = substr( prototype, RSTART, wholelen)
+#printf("\nrestoper=|%s|\n",restoper);
+ len=length(restoper)
+ restoper1 = substr( restoper, 9, len )
+ match( restoper1, "[^\t ].*$" ) # trimstring fuer anf des feldes
+ restoper2 = substr( restoper1, RSTART, RLENGTH )
+#printf("\nrestoper2=|%s|\n",restoper2);
+ len=length(restoper2) # pvar++
+ restoper3 = substr( restoper2,2, len )
+#printf("\nrestoper3=|%s|\n",restoper3);
+ match( restoper3, "\\(.*$" ) # gebe naechsten string der
+ # mit ( anfaengt bis zum ende
+ decl = substr( restoper3, RSTART, RLENGTH )
+#printf("\nparas=|%s| s=%d l=%d\n",decl,RSTART,RLENGTH);
+ parstart=index(restoper,decl)
+ restoperfun=substr(restoper,1,parstart-1)
+#printf("\nrestoperfun=|%s|\n",restoperfun);
+
+#neu
+ # Strip out unwanted bits : 1. default werte der methode aus class def und comma.
+ gsub( "[\t ]*=[^(=][^,=]*,", ",", decl )
+ gsub( "[\t ]*=[^(=][^,=]*\\)", ")", decl )
+ restoper=restoperfun decl
+#printf("\nneu restoper=|%s|\n",restoper);
+#neu
+
+
+if (nested == "on" )
+ prototype=typoper containerclass "::" class "::" restoper
+else
+ prototype=typoper class "::" restoper
+#printf("\nprototype=|%s|\n",prototype);
+
+if (nested == "on" )
+ classfunc = containerclass "::" class "::" restoperfun
+else
+ classfunc = class "::" restoperfun
+#printf("\nclassfunc=|%s|\n",classfunc);
+ rettyp = typoper
+#printf("\nrettyp=|%s|\n",rettyp);
+ funcname = classfunc
+#printf("\n7|%s|\n",funcname);
+ }
+ else
+ {
+ #
+ # other functions
+ #
+ match( prototype, "[^\t ]*\\(.*$" )
+ decl = substr( prototype, RSTART, RLENGTH )
+
+#-----neu start, damit 0-n blanks zwischen "func-name" und "(" stehen koennen!
+ match( decl, "\\(.*$" )
+ decl = substr( decl, RSTART, RLENGTH )
+ parstart=index(prototype,decl)
+ typfuncn=substr(prototype,1,parstart-1)
+ sub( "[\t ]*$", "", typfuncn )
+ prototype = ""
+ prototype = typfuncn " " decl
+#printf("\nprototypeneu=|%s|\n",prototype);
+#printf("\ntypfuncnneu=|%s|\n",typfuncn);
+#printf("\ndeclneu=|%s|\n",decl);
+
+
+ match( prototype, "[^\t ]*\\(.*$" )
+ decl = substr( prototype, RSTART, RLENGTH )
+#-----neu end
+
+#printf("\ndecl=|%s|\n",decl);
+ parstart=index(prototype,decl)
+ typfuncn=substr(prototype,1,parstart-1)
+
+ nitems=split(typfuncn,typfuncitems,"[\t \&\*]")
+ sub( "[\t ]*$", "", typfuncn )
+ funcn = typfuncitems[nitems-1]
+ funstart=index(typfuncn,funcn)
+ typ=substr(typfuncn,1,funstart-1)
+#printf("\ntypfuncn=|%s|\n",typfuncn);
+#printf("\nfuncn=|%s|\n",funcn);
+#printf("\ntyp=|%s|\n",typ);
+if (nested == "on" )
+ sub( "^", typ containerclass "::" class "::" funcn, decl )
+else
+ sub( "^", typ class "::" funcn, decl )
+ prototype=decl
+#printf("\nprototype=|%s|\n",prototype);
+ classfunc = ""
+if (nested == "on" )
+ sub( "^", containerclass "::" class "::" funcn, classfunc )
+else
+ sub( "^", class "::" funcn, classfunc )
+#printf("\nclassfunc=|%s|\n",classfunc);
+ rettyp = ""
+ sub( "^", typ, rettyp )
+#printf("\nrettyp=|%s|\n",rettyp);
+#printf("\n6|%s|\n",prototype);
+ match( prototype, "^[^(]*\\(" )
+ funcname = substr( prototype, RSTART, RLENGTH )
+#printf("\n7|%s|\n",funcname);
+ }
+
+ # Output it.
+
+ if (firsttime == "")
+ {
+ csa_get_method_description()
+# if (csaprintheader == "on")
+ csa_print_method_header()
+
+ if ( length(prototype) > 75 )
+ {
+ match( prototype, "^[^(]*\\(" )
+ funcname = substr( prototype, RSTART, RLENGTH )
+ if ( prototype ~ "^[^(]*\\(\\)[\t ]*\\(" )
+ {
+ funcname = funcname ")("
+ sub( "^[^(]*\\(\\)[\t ]*\\(", "", prototype )
+ }
+ else
+ sub( "^[^(]*\\(", "", prototype )
+
+ if ( templclass ~ "<" && templnested == "" && nested == "")
+ {
+ printf( "template%s\n", templ)
+ }
+ if ( templnested == "on")
+ {
+ printf( "template%s\n", nestedtempl )
+ }
+ printf( "%s\n", funcname )
+
+ match( prototype, "\\)([\t ]*const)?[\t ]*$" )
+ functail = substr( prototype, RSTART, RLENGTH )
+ sub( "\\)([\t ]* const)?[\t ]*$", "", prototype )
+ narg = 0
+ while ( match( prototype, "[^<>,#]*<[^<>]*>" ) )
+ {
+ narg++
+ arg = substr( prototype, RSTART, RLENGTH )
+ sub( "[^<>,#]*<[^<>]*>", "#" narg, prototype )
+ fargs["#" narg] = arg
+ # Need the following to stop resubstitution of the pattern matched
+ # back into the string.
+ gsub( "&", "\\\\&", fargs["#" narg] )
+ }
+ numargs = split( prototype, args, "," )
+ for ( m=1; m<=numargs; m++ )
+ {
+ while ( match( args[m], "#[0-9]+" ) )
+ {
+ arg = substr( args[m], RSTART, RLENGTH )
+ sub( arg, fargs[arg], args[m] )
+ }
+ sub( "[\t ]*", "", args[m] )
+ printf( " %s", args[m] )
+ if ( m == numargs )
+ {
+ print( "" )
+ }
+ else
+ print( "," )
+ }
+ if (flinline == 1)
+ printf("/* inline */\n");
+# printf( "%s\n%s{\n}\n\n%s\n", functail,csa_method_trailer, separator )
+ printf( "%s\n", functail)
+# csa_print_method_trailer()
+# printf( "{\n}\n\n%s\n", separator )
+ }
+ else
+ {
+ if (flinline == 1)
+ printf("/* inline */\n");
+
+ if ( templclass ~ "<" && templnested == "" && nested == "")
+ {
+ printf( "template%s\n", templ )
+ }
+ if ( templnested == "on")
+ {
+ printf( "template%s\n", nestedtempl )
+ }
+# printf( "%s\n%s{\n}\n\n%s\n", prototype,csa_method_trailer, separator )
+ printf( "%s\n", prototype)
+# csa_print_method_trailer()
+# printf( "{\n}\n\n%s\n", separator )
+ }
+ csa_print_method_trailer()
+ if (rettyp != "" && rettyp != "void " && rettyp != "void")
+ printf( "{\n\treturn((%s)0);\n}\n\n%s\n",rettyp, separator )
+ else
+ printf( "{\n}\n\n%s\n", separator )
+
+ }
+ # end of firsttime
+ }
+ # end of if
+}
+#end of FUNC