X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;f=src%2Foidtoc.tcl;h=2e72d033a177d3b305b68bdd9f7d599f708f196a;hb=12b96ce71560a566dfff5901e2b1aaa9d2dc94cc;hp=7809f3f6d4499619d48eef41f739b2e70612e90f;hpb=3cdfbd27dfc8dd15619f127ae78bf0f71b27dd6d;p=yaz-moved-to-github.git
diff --git a/src/oidtoc.tcl b/src/oidtoc.tcl
index 7809f3f..2e72d03 100644
--- a/src/oidtoc.tcl
+++ b/src/oidtoc.tcl
@@ -1,8 +1,7 @@
# This file is part of the YAZ toolkit
-# Copyright (c) Index Data 2006-2007
+# Copyright (C) Index Data
# See the file LICENSE for details.
#
-# $Id: oidtoc.tcl,v 1.1 2007-04-16 21:53:09 adam Exp $
#
# Converts a CSV file with Object identifiers to C
@@ -34,35 +33,114 @@ proc readoids {input} {
return $oids
}
-proc oid_to_c {input cfile hfile} {
- set oids [readoids $input]
+proc constant_var {oid} {
+ set lname [string tolower [lindex $oid 2]]
+ set lname [string map {- _ . _ { } _ ( {} ) {}} $lname]
+ set prefix [string tolower [lindex $oid 0]]
+
+ return yaz_oid_${prefix}_${lname}
+}
+
+proc oid_to_xml {srcdir input xname} {
+ set oids [readoids "${input}"]
+ set xfile [open "${xname}" w]
+
+ puts $xfile ""
+ puts $xfile {}
+ puts $xfile {}
+ puts $xfile {}
+ puts $xfile {}
+ puts $xfile {}
+ puts $xfile {}
+ puts $xfile {}
+ puts $xfile {Name}
+ puts $xfile {Class}
+ puts $xfile {Constant / OID}
+ puts $xfile {
}
+ puts $xfile {}
+ puts $xfile {}
+
+ foreach oid $oids {
+ puts $xfile {}
+
+ puts $xfile {}
+ puts $xfile [lindex $oid 2]
+ puts $xfile {}
+
+
+ puts $xfile {}
+ puts $xfile [lindex $oid 0]
+ puts $xfile {}
+
+ puts $xfile {}
+ set v [constant_var $oid]
+ puts $xfile $v
+ puts $xfile {}
+
+
+ puts $xfile {
}
+ puts $xfile {}
- set cfile [open $cfile w]
- set hfile [open $hfile w]
+ puts $xfile {}
+ puts $xfile [lindex $oid 1]
+ puts $xfile {}
+
+ puts $xfile {
}
+ }
+
+ puts $xfile {}
+ puts $xfile {}
+
+ puts $xfile {}
+ close $xfile
+}
+
+proc oid_to_c {srcdir input cname hname} {
+ set oids [readoids "${input}"]
+
+ set cfile [open "${srcdir}/${cname}" w]
+ set hfile [open "${srcdir}/../include/yaz/${hname}" w]
+
+ puts $cfile "/** \\file $cname"
+ puts $hfile "/** \\file $hname"
+ set preamble " \\brief Standard Object Identifiers: Generated from $input */"
+ puts $cfile $preamble
+ puts $hfile $preamble
+ puts $hfile "\#ifndef OID_STD_H"
+ puts $hfile "\#define OID_STD_H"
+
+ puts $cfile "\#if HAVE_CONFIG_H"
+ puts $cfile "\#include "
+ puts $cfile "\#endif"
puts $cfile "\#include "
puts $cfile ""
+ # To avoid LNK4049
+ puts $hfile "\#ifdef YAZ_DLL"
+ puts $hfile "\#define OID_EXPORT YAZ_EXPORT"
+ puts $hfile "\#else"
+ puts $hfile "\#define OID_EXPORT YAZ_IMPORT"
+ puts $hfile "\#endif"
+
+ puts $hfile "YAZ_BEGIN_CDECL"
foreach oid $oids {
- set lname [string tolower [lindex $oid 2]]
- set lname [string map {- _ . _ { } _ ( {} ) {}} $lname]
- set prefix [string tolower [lindex $oid 0]]
+
+ set v [constant_var $oid]
- puts -nonewline $cfile "const int yaz_oid_${prefix}_${lname}\[\] = \{"
+ puts -nonewline $cfile "YAZ_EXPORT const Odr_oid $v\[\] = \{"
puts -nonewline $cfile [string map {. ,} [lindex $oid 1]]
puts $cfile ",-1\};"
- puts $hfile "extern const int yaz_oid_${prefix}_${lname}\[\];"
+ puts $hfile "OID_EXPORT extern const Odr_oid $v\[\];"
}
- puts $cfile "struct yaz_oid_entry yaz_oid_standard_entries\[\] ="
+ puts $cfile "YAZ_EXPORT struct yaz_oid_entry yaz_oid_standard_entries\[\] ="
puts $cfile "\{"
foreach oid $oids {
- set lname [string tolower [lindex $oid 2]]
- set lname [string map {- _ . _ { } _ ( {} ) {}} $lname]
- set prefix [string tolower [lindex $oid 0]]
+ set v [constant_var $oid]
puts -nonewline $cfile "\t\{CLASS_[lindex $oid 0], "
- puts -nonewline $cfile "yaz_oid_${prefix}_${lname}, "
+ puts -nonewline $cfile "$v, "
puts -nonewline $cfile \"[lindex $oid 2]\"
puts $cfile "\},"
}
@@ -70,13 +148,18 @@ proc oid_to_c {input cfile hfile} {
puts $cfile "\t\{CLASS_NOP, 0, 0\}"
puts $cfile "\};"
- puts $hfile "extern struct yaz_oid_entry yaz_oid_standard_entries\[\];"
+ puts $hfile "OID_EXPORT extern struct yaz_oid_entry yaz_oid_standard_entries\[\];"
+ puts $hfile "YAZ_END_CDECL"
+ puts $hfile "\#endif"
close $cfile
close $hfile
}
-if {[llength $argv] != 3} {
- puts "oidtoc.tcl csv cfile hfile"
+if {[llength $argv] == 4} {
+ oid_to_c [lindex $argv 0] [lindex $argv 1] [lindex $argv 2] [lindex $argv 3]
+} elseif {[llength $argv] == 3} {
+ oid_to_xml [lindex $argv 0] [lindex $argv 1] [lindex $argv 2]
+} else {
+ puts "oidtoc.tcl srcdir csv cfile hfile"
exit 1
}
-oid_to_c [lindex $argv 0] [lindex $argv 1] [lindex $argv 2]
\ No newline at end of file