summaryrefslogtreecommitdiff
path: root/autoopts/tpl/strings.tpl
diff options
context:
space:
mode:
Diffstat (limited to 'autoopts/tpl/strings.tpl')
-rw-r--r--autoopts/tpl/strings.tpl174
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) =] */