15d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#!/bin/sh
25d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
35d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# Convert text files to compilable C arrays.
45d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#
55d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# Copyright (C) 2007 Free Software Foundation, Inc.
65d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#
75d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# This file is part of GDB.
85d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#
95d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# This program is free software; you can redistribute it and/or modify
105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# it under the terms of the GNU General Public License as published by
115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# the Free Software Foundation; either version 2 of the License, or
125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# (at your option) any later version.
135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#
145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# This program is distributed in the hope that it will be useful,
155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# but WITHOUT ANY WARRANTY; without even the implied warranty of
165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# GNU General Public License for more details.
185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#
195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# You should have received a copy of the GNU General Public License
202910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner# along with this program; if not, see <http://www.gnu.org/licenses/>.
215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turneroutput=$1
235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnershift
245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerif test -z "$output" || test -z "$1"; then
265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner  echo "Usage: $0 OUTPUTFILE INPUTFILE..."
275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner  exit 1
285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerfi
295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerif test -e "$output"; then
315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner  echo "Output file \"$output\" already exists; refusing to overwrite."
325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner  exit 1
335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerfi
345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerfor input; do
365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner  arrayname=xml_feature_`echo $input | sed 's,.*/,,; s/[-.]/_/g'`
375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner  ${AWK:-awk} 'BEGIN { n = 0
395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner      print "static const char '$arrayname'[] = {"
405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner      for (i = 0; i < 255; i++)
415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        _ord_[sprintf("%c", i)] = i
425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } {
435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner      split($0, line, "");
445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner      printf "  "
455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner      for (i = 1; i <= length($0); i++) {
465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        c = line[i]
475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        if (c == "'\''") {
485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner          printf "'\''\\'\'''\'', "
495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        } else if (c == "\\") {
505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner          printf "'\''\\\\'\'', "
515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        } else if (_ord_[c] >= 32 && _ord_[c] < 127) {
525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner	  printf "'\''%s'\'', ", c
535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        } else {
545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner          printf "'\''\\%03o'\'', ", _ord_[c]
555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        }
565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        if (i % 10 == 0)
575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner          printf "\n   "
585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner      }
595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner      printf "'\''\\n'\'', \n"
605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    } END {
615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner      print "  0 };"
625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }' < $input >> $output
635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerdone
645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerecho >> $output
665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerecho "extern const char *const xml_builtin[][2];" >> $output
675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerecho "const char *const xml_builtin[][2] = {" >> $output
685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerfor input; do
705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner  basename=`echo $input | sed 's,.*/,,'`
715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner  arrayname=xml_feature_`echo $input | sed 's,.*/,,; s/[-.]/_/g'`
725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner  echo "  { \"$basename\", $arrayname }," >> $output
735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerdone
745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
752910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turnerecho "  { (char *)0, (char *)0 }" >> $output
765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerecho "};" >> $output
77