3 use lib qw(../perlmods/OpenILS/Utils/ ../../../OpenSRF/src/perlmods);
5 use Fieldmapper (IDL => '../../examples/fm_IDL.xml');
8 $map = $Fieldmapper::fieldmap unless ($@);
14 print "usage: $0 <source_file>\n";
18 warn "Generating fieldmapper-c code...\n";
21 print $ARGV[0] . "\n";
23 open(SOURCE, ">$ARGV[0]");
26 #include "fieldmapper_lookup.h"
29 char * fm_pton(char * class, int pos) {
30 if (class == NULL) return NULL;
34 for my $object (keys %$map) {
35 my $short_name= $map->{$object}->{hint};
37 else if (!strcmp(class, "$short_name")) {
40 for my $field (keys %{$map->{$object}->{fields}}) {
41 my $position = $map->{$object}->{fields}->{$field}->{position};
44 return strdup("$field");
55 int isFieldmapper(char* class) {
56 if (class == NULL) return 0;
59 for my $object (keys %$map) {
60 my $short_name= $map->{$object}->{hint};
61 print SOURCE " else if (!strcmp(class, \"$short_name\")) return 1;\n";
67 int fm_ntop(char* class, char* field) {
68 if (class == NULL) return -1;
72 for my $object (keys %$map) {
73 my $short_name= $map->{$object}->{hint};
74 print SOURCE " else if (!strcmp(class, \"$short_name\")) {\n";
75 for my $field (keys %{$map->{$object}->{fields}}) {
76 my $position = $map->{$object}->{fields}->{$field}->{position};
77 print SOURCE " if (!strcmp(field,\"$field\")) return $position;\n";
82 print SOURCE " return -1;\n}\n";
87 static osrfList* __fm_classes = NULL;
88 osrfList* fm_classes() {
89 if(__fm_classes) return __fm_classes;
90 __fm_classes = osrfNewList();
93 for my $object (keys %$map) {
94 my $short_name= $map->{$object}->{hint};
95 $object =~ s/Fieldmapper:://o;
97 print SOURCE "\tosrfListPush(__fm_classes, \"$short_name\");\n";
98 print SOURCE "\tosrfListPush(__fm_classes, \"$object\");\n";