1 # This file is part of the YAZ toolkit
2 # Copyright (c) Index Data 2006-2007
3 # See the file LICENSE for details.
5 # $Id: oidtoc.tcl,v 1.3 2007-04-24 12:55:15 adam Exp $
7 # Converts a CSV file with Object identifiers to C
9 proc readoids {input} {
10 set csv [open $input r]
15 set cnt [gets $csv line]
19 if {![string compare [string index $line 0] \"]} {
22 set tokens [string map {, { }} $line]
23 if {[llength $tokens] != 3} {
24 puts "$input:$lineno: Bad line '$line'"
30 if {![info exists oids]} {
31 puts "$input:0 No OIDS"
37 proc oid_to_c {srcdir input cname hname} {
38 set oids [readoids "${srcdir}/${input}"]
40 set cfile [open "${srcdir}/${cname}" w]
41 set hfile [open "${srcdir}/../include/yaz/${hname}" w]
43 puts $cfile "/** \\file $cname"
44 puts $hfile "/** \\file $hname"
45 set preamble " \\brief Standard Object Identifiers: Generated from $input */"
48 puts $hfile "\#ifndef OID_STD_H"
49 puts $hfile "\#define OID_STD_H"
51 # Define this. So that we don't get duplicate declartions with MSVC
52 puts $cfile "\#define OID_STD_H"
53 puts $cfile "\#include <yaz/oid_db.h>"
56 puts $hfile "\#ifdef YAZ_DLL"
57 puts $hfile "\#define OID_EXPORT YAZ_EXPORT"
59 puts $hfile "\#define OID_EXPORT YAZ_IMPORT"
62 puts $hfile "YAZ_BEGIN_CDECL"
64 set lname [string tolower [lindex $oid 2]]
65 set lname [string map {- _ . _ { } _ ( {} ) {}} $lname]
66 set prefix [string tolower [lindex $oid 0]]
68 puts -nonewline $cfile "YAZ_EXPORT const int yaz_oid_${prefix}_${lname}\[\] = \{"
69 puts -nonewline $cfile [string map {. ,} [lindex $oid 1]]
72 puts $hfile "OID_EXPORT extern const int yaz_oid_${prefix}_${lname}\[\];"
75 puts $cfile "YAZ_EXPORT struct yaz_oid_entry yaz_oid_standard_entries\[\] ="
78 set lname [string tolower [lindex $oid 2]]
79 set lname [string map {- _ . _ { } _ ( {} ) {}} $lname]
80 set prefix [string tolower [lindex $oid 0]]
82 puts -nonewline $cfile "\t\{CLASS_[lindex $oid 0], "
83 puts -nonewline $cfile "yaz_oid_${prefix}_${lname}, "
84 puts -nonewline $cfile \"[lindex $oid 2]\"
88 puts $cfile "\t\{CLASS_NOP, 0, 0\}"
91 puts $hfile "OID_EXPORT extern struct yaz_oid_entry yaz_oid_standard_entries\[\];"
92 puts $hfile "YAZ_END_CDECL"
98 if {[llength $argv] != 4} {
99 puts "oidtoc.tcl srcdir csv cfile hfile"
102 oid_to_c [lindex $argv 0] [lindex $argv 1] [lindex $argv 2] [lindex $argv 3]