diff options
Diffstat (limited to 'autoopts/tpl/strings.tpl')
-rw-r--r-- | autoopts/tpl/strings.tpl | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/autoopts/tpl/strings.tpl b/autoopts/tpl/strings.tpl new file mode 100644 index 0000000..725726e --- /dev/null +++ b/autoopts/tpl/strings.tpl @@ -0,0 +1,174 @@ +[= AutoGen5 Template c -*- Mode: scheme -*- + +## Time-stamp: "2012-08-11 08:20:07 bkorb" +## Author: Bruce Korb <bkorb@gnu.org> + +## Copyright (C) 2011-2012 Bruce Korb, all rights reserved. +## This is free software. It is licensed for use, modification and +## redistribution under the terms of the +## Modified (3 clause) Berkeley Software Distribution License +## <http://www.xfree86.org/3.3.6/COPYRIGHT2.html> +## +## Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions +## are met: +## 1. Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## 2. Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in the +## documentation and/or other materials provided with the distribution. +## 3. Neither the name ``Bruce Korb'' nor the name of any other +## contributor may be used to endorse or promote products derived +## from this software without specific prior written permission. +## +## strings IS PROVIDED BY Bruce Korb ``AS IS'' AND ANY EXPRESS +## OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +## WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +## ARE DISCLAIMED. IN NO EVENT SHALL Bruce Korb OR ANY OTHER CONTRIBUTORS +## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +## CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +## SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +## BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +## WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +## OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +## ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=] +[= INCLUDE "tpl-config.tlib" =][= + +(define copy-years (shellf + "year=`sed -n '/Time-stamp[:]/ { + s/[^\"]*\"// + s/-.*// + p + q + }' %s` + test X$year = X2011 || year=2011-$year + echo $year" (tpl-file #t))) \=] +[= INVOKE leader guard = false \=] +[= (out-push-new (string-append (base-name) ".h")) \=] +[= INVOKE leader guard = true =] +[= (out-suspend "header") ;; resume defines + (define string-name (string->c-name! (string-append + (base-name) "-strtable"))) + (string-table-new string-name) + (define max-name-len 0) + (define tmp-str "") + (define tmp-len 0) \=] +#include "[= (. header-file) =]" +[= + +(define str-nm "") +(define str-val "") +(define str-ct 0) +(define name-ln 0) +(define find-ln "") +(define def-fmt "#define %%-%us (%%s)\n#define %%-%us %%d\n") +(out-push-new) ;; temp file for #defines +=][= +FOR string =][= + (set! find-ln (string-length (get "nm" ""))) + (if (> find-ln name-ln) + (set! name-ln find-ln)) =][= +ENDFOR string =][= + +(if (exist? "file-name-string") (begin + (set! str-nm (string-upcase (string-append string-name "_file"))) + (set! find-ln (string-length str-nm)) + (if (> find-ln name-ln) + (set! name-ln find-ln)) + (set! def-fmt (sprintf def-fmt (+ 1 name-ln) (+ 5 name-ln))) + (set! str-ct 1) + (set! str-val (string-append (base-name) ".c")) + (set! tmp-str (string-table-add-ref string-name str-val)) + (ag-fprintf 0 def-fmt str-nm tmp-str + (string-append str-nm "_LEN") (string-length str-val)) + ) + + (set! def-fmt (sprintf def-fmt (+ 1 name-ln) (+ 5 name-ln))) +) + +(set! find-ln "") =][= + +FOR string =][= + (set! str-nm (get "nm")) + (set! str-ct (+ str-ct 1)) + (set! str-val (get "str" str-nm)) + (set! tmp-str (string-table-add-ref string-name str-val)) + (if (exist? "define-line-no") + (set! find-ln (string-append find-ln str-nm " " tmp-str "\n")) ) + (sprintf def-fmt str-nm tmp-str + (string-append str-nm "_LEN") (string-length str-val)) =][= +ENDFOR string =][= + +(out-suspend "defines") +(out-resume "header") ;; real header file +(ag-fprintf 0 + "/*\n * %d strings in %s string table\n */\n" str-ct string-name) +(out-resume "defines") +(emit (shell (string-append "sort <<\\_EOF_\n" + (out-pop #t) "_EOF_"))) ;; #defines now in real header file +(emit "\n") +(out-push-new) +(emit-string-table string-name) +(define str-table (out-pop #t)) +(emit (shell (string-append + "sed -n '/static char const/ { + s/static char/extern char/ + s/ *=.*/;/ + p + q + }' <<\\_EOF_\n" + str-table + "\n_EOF_" +))) +(out-suspend "header") ;; resuming text output +(shell (string-append + "sed 's/^static char const/char const/' <<\\_EOF_\n" + str-table + "\n_EOF_" +)) =][= + +IF (out-resume "header") ;; real header file + (> (string-length find-ln) 0)=] + +[= (out-push-new) =] +while read nm ln +do + test -z "$nm" && break + ln='/\* *'${ln#*+}' \*/' + ln=`[=(. egrep-prog)=] -n "$ln" [= (base-name) =].c` + nm=`echo $nm | tr '[a-z]' '[A-Z]'`_LINENO + printf '#define %-31s %s\n' ${nm} ${ln%%:*} +done <<\_EOF_ +[= (. find-ln) =]_EOF_[= + +(shell (out-pop #t)) =][= +ENDIF find-ln not empty =][= +(if (exist? "header-trailer") + (emit (join "\n\n" "header-trailer")) ) \=] + + +#endif /* [= (. header-guard) =] */ +[= (out-pop) =][= + +DEFINE leader \=][= + (emit (dne " * " "/* ")) + (emit "\n *\n") + (emit (license-full "mbsd" "strings" " * " "Bruce Korb" copy-years)) + (emit "\n */\n") + (if (= (get "guard") "true") + (emit (string-append + (make-header-guard "strings") + (if (exist? "header-leader") (string-append "\n\n" + (join "\n\n" "header-leader") ) "" ) )) + (if (exist? "code-leader") + (emit (string-append "\n\n" (join "\n\n" "code-leader"))) ) + ) +=][= + +ENDDEF leader =][= +(if (exist? "code-trailer") + (emit (join "\n\n" "code-trailer")) ) =] + +/* end of [= (out-name) =] */ |