From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,3b63d50b1c97734d X-Google-Attributes: gid103376,public From: stt@copperfield.camb.inmet.com (Tucker Taft) Subject: Re: Is there an ada specific version of ctags? Date: 1996/09/13 Message-ID: X-Deja-AN: 180378362 sender: news@inmet.camb.inmet.com (USENET news) x-nntp-posting-host: copperfield.camb.inmet.com references: <5194r7$h1c@michp1.redstone.army.mil> organization: Intermetrics, Inc. newsgroups: comp.lang.ada Date: 1996-09-13T00:00:00+00:00 List-Id: Joel Sherrill (joel@redstone.army.mil) wrote: : I am looking for a program like ctags which is for Ada. I checked : the faq and the home of the brave but came up empty handed. I have included a very simple one below. Note that it produces a "vi" tags file, not one for emacs, and consists of a cshell script and two awk programs, and uses "sed" as well. The same logic could be translated to any number of other scripting languages, or written in Ada itself. A few comments wouldn't hurt either ;-). It might be nice to see these migrate to one of the web-sites (which would be fine with me -- this is definitely freeware). : | Joel Sherrill | Sr. Computer Scientist | : | joel@merlin.gcs.redstone.army.mil | On-Line Applications Research | : | Ask me about RTEMS: a free real-time | Huntsville AL 35805 | : | multiprocessor executive! | (205) 883-0131 | -Tucker Taft stt@inmet.com http://www.inmet.com/~stt/ Intermetrics, Inc. Cambridge, MA USA --------------- adatags -------------- #!/bin/csh -f set args = () foreach a ($*) switch ($a) case "-a": set appflg breaksw case "-x": set indexflg breaksw case "-u": set updateflg breaksw case "-*": echo "$a : Unrecognized switch" set args = () break default: set args = ($args $a) breaksw endsw end set mypath = $0 set myname = $mypath:t set mydir = $mypath:h if ($mydir == $mypath) set mydir = "." if ($#args == 0) then echo "Usage: $myname [ -a -x -u ] file ..." exit -1 endif if ($?indexflg) then awk -f $mydir/adatags.inx $args | sort exit 0 endif if ($?updateflg) then echo >> tags set sedargs = "" foreach a ($args) set sedargs = ($sedargs:q -e "/ $a ?/d") end sed $sedargs:q tags > tags.$$ mv tags.$$ tags set appflg endif if ($?appflg) then awk -f $mydir/adatags.awk $args | sort tags - > tags.$$ mv tags.$$ tags else awk -f $mydir/adatags.awk $args | sort > tags endif ------------- adatags.awk ---------------- BEGIN { low["A"] = "a" low["B"] = "b" low["C"] = "c" low["D"] = "d" low["E"] = "e" low["F"] = "f" low["G"] = "g" low["H"] = "h" low["I"] = "i" low["J"] = "j" low["K"] = "k" low["L"] = "l" low["M"] = "m" low["N"] = "n" low["O"] = "o" low["P"] = "p" low["Q"] = "q" low["R"] = "r" low["S"] = "s" low["T"] = "t" low["U"] = "u" low["V"] = "v" low["W"] = "w" low["X"] = "x" low["Y"] = "y" low["Z"] = "z" } /^[ ]*([Pp]rocedure|[Ff]unction|[Tt]ask|[Pp]rotected|[Pp]ackage|[Tt]ype|[Ss]ub[Tt]ype)/ { if ($2 ~ /[Tt]ype/ || $2 ~ /[Bb]ody/) { id = $3 } else { id = $2 } split(id, idar, "("); id = idar[1]; split(id, idar, ";"); id = idar[1]; if (id ~ /^["A-Za-z]/ && $0 !~ /is separate/) { if (length($0) < 50) lin = $0 "$"; else lin = substr($0, 1, 50); if (lin ~ /[?*.\\+^]/) { newlin = ""; ln = length(lin); for (i = 1; i <= ln; i++) { j = substr(lin, i, 1); if (j ~ /[?*.\\+^]/) newlin = newlin "\\" j; else newlin = newlin j; } lin = newlin; } if (id ~ /[A-Z]/) { newid = ""; ln = length(id); for (i = 1; i <= ln; i++) { j = substr(id,i,1); if (j ~ /[A-Z]/) newid = newid low[j]; else newid = newid j; } printf("%s %s ?^%s?\n", newid, FILENAME, lin); } printf("%s %s ?^%s?\n", id, FILENAME, lin); } } --------------- adatags.inx --------------- { if (FILENAME != savedfn) { base = NR-1 savedfn = FILENAME } } /^[ ]*([Pp]rocedure|[Ff]unction|[Tt]ask|[Pp]rotected|[Pp]ackage|[Tt]ype|[Ss]ub[Tt]ype)/ { if ($2 ~ /[Tt]ype/ || $2 ~ /[Bb]ody/) { id = $3 } else { id = $2 } split(id, idar, "("); id = idar[1]; if (id ~ /[A-Za-z].*/) { x = $1" "$2 front = sprintf("%-15s %4d %-16s", id, NR-base, FILENAME); max = 78 - length(front); for (i = 3; i <= NF; i++) { y = x" "$i if (length(y) > max) break; x = y } print front, x; } }