Home | History | Annotate | Download | only in strace
      1 ;; Copyright (c) 1993, 1994, 1995 Rick Sladkey <jrs (at) world.std.com>
      2 ;; All rights reserved.
      3 ;;
      4 ;; Redistribution and use in source and binary forms, with or without
      5 ;; modification, are permitted provided that the following conditions
      6 ;; are met:
      7 ;; 1. Redistributions of source code must retain the above copyright
      8 ;;    notice, this list of conditions and the following disclaimer.
      9 ;; 2. Redistributions in binary form must reproduce the above copyright
     10 ;;    notice, this list of conditions and the following disclaimer in the
     11 ;;    documentation and/or other materials provided with the distribution.
     12 ;; 3. The name of the author may not be used to endorse or promote products
     13 ;;    derived from this software without specific prior written permission.
     14 ;;
     15 ;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     16 ;; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     17 ;; OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     18 ;; IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     19 ;; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     20 ;; NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     21 ;; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     22 ;; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     23 ;; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     24 ;; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     25 
     26 ;; Description: Automate the construction of strace xlat tables.
     27 
     28 ;; Usage: Put point and mark around a set of definitions in a header
     29 ;; file.  Then grab them with C-c G.  Switch to the strace source file
     30 ;; and build the xlat table with C-c B.  Then type the name of the table.
     31 
     32 (global-set-key "\C-cG" 'grab-xlate)
     33 (global-set-key "\C-cB" 'build-xlate)
     34 
     35 (defvar xlate-list nil
     36   "See grab-xlate and build-xlate.")
     37 
     38 (defun grab-xlate (beg end)
     39   "Grab all of the defined names in the region and save them in xlate-list."
     40   (interactive "r")
     41   (save-excursion
     42     (setq xlate-list nil)
     43     (goto-char beg)
     44     (beginning-of-line)
     45     (while (< (point) end)
     46       (and (looking-at "^#[ \t]*define[ \t]+\\([A-Za-z0-9_]+\\)[ \t]+")
     47 	   (setq xlate-list (cons (buffer-substring (match-beginning 1)
     48 						    (match-end 1))
     49 				  xlate-list)))
     50       (forward-line)))
     51   (and (fboundp 'deactivate-mark)
     52        (deactivate-mark))
     53   (setq xlate-list (nreverse xlate-list)))
     54 
     55 (defun build-xlate (&optional list)
     56   "Build and insert an strace xlat table based on the last grab."
     57   (interactive)
     58   (or list
     59       (setq list xlate-list))
     60   (beginning-of-line)
     61   (save-excursion
     62     (insert "static struct xlat ?[] = {\n")
     63     (while list
     64       (insert "\t{ " (car list) ",\n")
     65       (backward-char)
     66       (move-to-column 24 'force)
     67       (end-of-line)
     68       (insert "\"" (car list) "\"")
     69       (move-to-column 40 'force)
     70       (end-of-line)
     71       (insert "},")
     72       (forward-line)
     73       (setq list (cdr list)))
     74     (insert "	{ 0,		NULL		},\n")
     75     (insert "};\n")
     76     (insert "\n"))
     77   (search-forward "?")
     78   (delete-backward-char 1))
     79