X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Foidtoc.tcl;h=2e72d033a177d3b305b68bdd9f7d599f708f196a;hp=17469e35562544f86d2b6e3d9e702bfe204c3b63;hb=cf91f233d0e16ed6920d84ce2d871eed90d3491b;hpb=c618d4743a6dff2764d4a95d8bcf4fc441fcd8db diff --git a/src/oidtoc.tcl b/src/oidtoc.tcl index 17469e3..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.2 2007-04-18 08:08:02 adam Exp $ # # Converts a CSV file with Object identifiers to C @@ -34,8 +33,70 @@ proc readoids {input} { return $oids } +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 {} + + 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 "${srcdir}/${input}"] + set oids [readoids "${input}"] set cfile [open "${srcdir}/${cname}" w] set hfile [open "${srcdir}/../include/yaz/${hname}" w] @@ -45,31 +106,41 @@ proc oid_to_c {srcdir input cname 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 "\}," } @@ -77,13 +148,18 @@ proc oid_to_c {srcdir input cname hname} { 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] != 4} { +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] [lindex $argv 3]