From f4092abdf94af6a99aff944d6264bc1284e8bdd4 Mon Sep 17 00:00:00 2001 From: Reinhard Tartler Date: Mon, 10 Oct 2011 17:43:39 +0200 Subject: Imported nx-X11-3.1.0-1.tar.gz Summary: Imported nx-X11-3.1.0-1.tar.gz Keywords: Imported nx-X11-3.1.0-1.tar.gz into Git repository --- .../ogl-sample/main/doc/man/macros/mkhead.awk | 290 +++++++++++++++++++++ 1 file changed, 290 insertions(+) create mode 100644 nx-X11/extras/ogl-sample/main/doc/man/macros/mkhead.awk (limited to 'nx-X11/extras/ogl-sample/main/doc/man/macros/mkhead.awk') diff --git a/nx-X11/extras/ogl-sample/main/doc/man/macros/mkhead.awk b/nx-X11/extras/ogl-sample/main/doc/man/macros/mkhead.awk new file mode 100644 index 000000000..07f6ce39b --- /dev/null +++ b/nx-X11/extras/ogl-sample/main/doc/man/macros/mkhead.awk @@ -0,0 +1,290 @@ +# basename is set on the command line +# The regexp below is replaced by an expression to do case insensitive +# searching on the name of a GL function before running this program. +# +# Runs on 'gl.h' ('glu.h', 'glx.h') and locates the lines for the specified +# GL (glu, glx) function, then generates M4 definitions for man page +# +BEGIN { + found = 0 + numargs = 0 + newargs[0] = "" + stderr = "cat 1>&2" + vee = 0 + getnames(basename) + + for (j=0; j@)dnl\n" + + printf "_define(_header,@@)dnl\n" + + printf "_define(_names,@@,.SH C SPECIFICATION\n)" + printf "_ifelse(" + for (i=0; i@,@<%s>@,dnl\n",i,head[i] + } + printf "ERROR)dnl\n" + printf "_define(@<_namenum>@,_incr(_namenum))>@)dnl\n" + +# if (found > 1) +# { +# printf "_samething()\n" +# } + maxArgs = 0 + for (i=0; i@,_ifelse($#,0,_namenum,$1))dnl\n" + printf "_ifelse(" + for (i=0; i@,\\f2%s\\fP,dnl\n",i+1,args[j,i] + if (length(args[j,i]) > length(long)) + long = args[j,i] + } + printf "???)>@)dnl\n" + } +# next loop same as above, except does not italicize +# resulting definitions can be used in equations + for (j=1; j<=maxArgs; j++) + { + printf "_define(_eqnparam%d,@<",j + printf "_define(@<_tmpnum>@,_ifelse($#,0,_namenum,$1))dnl\n" + printf "_ifelse(" + for (i=0; i@,\"%s\",dnl\n",i+1,args[j,i] + if (length(args[j,i]) > length(long)) + long = args[j,i] + } + printf "???)>@)dnl\n" + } +# The following stuff is designed to find the longest argument so that +# the '.TP' indentation can be set in the first instaciation of _phead +# (thus the use of the '_first' macro as a flag). Things are complicated +# by the possibility of multiple arguments in the call to _phead. +# This is what _makelist is for: to turn a space separted multiple +# argument list into a comma separated one (commas can't be used in +# the original list because they have special meaning to m4). +# Unfortunately, this means that (currently) if the longest string is +# a multiple argument, the indentation will only be right if it occurs +# in the first _phead. This is because only the API file is scanned +# for arguments, and not the man page file, so this script can't know +# which instance of phead has the longest (multiple) argument. + + long = "\\fI" long "\\fP" + printf "_define(_phead,@@,@<.TP>@,@<.TP \\w'" + printf "_ifelse(_eval(_len(%s)>_len(_makelist($1))),1,",long + printf "%s,translit(_makelist($1),@<+>@,@<\\>@))\\ \\ 'u dnl\n", long + printf "_define(_first,first)>@)\n" + printf "translit(_makelist($1),@<+>@,@<,>@)>@)dnl\n" + printf "_define(_cmnd,@<\\%%_ifelse($1,@<>@,\\f3" prefix "@<>@_cname\\fP,dnl\n" + printf "\\f3" prefix "$1\\fP)>@)dnl\n" + printf "_define(_glcmnd,@<_ifelse($1,@<>@,\\f3gl@<>@_cname\\fP,dnl\n" + printf "\\f3gl$1\\fP)>@)dnl\n" + printf "_define(_glucmnd,@<_ifelse($1,@<>@,\\f3glu@<>@_cname\\fP,dnl\n" + printf "\\f3glu$1\\fP)>@)dnl\n" + printf "_define(_xcmnd,@<_ifelse($1,@<>@,\\f3X@<>@_cname\\fP,dnl\n" + printf "\\f3X$1\\fP)>@)dnl\n" +# printf "syscmd(@<${maCdIr}/mkname.awk>@ ${maCdIr}/pglspec >_tmpnam)dnl\n" +# printf "_include(_tmpnam)syscmd(rm -f _tmpnam)>@))dnl\n" +} + + + +# +# function to make the troff to typeset the function header +# +function makeHead(fname,type,i) +{ + fname = prefix fname + headString = sprintf("%s \\f3%s\\fP(",type,fname) + if (numargs > 0) + { + headString = headString "\n" + if (numargs > 1) + { + headString = headString sprintf("%s,\n",targs[1,i]) + headString = headString ".nf\n" + headString = headString sprintf(".ta \\w'\\f3%s \\fP%s( 'u\n",type,fname) + for (j=2; j<=numargs-1; j++) + headString = headString sprintf("\t%s,\n",targs[j,i]) + headString = headString sprintf("\t%s )\n",targs[numargs,i]) + headString = headString ".fi\n" + } + else + headString = headString sprintf("%s )\n.nf\n.fi\n",targs[numargs,i]) + } + else + headString = headString " void )\n.nf\n.fi\n" + return headString +} + +# Generates 'args' of untyped argument names +# Also generates 'targs' of typed argument names and 'nargs', the number +# of arguments. + +function addargs(arglist,i) +{ +# +# First strip leading '(' and trailing ')' +# + if (substr(arglist,1,1) == "(") + arglist = substr(arglist,2,length(arglist)) + while (substr(arglist,1,1) == " ") + arglist = substr(arglist,2,length(arglist)) + + if (substr(arglist,length(arglist),1) == ")") + arglist = substr(arglist,1,length(arglist)-1) + while (substr(arglist,length(arglist),1) == " ") + arglist = substr(arglist,1,length(arglist)-1) + + numargs = split(arglist,newargs, ",[ \t]") + if (newargs[1] == "void") + { + numargs = 0; + targs[1,i] = newargs[1]; + args[1,i] = newargs[1]; + } + if (nargs[i] < numargs) + nargs[i] = numargs; + + for (j=1; j<=numargs; j++) + { +# targs[j,i] italicizes the argument but not the type + targs[j,i] = newargs[j] + numWords = split(targs[j,i],words,"[ \t]") + args[j,i] = words[numWords] + targs[j,i] = words[1] + for (k=2; k<=numWords-1; k++) + targs[j,i] = targs[j,i] " " words[k] + targs[j,i] = targs[j,i] " \\fI" words[numWords] "\\fP" + sub(/\[.*\]/,"",args[j,i]) + gsub("[*()]","",args[j,i]) + } +} + +# +# Parse and save away the _names(name,regexp) declarations in the file +# for later use in matching the entries in the API file. +# + +function getnames(file) +{ + numNames = 0 + fname = file ".gl" + while (getline < fname) + { + if (index($0,"_names(") != 0) + { + start = index($0,"_names(") + 7 + stuff = substr($0,start,length($0)-start) + split(stuff,things,",") + names[numNames] = things[1] + regExps[numNames] = things[2] + numNames++ + } + } + close(fname) + if (numNames == 0) + { + names[0] = file + regExps[0] = "[1-9]*u*[lbsifd]*v*" + numNames++ + } +} -- cgit v1.2.3