| 1 | #!/bin/sh |
| 2 | ############################################################################# |
| 3 | # Name: splice |
| 4 | # Purpose: Splice a marked section of regcustom.h into regex.h |
| 5 | # Author: Mike Wetherell |
| 6 | # RCS-ID: $Id$ |
| 7 | # Copyright: (c) 2004 Mike Wetherell |
| 8 | # Licence: wxWindows licence |
| 9 | ############################################################################# |
| 10 | |
| 11 | # |
| 12 | # Works by greping for the marks then passing their line numbers to sed. Which |
| 13 | # is slighly the long way round, but allows some error checking. |
| 14 | # |
| 15 | |
| 16 | SRC=regcustom.h |
| 17 | DST=regex.h |
| 18 | MARK1='^/\* --- begin --- \*/$' |
| 19 | MARK2='^/\* --- end --- \*/$' |
| 20 | PROG=`basename $0` |
| 21 | TMP=$DST.tmp |
| 22 | |
| 23 | # findline(pattern, file) |
| 24 | # Prints the line number of the 1st line matching the pattern in the file |
| 25 | # |
| 26 | findline() { |
| 27 | if ! LINE=`grep -n -- "$1" "$2"`; then |
| 28 | echo "$PROG: marker '$1' not found in '$2'" >&2 |
| 29 | return 1 |
| 30 | fi |
| 31 | echo $LINE | sed -n '1s/[^0-9].*//p' # take just the line number |
| 32 | } |
| 33 | |
| 34 | # findmarkers([out] line1, [out] line2, pattern1, pattern2, file) |
| 35 | # Returns (via the variables named in the 1st two parameters) the line |
| 36 | # numbers of the lines matching the patterns in file. Checks pattern1 comes |
| 37 | # before pattern2. |
| 38 | # |
| 39 | findmarkers() { |
| 40 | if ! LINE1=`findline "$3" "$5"` || ! LINE2=`findline "$4" "$5"`; then |
| 41 | return 1 |
| 42 | fi |
| 43 | if [ $LINE1 -ge $LINE2 ]; then |
| 44 | echo "$PROG: marker '$3' not before '$4' in '$5'" >&2 |
| 45 | return 1 |
| 46 | fi |
| 47 | eval $1=$LINE1 |
| 48 | eval $2=$LINE2 |
| 49 | } |
| 50 | |
| 51 | # find markers |
| 52 | # |
| 53 | if findmarkers SRCLINE1 SRCLINE2 "$MARK1" "$MARK2" $SRC && |
| 54 | findmarkers DSTLINE1 DSTLINE2 "$MARK1" "$MARK2" $DST |
| 55 | then |
| 56 | # do splice |
| 57 | # |
| 58 | if (sed $DSTLINE1,\$d $DST && |
| 59 | sed -n $SRCLINE1,${SRCLINE2}p $SRC && |
| 60 | sed 1,${DSTLINE2}d $DST) > $TMP |
| 61 | then |
| 62 | mv $TMP $DST |
| 63 | exit 0 |
| 64 | else |
| 65 | rm $TMP |
| 66 | fi |
| 67 | fi |
| 68 | |
| 69 | exit 1 |