home *** CD-ROM | disk | FTP | other *** search
/ The UNIX CD Bookshelf / OREILLY_TUCB_UNIX_CD.iso / upt / examples / LINUX / ARCHIVE / RECOMMEN.Z / RECOMMEN / sbin / recomment
Encoding:
Text File  |  1993-01-01  |  2.7 KB  |  75 lines

  1. #! /bin/sh
  2. #
  3. ###    recomment - re-format a program's comment block, usually from "vi"
  4. ###    Usage (from 'vi'): !}recomment   (reads block, writes back in place)
  5. #
  6. ##    IF YOU MAKE COMMENT BLOCKS LIKE THIS:
  7. ##        ##
  8. ##        ##    These are comment lines blah blah blah blah blah blah blah
  9. ##        ##    More comment lines
  10. ##    OR LIKE THIS:
  11. ##        # These are
  12. ##        # comment lines blah blah blah blah blah blah blah blah blah
  13. ##    OR LIKE THIS:
  14. ##        * These are
  15. ##        * comment lines blah blah blah blah blah blah blah blah blah
  16. ##    (AND SO ON...)
  17. ##    IT CAN BE A HASSLE TO ADD MORE TEXT TO ONE OF THE LINES IN A BLOCK,
  18. ##    BECAUSE THE LINE CAN GET TOO LONG, WHICH REQUIRES YOU TO FOLD THAT
  19. ##    LINE ONTO THE NEXT LINE, WHICH MEANS YOU HAVE TO WORK AROUND THE
  20. ##    LEADING COMMENT CHARACTER(S).  YUCK.
  21. ##
  22. ##    recomment READS THE LINES YOU FEED ITS STANDARD INPUT.  IT LOOKS
  23. ##    AT THE FIRST LINE AND FIGURES OUT WHAT CHARACTERS YOU'RE USING
  24. ##    TO COMMENT THE LINE (SEE THE $cchar VARIABLE FOR A LIST, TYPICALLY
  25. ##    SPACES, TABS, #'S OR *'S).  THEN, IT STRIPS THOSE COMMENT CHARACTERS
  26. ##    OFF OF EACH LINE... FEEDS THE REMAINING BLOCK OF TEXT TO THE fmt
  27. ##    ULILITY, AND USES sed TO ADD THE COMMENT CHARACTERS AGAIN.
  28. ##
  29. ##    YOU USUALLY USE recomment FROM INSIDE vi, WITH COMMANDS LIKE:
  30. ##            !}recomment        (REFORMAT TO THE NEXT BLANK LINE)
  31. ##    OR        5!!recomment    (REFORMAT THIS LINE AND THE NEXT 4)
  32. ##
  33. ##    NORMALLY, recomment LETS fmt CHOOSE THE WIDTH OF THE COMMENT BLOCK
  34. ##    (72 CHARACTERS, I THINK).  TO GET ANOTHER WIDTH, YOU CAN EITHER:
  35. ##        * GIVE THE WIDTH ON THE COMMANDLINE, LIKE:
  36. ##            recomment -50
  37. ##        * SET AN ENVIRONMENT VARIABLE NAMED CBLKWID.  FOR EXAMPLE,
  38. ##          IN C-SHELL, USE:
  39. ##            setenv CBLKWID 50
  40. ##    GIVE THE MAXIMUM WIDTH, IN CHARACTERS, FOR THE COMMENT TEXT.
  41. ##
  42. ##    recomment ISN'T PERFECT, BUT IT'S USUALLY MUCH BETTER THAN NOTHING.
  43.  
  44. umask 077    # MAKE $temp PRIVATE
  45. temp=/tmp/RECOMMENT$$
  46. trap 'rm -f $temp; exit' 0 1 2 15
  47.  
  48. cchars='     #*'        # LEADING CHARACTERS TO PRESERVE (INCL. SPACE, TAB)
  49.  
  50. case "$1" in
  51. -[0-9]|-[0-9][0-9]|-[0-9][0-9][0-9]) widopt="$1" ;;
  52. "")    # CHECK ENVARIABLE (SILENTLY IGNORE ERRORS SO DON'T SCREW UP TEXT):
  53.     case "$CBLKWID" in
  54.     [0-9]|[0-9][0-9]|[0-9][0-9][0-9]) widopt="-$CBLKWID" ;;
  55.     esac
  56.     ;;
  57. *)    # PRINT ERROR, THEN GIVE THEM TEXT BACK (SO vi WON'T DELETE LINES):
  58.     echo "Usage: `basename $0` [-widthnum].  (Text output with no reformatting.)" 1>&2
  59.     cat
  60.     exit
  61.     ;;
  62. esac
  63.     
  64. cat > $temp
  65.  
  66. # GET COMMENT CHARACTERS USED ON FIRST LINE; STORE IN $comment:
  67. comment="`sed -n \"1s/^\([$cchars]*\).*/\1/p\" $temp`"
  68. # GET NUMBER OF CHARACTERS IN COMMENT CHARACTER STRING:
  69. cwidth=`expr "$comment" : '.*'`
  70.  
  71. # RE-FORMAT THE COMMENT BLOCK.  IF $widopt SET, USE IT:
  72. colrm 1 $cwidth < $temp |        # STRIP OFF COMMENT LEADER FROM LINES
  73. fmt $widopt |                    # RE-FORMAT THE TEXT, AND
  74. sed "s/^/$comment/"                # PUT THE COMMENT CHARACTERS BACK
  75.