home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #19 / NN_1992_19.iso / spool / gnu / g / help / 1184 < prev    next >
Encoding:
Text File  |  1992-09-03  |  4.9 KB  |  153 lines

  1. Newsgroups: gnu.g++.help
  2. Path: sparky!uunet!stanford.edu!ames!sun-barr!sh.wide!wnoc-tyo-news!nec-tyo!nec-gw!netkeeper!vivaldi!texas!blevy
  3. From: blevy@syl.dl.nec.com (Britt Levy (ESD))
  4. Subject: Re: Demangler available?
  5. Message-ID: <1992Sep3.174535.7590@syl.dl.nec.com>
  6. Keywords: g++ demangler, emacs
  7. Sender: news@syl.dl.nec.com (CCSL News--cjk)
  8. Nntp-Posting-Host: texas.syl.dl.nec.com
  9. Organization: NEC Systems Lab., C&C Software Technology Center (Dallas, TX)
  10. References:  <WARSAW.92Sep1145341@anthem.nlm.nih.gov>
  11. Date: Thu, 3 Sep 1992 17:45:35 GMT
  12. Lines: 139
  13.  
  14. I created a simple interface to cp-dem.c, from the gcc-2.2.2 release,
  15. called g++dem. It reads g++ mangled names from stdin and spits out the demangled
  16. name to stdout. I also created an emacs function which demangles symbols
  17. between point and mark in an emacs buffer and writes the results to a
  18. separate buffer. The two source files g++dem.c and g++dem.el, and a
  19. shell script used to make g++dem are include below in shar format. You can find
  20. cp-dem.c in the gcc source distribution. 
  21.  
  22.  
  23.  
  24. #! /bin/sh
  25. # This is a shell archive, meaning:
  26. # 1. Remove everything above the #! /bin/sh line.
  27. # 2. Save the resulting text in a file.
  28. # 3. Execute the file with /bin/sh (not csh) to create the files:
  29. #    dem.mak
  30. #    g++dem.c
  31. #    g++dem.el
  32. # This archive created: Thu Sep  3 12:41:21 1992
  33. export PATH; PATH=/bin:$PATH
  34. if test -f 'dem.mak'
  35. then
  36.     echo shar: will not over-write existing file "'dem.mak'"
  37. else
  38. cat << \SHAR_EOF > 'dem.mak'
  39. gcc -g -c cp-dem.c -Dxmalloc=malloc -Dxrealloc=realloc
  40. gcc -g g++dem.c cp-dem.o -o g++dem
  41. SHAR_EOF
  42. chmod +x 'dem.mak'
  43. fi # end of overwriting check
  44. if test -f 'g++dem.c'
  45. then
  46.     echo shar: will not over-write existing file "'g++dem.c'"
  47. else
  48. cat << \SHAR_EOF > 'g++dem.c'
  49. /* Trivial interface to cp-dem() demangler for GNU C++ from gcc 2.2.2
  50.    Copyright 1989, 1991 Free Software Foundation, Inc.
  51.    written by Britt Levy (blevy@esd.dl.nec.com)
  52.    
  53.    This program is free software; you can redistribute it and/or modify
  54.    it under the terms of the GNU General Public License as published by
  55.    the Free Software Foundation; either version 2, or (at your option)
  56.    any later version.
  57.  
  58.    This program is distributed in the hope that it will be useful,
  59.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  60.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  61.    GNU General Public License for more details.
  62.  
  63.    You should have received a copy of the GNU General Public License
  64.    along with this program; if not, write to the Free Software
  65.    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  66.  
  67. #include <stdio.h>
  68.  
  69. extern char *cplus_demangle (const char *name, int mode);
  70.  
  71. main()
  72. {
  73.    char inbuf[256];
  74.    while(gets(inbuf) != (char *) 0)
  75.       printf("%s => %s\n",inbuf, cplus_demangle(inbuf,0));
  76.    exit(0);
  77. }
  78. SHAR_EOF
  79. fi # end of overwriting check
  80. if test -f 'g++dem.el'
  81. then
  82.     echo shar: will not over-write existing file "'g++dem.el'"
  83. else
  84. cat << \SHAR_EOF > 'g++dem.el'
  85. ;; g++dem.el - Demangles g++ 2.2.2 symbols in current emacs buffer between
  86. ;; point and mark using an interface to cp-dem(), from gcc 2.2.2, in
  87. ;; an asynchronous subprocess. 
  88.  
  89. ;; Written by Britt Levy (email: blevy@esd.dl.nec.com)
  90.  
  91. ;; This program is free software; you can redistribute it and/or modify
  92. ;; it under the terms of the GNU General Public License as published by
  93. ;; the Free Software Foundation; either version 2, or (at your option)
  94. ;; any later version.
  95. ;;
  96. ;; This program is distributed in the hope that it will be useful,
  97. ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  98. ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  99. ;; GNU General Public License for more details.
  100. ;;
  101. ;; You should have received a copy of the GNU General Public License
  102. ;; along with this program; if not, you can either send email to this
  103. ;; program's author (see below) or write to:
  104. ;;
  105. ;;              The Free Software Foundation, Inc.
  106. ;;              675 Mass Ave.
  107. ;;              Cambridge, MA 02139, USA. 
  108. ;;
  109.  
  110.  
  111. (defun g++dem nil
  112. "Demangles g++ symbols between point and mark. Output is written to
  113. buffer named `g++dem'."  
  114.  
  115.   (interactive)
  116.  
  117.   (if (<= (mark) (point))
  118.       (exchange-point-and-mark)
  119.     )
  120.  
  121.   (let ((process-connection-type nil)
  122.     (out-buf (get-buffer-create "g++dem"))
  123.     (end (mark))
  124.     g++dem-proc
  125.     symbol)
  126.     
  127.     (setq g++dem-proc (start-process "g++dem" out-buf "g++dem" ))
  128.  
  129.     (while (and (< (point) (mark))
  130.         (re-search-forward "[^ \\t]*" end t))
  131.       (setq symbol (read (current-buffer)))
  132.       (process-send-string g++dem-proc (format "%s\n" (symbol-name symbol)))
  133.       )
  134.  
  135.     (process-send-eof g++dem-proc)
  136.     
  137.     (switch-to-buffer-other-window out-buf)
  138.     )
  139.   )
  140.  
  141.     
  142. SHAR_EOF
  143. fi # end of overwriting check
  144. #    End of shell archive
  145. exit 0
  146.  
  147. -- 
  148. ------------------------------------------------------------------
  149. Britt Levy, NEC AMERICA INC             1525 W WALNUT HILL LN
  150. blevy@esd.dl.nec.com                IRVING TX 75038-3793
  151.                     Phone: (214) 518-3829
  152. ------------------------------------------------------------------
  153.