home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / usr.bin / lorder / lorder.sh < prev    next >
Encoding:
Linux/UNIX/POSIX Shell Script  |  1991-04-12  |  2.8 KB  |  90 lines

  1. #!/bin/sh -
  2. #
  3. # Copyright (c) 1990 The Regents of the University of California.
  4. # All rights reserved.
  5. #
  6. # Redistribution and use in source and binary forms, with or without
  7. # modification, are permitted provided that the following conditions
  8. # are met:
  9. # 1. Redistributions of source code must retain the above copyright
  10. #    notice, this list of conditions and the following disclaimer.
  11. # 2. Redistributions in binary form must reproduce the above copyright
  12. #    notice, this list of conditions and the following disclaimer in the
  13. #    documentation and/or other materials provided with the distribution.
  14. # 3. All advertising materials mentioning features or use of this software
  15. #    must display the following acknowledgement:
  16. #    This product includes software developed by the University of
  17. #    California, Berkeley and its contributors.
  18. # 4. Neither the name of the University nor the names of its contributors
  19. #    may be used to endorse or promote products derived from this software
  20. #    without specific prior written permission.
  21. #
  22. # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  23. # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  24. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  25. # ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  26. # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  27. # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  28. # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  29. # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  30. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  31. # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  32. # SUCH DAMAGE.
  33. #
  34. #    @(#)lorder.sh    5.3 (Berkeley) 4/12/91
  35. #
  36.  
  37. PATH=/bin:/usr/bin
  38. export PATH
  39.  
  40. # only one argument is a special case, just output the name twice
  41. case $# in
  42.     0)
  43.         echo "usage: lorder file ...";
  44.         exit ;;
  45.     1)
  46.         echo $1 $1;
  47.         exit ;;
  48. esac
  49.  
  50. # temporary files
  51. R=/tmp/_reference_$$
  52. S=/tmp/_symbol_$$
  53.  
  54. # remove temporary files on HUP, INT, QUIT, PIPE, TERM
  55. trap "rm -f $R $S; exit 1" 1 2 3 13 15
  56.  
  57. # if the line ends in a colon, assume it's the first occurrence of a new
  58. # object file.  Echo it twice, just to make sure it gets into the output.
  59. #
  60. # if the line has " T " or " D " it's a globally defined symbol, put it
  61. # into the symbol file.
  62. #
  63. # if the line has " U " it's a globally undefined symbol, put it into
  64. # the reference file.
  65. nm -go $* | sed "
  66.     /:$/ {
  67.         s/://
  68.         s/.*/& &/
  69.         p
  70.         d
  71.     }
  72.     / [TD] / {
  73.         s/:.* [TD]//
  74.         w $S
  75.         d
  76.     }
  77.     / U / {
  78.         s/:.* U//
  79.         w $R
  80.     }
  81.     d
  82. "
  83.  
  84. # sort symbols and references on the first field (the symbol)
  85. # join on that field, and print out the file names.
  86. sort +1 $R -o $R
  87. sort +1 $S -o $S
  88. join -j 2 -o 1.1 2.1 $R $S
  89. rm -f $R $S
  90.