Blame bibutils/marc_auth.c

Packit 89ede9
/*
Packit 89ede9
 * marc_auth.c
Packit 89ede9
 *
Packit 89ede9
 * Copyright (c) Chris Putnam 2004-2018
Packit 89ede9
 *
Packit 89ede9
 * Source code released under the GPL version 2
Packit 89ede9
 *
Packit 89ede9
 */
Packit 89ede9
#include "marc_auth.h"
Packit 89ede9
#include <string.h>
Packit 89ede9
Packit 89ede9
static const char *marc_genre[] = {
Packit 89ede9
	"abstract or summary",
Packit 89ede9
	"art original",
Packit 89ede9
	"art reproduction",
Packit 89ede9
	"article",
Packit 89ede9
	"atlas",
Packit 89ede9
	"autobiography",
Packit 89ede9
	"bibliography",
Packit 89ede9
	"biography",
Packit 89ede9
	"book",
Packit 89ede9
	"calendar",
Packit 89ede9
	"catalog",
Packit 89ede9
	"chart",
Packit 89ede9
	"comic or graphic novel",
Packit 89ede9
	"comic strip",
Packit 89ede9
	"conference publication",
Packit 89ede9
	"database",
Packit 89ede9
	"dictionary",
Packit 89ede9
	"diorama",
Packit 89ede9
	"directory",
Packit 89ede9
	"discography",
Packit 89ede9
	"drama",
Packit 89ede9
	"encyclopedia",
Packit 89ede9
	"essay",
Packit 89ede9
	"festschrift",
Packit 89ede9
	"fiction",
Packit 89ede9
	"filmography",
Packit 89ede9
	"filmstrip",
Packit 89ede9
	"finding aid",
Packit 89ede9
	"flash card",
Packit 89ede9
	"folktale",
Packit 89ede9
	"font",
Packit 89ede9
	"game",
Packit 89ede9
	"government publication",
Packit 89ede9
	"graphic",
Packit 89ede9
	"globe",
Packit 89ede9
	"handbook",
Packit 89ede9
	"history",
Packit 89ede9
	"humor, satire",
Packit 89ede9
	"hymnal",
Packit 89ede9
	"index",
Packit 89ede9
	"instruction",
Packit 89ede9
	"interview",
Packit 89ede9
	"issue",
Packit 89ede9
	"journal",
Packit 89ede9
	"kit",
Packit 89ede9
	"language instruction",
Packit 89ede9
	"law report or digest",
Packit 89ede9
	"legal article",
Packit 89ede9
	"legal case and case notes",
Packit 89ede9
	"legislation",
Packit 89ede9
	"letter",
Packit 89ede9
	"loose-leaf",
Packit 89ede9
	"map",
Packit 89ede9
	"memoir",
Packit 89ede9
	"microscope slide",
Packit 89ede9
	"model",
Packit 89ede9
	"motion picture",
Packit 89ede9
	"multivolume monograph",
Packit 89ede9
	"newspaper",
Packit 89ede9
	"novel",
Packit 89ede9
	"numeric data",
Packit 89ede9
	"offprint",
Packit 89ede9
	"online system or service",
Packit 89ede9
	"patent",
Packit 89ede9
	"periodical",
Packit 89ede9
	"picture",
Packit 89ede9
	"poetry",
Packit 89ede9
	"programmed text",
Packit 89ede9
	"realia",
Packit 89ede9
	"rehearsal",
Packit 89ede9
	"remote sensing image",
Packit 89ede9
	"reporting",
Packit 89ede9
	"review",
Packit 89ede9
	"series",
Packit 89ede9
	"short story",
Packit 89ede9
	"slide",
Packit 89ede9
	"sound",
Packit 89ede9
	"speech",
Packit 89ede9
	"standard or specification",
Packit 89ede9
	"statistics",
Packit 89ede9
	"survey of literature",
Packit 89ede9
	"technical drawing",
Packit 89ede9
	"technical report",
Packit 89ede9
	"thesis",
Packit 89ede9
	"toy",
Packit 89ede9
	"transparency",
Packit 89ede9
	"treaty",
Packit 89ede9
	"videorecording",
Packit 89ede9
	"web site",
Packit 89ede9
	"yearbook",
Packit 89ede9
};
Packit 89ede9
static const int nmarc_genre = sizeof( marc_genre ) / sizeof( const char* );
Packit 89ede9
Packit 89ede9
static const char *marc_resource[] = {
Packit 89ede9
	"cartographic",
Packit 89ede9
	"kit",
Packit 89ede9
	"mixed material",
Packit 89ede9
	"moving image",
Packit 89ede9
	"notated music",
Packit 89ede9
	"software, multimedia",
Packit 89ede9
	"sound recording",
Packit 89ede9
	"sound recording - musical",
Packit 89ede9
	"sound recording - nonmusical",
Packit 89ede9
	"still image",
Packit 89ede9
	"text",
Packit 89ede9
	"three dimensional object"
Packit 89ede9
};
Packit 89ede9
static const int nmarc_resource = sizeof( marc_resource ) / sizeof( const char* );
Packit 89ede9
Packit 89ede9
Packit 89ede9
/* www.loc.gov/marc/relators/relacode.html */
Packit 89ede9
Packit 89ede9
typedef struct marc_trans {
Packit 89ede9
	char *abbreviation;
Packit 89ede9
	char *internal_name;
Packit 89ede9
} marc_trans;
Packit 89ede9
Packit 89ede9
static const marc_trans relators[] = {
Packit 89ede9
	{ "abr",	"ABRIDGER"                     },	/* Abridger */
Packit 89ede9
	{ "acp",	"ART_COPYIST"                  },	/* Art copyist */
Packit 89ede9
	{ "act",	"ACTOR"                        },	/* Actor */
Packit 89ede9
	{ "adi", 	"ART_DIRECTOR"                 },	/* Art director */
Packit 89ede9
	{ "adp",	"ADAPTER"                      },	/* Adapter */
Packit 89ede9
	{ "aft",	"AUTHOR"                       },	/* Author of afterword, colophon, etc. */
Packit 89ede9
	{ "anl",	"ANALYST"                      }, 	/* Analyst */
Packit 89ede9
	{ "anm",	"ANIMATOR"                     },	/* Animator */
Packit 89ede9
	{ "ann",	"ANNOTATOR"                    },	/* Annotator */
Packit 89ede9
	{ "ant",	"BIBLIOGRAPHIC_ANTECENDENT"    },	/* Bibliographic antecedent */
Packit 89ede9
	{ "ape",	"APPELLEE"                     },	/* Appellee */
Packit 89ede9
	{ "apl",	"APPELLANT"                    }, 	/* Appellant */
Packit 89ede9
	{ "app",	"APPLICANT"                    },	/* Applicant */
Packit 89ede9
	{ "aqt",	"AUTHOR"                       },	/* Author in quotations or text abstracts */
Packit 89ede9
	{ "arc",	"ARCHITECT"                    },	/* Architect */
Packit 89ede9
	{ "ard",	"ARTISTIC_DIRECTOR"            },	/* Artistic director */
Packit 89ede9
	{ "arr",	"ARRANGER"                     },	/* Arranger */
Packit 89ede9
	{ "art",	"ARTIST"                       },	/* Artist */
Packit 89ede9
	{ "asg",	"ASSIGNEE"                     },	/* Assignee */
Packit 89ede9
	{ "asn",	"ASSOCIATED_NAME"              },	/* Associated name */
Packit 89ede9
	{ "ato",	"AUTOGRAPHER"                  },	/* Autographer */
Packit 89ede9
	{ "att",	"ATTRIBUTED_NAME"              },	/* Attributed name */
Packit 89ede9
	{ "auc",	"AUCTIONEER"                   },	/* Auctioneer */
Packit 89ede9
	{ "aud",	"AUTHOR"                       },	/* Author of dialog */
Packit 89ede9
	{ "aui",	"AUTHOR"                       },	/* Author of introduction, etc. */
Packit 89ede9
	{ "aus",	"AUTHOR"                       },	/* Screenwriter */
Packit 89ede9
	{ "aut",	"AUTHOR"                       },	/* Author */
Packit 89ede9
	{ "author",     "AUTHOR"                       },
Packit 89ede9
	{ "bdd",	"BINDING_DESIGNER"             },	/* Binding designer */
Packit 89ede9
	{ "bjd",	"BOOKJACKET_DESIGNER"          },	/* Bookjacket designer */
Packit 89ede9
	{ "bkd",	"BOOK_DESIGNER"                },	/* Book designer */
Packit 89ede9
	{ "bkp",	"BOOK_PRODUCER"                },	/* Book producer */
Packit 89ede9
	{ "blw",	"AUTHOR"                       },	/* Blurb writer */
Packit 89ede9
	{ "bnd",	"BINDER"                       },	/* Binder */
Packit 89ede9
	{ "bpd",	"BOOKPLATE_DESIGNER"           },	/* Bookplate designer */
Packit 89ede9
	{ "brd",	"BROADCASTER"                  },	/* Broadcaster */
Packit 89ede9
	{ "brl",	"BRAILLE_EMBOSSER"             },	/* Braille embosser */
Packit 89ede9
	{ "bsl",	"BOOKSELLER"                   },	/* Bookseller */
Packit 89ede9
	{ "cas",	"CASTER"                       },	/* Caster */
Packit 89ede9
	{ "ccp",	"CONCEPTOR"                    },	/* Conceptor */
Packit 89ede9
	{ "chr",	"CHOREOGRAPHER"                },	/* Choreographer */
Packit 89ede9
	{ "clb",	"COLLABORATOR"                 },	/* Collaborator */
Packit 89ede9
	{ "cli",	"CLIENT"                       },	/* Client */
Packit 89ede9
	{ "cll",	"CALLIGRAPHER"                 },	/* Calligrapher */
Packit 89ede9
	{ "clr",	"COLORIST"                     },	/* Colorist */
Packit 89ede9
	{ "clt",	"COLLOTYPER"                   },	/* Collotyper */
Packit 89ede9
	{ "cmm",	"COMMENTATOR"                  },	/* Commentator */
Packit 89ede9
	{ "cmp",	"COMPOSER"                     },	/* Composer */
Packit 89ede9
	{ "cmt",	"COMPOSITOR"                   },	/* Compositor */
Packit 89ede9
	{ "cnd",	"CONDUCTOR"                    },	/* Conductor */
Packit 89ede9
	{ "cng",	"CINEMATOGRAPHER"              },	/* Cinematographer */
Packit 89ede9
	{ "cns",	"CENSOR"                       },	/* Censor */
Packit 89ede9
	{ "coe",	"CONTESTANT-APPELLEE"          },	/* Contestant-appellee */
Packit 89ede9
	{ "col",	"COLLECTOR"                    },	/* Collector */
Packit 89ede9
	{ "com",	"COMPILER"                     },	/* Compiler */
Packit 89ede9
	{ "con",	"CONSERVATOR"                  },	/* Conservator */
Packit 89ede9
	{ "cor",	"COLLECTION_REGISTRAR"         },	/* Collection registrar */
Packit 89ede9
	{ "cos",	"CONTESTANT"                   },	/* Contestant */
Packit 89ede9
	{ "cot",	"CONTESTANT-APPELLANT"         },	/* Contestant-appellant */
Packit 89ede9
	{ "cou",	"COURT_GOVERNED"               },	/* Court governed */
Packit 89ede9
	{ "cov",	"COVER_DESIGNER"               },	/* Cover designer */
Packit 89ede9
	{ "cpc",	"COPYRIGHT_CLAIMANT"           },	/* Copyright claimant */
Packit 89ede9
	{ "cpe",	"COMPLAINANT-APPELLEE"         },	/* Complainant-appellee */
Packit 89ede9
	{ "cph",	"COPYRIGHT_HOLDER"             },	/* Copyright holder */
Packit 89ede9
	{ "cpl",	"COMPLAINANT"                  },	/* Complainant */
Packit 89ede9
	{ "cpt",	"COMPLAINANT-APPELLANT"        },	/* Complainant-appellant */
Packit 89ede9
	{ "cre",	"AUTHOR"                       },	/* Creator */
Packit 89ede9
	{ "creator",    "AUTHOR"                       },
Packit 89ede9
	{ "crp",	"CORRESPONDENT"                },	/* Correspondent */
Packit 89ede9
	{ "crr",	"CORRECTOR"                    },	/* Corrector */
Packit 89ede9
	{ "crt",	"COURT_REPORTER"               },	/* Court reporter */
Packit 89ede9
	{ "csl",	"CONSULTANT"                   },	/* Consultant */
Packit 89ede9
	{ "csp",	"CONSULTANT_TO_A_PROJECT"      },	/* Consultant to a project */
Packit 89ede9
	{ "cst",	"COSTUME_DESIGNER"             },	/* Costume designer */
Packit 89ede9
	{ "ctb",	"CONTRIBUTOR"                  },	/* Contributor */
Packit 89ede9
	{ "cte",	"CONTESTEE-APPELLEE"           },	/* Contestee-appellee */
Packit 89ede9
	{ "ctg",	"CARTOGRAPHER"                 },	/* Cartographer */
Packit 89ede9
	{ "ctr",	"CONTRACTOR"                   },	/* Contractor */
Packit 89ede9
	{ "cts",	"CONTESTEE"                    },	/* Contestee */
Packit 89ede9
	{ "ctt",	"CONTESTEE-APPELLANT"          },	/* Contestee-appellant */
Packit 89ede9
	{ "cur",	"CURATOR"                      },	/* Curator */
Packit 89ede9
	{ "cwt",	"COMMENTATOR_FOR_WRITTEN_TEXT" },	/* Commentator for written text */
Packit 89ede9
	{ "dbp",	"DISTRIBUTION_PLACE"           },	/* Distribution place */
Packit 89ede9
	{ "degree grantor", "DEGREEGRANTOR"            },
Packit 89ede9
	{ "dfd",	"DEFENDANT"                    },	/* Defendant */
Packit 89ede9
	{ "dfe",	"DEFENDANT-APPELLEE"           },	/* Defendant-appellee */
Packit 89ede9
	{ "dft",	"DEFENDANT-APPELLANT"          },	/* Defendant-appellant */
Packit 89ede9
	{ "dgg",	"DEGREEGRANTOR"                },	/* Degree granting institution */
Packit 89ede9
	{ "dgs",	"DEGREE_SUPERVISOR"            },	/* Degree supervisor */
Packit 89ede9
	{ "dis",	"DISSERTANT"                   },	/* Dissertant */
Packit 89ede9
	{ "dln",	"DELINEATOR"                   },	/* Delineator */
Packit 89ede9
	{ "dnc",	"DANCER"                       },	/* Dancer */
Packit 89ede9
	{ "dnr",	"DONOR"                        },	/* Donor */
Packit 89ede9
	{ "dpc",	"DEPICTED"                     },	/* Depicted */
Packit 89ede9
	{ "dpt",	"DEPOSITOR"                    },	/* Depositor */
Packit 89ede9
	{ "drm",	"DRAFTSMAN"                    }, 	/* Draftsman */
Packit 89ede9
	{ "drt",	"DIRECTOR"                     }, 	/* Director */
Packit 89ede9
	{ "dsr",	"DESIGNER"                     }, 	/* Designer */
Packit 89ede9
	{ "dst",	"DISTRIBUTOR"                  }, 	/* Distributor */
Packit 89ede9
	{ "dtc",	"DATA_CONTRIBUTOR"             }, 	/* Data contributor */
Packit 89ede9
	{ "dte",	"DEDICATEE"                    }, 	/* Dedicatee */
Packit 89ede9
	{ "dtm",	"DATA_MANAGER"                 }, 	/* Data manager */
Packit 89ede9
	{ "dto",	"DEDICATOR"                    }, 	/* Dedicator */
Packit 89ede9
	{ "dub",	"AUTHOR"                       },	/* Dubious author */
Packit 89ede9
	{ "edc",	"EDITOR"                       }, 	/* Editor of compilation */
Packit 89ede9
	{ "edm",	"EDITOR"                       },	/* Editor of moving image work */
Packit 89ede9
	{ "edt",	"EDITOR"                       },	/* Editor */
Packit 89ede9
	{ "egr",	"ENGRAVER"                     }, 	/* Engraver */
Packit 89ede9
	{ "elg",	"ELECTRICIAN" 	               },	/* Electrician */
Packit 89ede9
	{ "elt",	"ELECTROTYPER"                 },	/* Electrotyper */
Packit 89ede9
	{ "eng",	"ENGINEER"                     }, 	/* Engineer */
Packit 89ede9
	{ "enj",	"ENACTING_JURISICTION"         }, 	/* Enacting jurisdiction */
Packit 89ede9
	{ "etr",	"ETCHER"                       }, 	/* Etcher */
Packit 89ede9
	{ "evp",	"EVENT_PLACE"                  }, 	/* Event place */
Packit 89ede9
	{ "exp",	"EXPERT"                       }, 	/* Expert */
Packit 89ede9
	{ "fac",	"FACSIMILIST"                  }, 	/* Facsimilist */
Packit 89ede9
	{ "fds",	"FILM_DISTRIBUTOR"             }, 	/* Film distributor */
Packit 89ede9
	{ "fld",	"FIELD_DIRECTOR"               }, 	/* Field director */
Packit 89ede9
	{ "flm",	"FILM_EDITOR"                  }, 	/* Film editor */
Packit 89ede9
	{ "fmd",	"FILM_DIRECTOR"                }, 	/* Film director */
Packit 89ede9
	{ "fmk",	"FILMMAKER"                    }, 	/* Filmmaker */
Packit 89ede9
	{ "fmo",	"FORMER_OWNER"                 }, 	/* Former owner */
Packit 89ede9
	{ "fmp",	"FILM_PRODUCER"                }, 	/* Film producer */
Packit 89ede9
	{ "fnd",	"FUNDER"                       }, 	/* Funder */
Packit 89ede9
	{ "fpy",	"FIRST_PARTY"                  }, 	/* First party */
Packit 89ede9
	{ "frg",	"FORGER"                       }, 	/* Forger */
Packit 89ede9
	{ "gis",	"GEOGRAPHIC_INFORMATON_SPECIALIST" }, 	/* Geographic information specialist */
Packit 89ede9
	{ "grt",	"GRAPHIC_TECHNICIAN"           }, 	/* Graphic technician */
Packit 89ede9
	{ "his",	"HOST_INSTITUTION"             }, 	/* Host institution */
Packit 89ede9
	{ "hnr",	"HONOREE"                      }, 	/* Honoree */
Packit 89ede9
	{ "hst",	"HOST"                         }, 	/* Host */
Packit 89ede9
	{ "ill",	"ILLUSTRATOR"                  }, 	/* Illustrator */
Packit 89ede9
	{ "ilu",	"ILLUMINATOR"                  }, 	/* Illuminator */
Packit 89ede9
	{ "ins",	"INSCRIBER"                    }, 	/* Inscriber */
Packit 89ede9
	{ "inv",	"INVENTOR"                     }, 	/* Inventor */
Packit 89ede9
	{ "isb",	"ISSUING_BODY"                 }, 	/* Issuing body */
Packit 89ede9
	{ "itr",	"INSTRUMENTALIST"              }, 	/* Instrumentalist */
Packit 89ede9
	{ "ive",	"INTERVIEWEE"                  }, 	/* Interviewee */
Packit 89ede9
	{ "ivr",	"INTERVIEWER"                  }, 	/* Interviewer */
Packit 89ede9
	{ "jud",	"JUDGE"                        }, 	/* Judge */
Packit 89ede9
	{ "jug",	"JURISDICTION_GOVERNED"        }, 	/* Jurisdiction governed */
Packit 89ede9
	{ "lbr",	"LABORATORY"                   }, 	/* Laboratory */
Packit 89ede9
	{ "lbt",	"LIBRETTIST"                   }, 	/* Librettist */
Packit 89ede9
	{ "ldr",	"LABORATORY_DIRECTORY"         }, 	/* Laboratory director */
Packit 89ede9
	{ "led",	"LEAD"                         }, 	/* Lead */
Packit 89ede9
	{ "lee",	"LIBELEE-APPELLEE"             }, 	/* Libelee-appellee */
Packit 89ede9
	{ "lel",	"LIBELEE"                      }, 	/* Libelee */
Packit 89ede9
	{ "len",	"LENDER"                       }, 	/* Lender */
Packit 89ede9
	{ "let",	"LIBELEE-APPELLANT"            }, 	/* Libelee-appellant */
Packit 89ede9
	{ "lgd",	"LIGHTING_DESIGNER"            }, 	/* Lighting designer */
Packit 89ede9
	{ "lie",	"LIBELANT-APPELLEE"            }, 	/* Libelant-appellee */
Packit 89ede9
	{ "lil",	"LIBELANT"                     }, 	/* Libelant */
Packit 89ede9
	{ "lit",	"LIBELANT-APPELLANT"           }, 	/* Libelant-appellant */
Packit 89ede9
	{ "lsa",	"LANDSCAPE_ARCHITECT"          }, 	/* Landscape architect */
Packit 89ede9
	{ "lse",	"LICENSEE"                     }, 	/* Licensee */
Packit 89ede9
	{ "lso",	"LICENSOR"                     }, 	/* Licensor */
Packit 89ede9
	{ "ltg",	"LITHOGRAPHER"                 }, 	/* Lithographer */
Packit 89ede9
	{ "lyr",	"LYRICIST"                     }, 	/* Lyricist */
Packit 89ede9
	{ "mcp",	"MUSIC_COPYIST"                }, 	/* Music copyist */
Packit 89ede9
	{ "mdc",	"METADATA_CONTACT"             }, 	/* Metadata contact */
Packit 89ede9
	{ "med",	"MEDIUM"                       }, 	/* Medium */
Packit 89ede9
	{ "mfp",	"MANUFACTURE_PLACE"            }, 	/* Manufacture place */
Packit 89ede9
	{ "mfr",	"MANUFACTURER"                 }, 	/* Manufacturer */
Packit 89ede9
	{ "mod",	"MODERATOR"                    }, 	/* Moderator */
Packit 89ede9
	{ "mon",	"THESIS_EXAMINER"              }, 	/* Monitor */
Packit 89ede9
	{ "mrb",	"MARBLER"                      }, 	/* Marbler */
Packit 89ede9
	{ "mrk",	"EDITOR"                       }, 	/* Markup editor */
Packit 89ede9
	{ "msd",	"MUSICAL_DIRECTOR"             }, 	/* Musical director */
Packit 89ede9
	{ "mte",	"METAL-ENGRAVER"               }, 	/* Metal-engraver */
Packit 89ede9
	{ "mtk",	"MINUTE_TAKER"                 },       /* Minute taker */
Packit 89ede9
	{ "mus",	"MUSICIAN"                     }, 	/* Musician */
Packit 89ede9
	{ "nrt",	"NARRATOR"                     }, 	/* Narrator */
Packit 89ede9
	{ "opn",	"THESIS_OPPONENT"              }, 	/* Opponent */
Packit 89ede9
	{ "org",	"ORIGINATOR"                   }, 	/* Originator */
Packit 89ede9
	{ "organizer of meeting", "ORGANIZER"          },
Packit 89ede9
	{ "orm",	"ORGANIZER"                    }, 	/* Organizer */
Packit 89ede9
	{ "osp",	"ONSCREEN_PRESENTER"           }, 	/* Onscreen presenter */
Packit 89ede9
	{ "oth",	"THESIS_OTHER"                 }, 	/* Other */
Packit 89ede9
	{ "own",	"OWNER"                        }, 	/* Owner */
Packit 89ede9
	{ "pan",	"PANELIST"                     }, 	/* Panelist */
Packit 89ede9
	{ "pat",	"PATRON"                       }, 	/* Patron */
Packit 89ede9
	{ "patent holder", "ASSIGNEE"                  },
Packit 89ede9
	{ "pbd",	"PUBLISHING_DIRECTOR"          }, 	/* Publishing director */
Packit 89ede9
	{ "pbl",	"PUBLISHER"                    }, 	/* Publisher */
Packit 89ede9
	{ "pdr",	"PROJECT_DIRECTOR"             },	/* Project director */
Packit 89ede9
	{ "pfr",	"PROOFREADER"                  }, 	/* Proofreader */
Packit 89ede9
	{ "pht",	"PHOTOGRAPHER"                 }, 	/* Photographer */
Packit 89ede9
	{ "plt",	"PLATEMAKER"                   }, 	/* Platemaker */
Packit 89ede9
	{ "pma",	"PERMITTING_AGENCY"            }, 	/* Permitting agency */
Packit 89ede9
	{ "pmn",	"PRODUCTION_MANAGER"           }, 	/* Production manager */
Packit 89ede9
	{ "pop",	"PRINTER_OF_PLATES"            }, 	/* Printer of plates */
Packit 89ede9
	{ "ppm",	"PAPERMAKER"                   }, 	/* Papermaker */
Packit 89ede9
	{ "ppt",	"PUPPETEER"                    }, 	/* Puppeteer */
Packit 89ede9
	{ "pra",	"PRAESES"                      }, 	/* Praeses */
Packit 89ede9
	{ "prc",	"PROCESS_CONTRACT"             }, 	/* Process contact */
Packit 89ede9
	{ "prd",	"PRODUCTION_PERSONNEL"         }, 	/* Production personnel */
Packit 89ede9
	{ "pre",	"PRESENTER"                    },	/* Presenter */
Packit 89ede9
	{ "prf",	"PERFORMER"                    }, 	/* Performer */
Packit 89ede9
	{ "prg",	"AUTHOR"                       }, 	/* Programmer */
Packit 89ede9
	{ "prm",	"PRINTMAKER"                   }, 	/* Printmaker */
Packit 89ede9
	{ "prn",	"PRODUCTION_COMPANY"           }, 	/* Production company */
Packit 89ede9
	{ "pro",	"PRODUCER"                     }, 	/* Producer */
Packit 89ede9
	{ "prp",	"PRODUCTION_PLACE"             }, 	/* Production place */
Packit 89ede9
	{ "prs",	"PRODUCTION_DESIGNER"          }, 	/* Production designer */
Packit 89ede9
	{ "prt",	"PRINTER"                      }, 	/* Printer */
Packit 89ede9
	{ "prv",	"PROVIDER"                     }, 	/* Provider */
Packit 89ede9
	{ "pta",	"PATENT_APPLICANT"             }, 	/* Patent applicant */
Packit 89ede9
	{ "pte",	"PLAINTIFF-APPELLEE"           }, 	/* Plaintiff-appellee */
Packit 89ede9
	{ "ptf",	"PLAINTIFF"                    }, 	/* Plaintiff */
Packit 89ede9
	{ "pth",	"ASSIGNEE"                     }, 	/* Patent holder */
Packit 89ede9
	{ "ptt",	"PLAINTIFF-APPELLANT"          }, 	/* Plaintiff-appellant */
Packit 89ede9
	{ "pup",	"PUBLICATION_PLACE"            }, 	/* Publication place */
Packit 89ede9
	{ "rbr",	"RUBRICATOR"                   }, 	/* Rubricator */
Packit 89ede9
	{ "rcd",	"RECORDIST"                    }, 	/* Recordist */
Packit 89ede9
	{ "rce",	"RECORDING_ENGINEER"           }, 	/* Recording engineer */
Packit 89ede9
	{ "rcp",	"ADDRESSEE"                    }, 	/* Addressee */
Packit 89ede9
	{ "rdd",	"RADIO_DIRECTOR"               }, 	/* Radio director */
Packit 89ede9
	{ "red",	"REDAKTOR"                     }, 	/* Redaktor */
Packit 89ede9
	{ "ren",	"RENDERER"                     }, 	/* Renderer */
Packit 89ede9
	{ "res",	"RESEARCHER"                   }, 	/* Researcher */
Packit 89ede9
	{ "rev",	"REVIEWER"                     }, 	/* Reviewer */
Packit 89ede9
	{ "rpc",	"RADIO_PRODUCER"               }, 	/* Radio producer */
Packit 89ede9
	{ "rps",	"REPOSITORY"                   }, 	/* Repository */
Packit 89ede9
	{ "rpt",	"REPORTER"                     }, 	/* Reporter */
Packit 89ede9
	{ "rpy",	"RESPONSIBLE_PARTY"            }, 	/* Responsible party */
Packit 89ede9
	{ "rse",	"RESPONDENT-APPELLEE"          }, 	/* Respondent-appellee */
Packit 89ede9
	{ "rsg",	"RESTAGER"                     }, 	/* Restager */
Packit 89ede9
	{ "rsp",	"RESPONDENT"                   }, 	/* Respondent */
Packit 89ede9
	{ "rsr",	"RESTORATIONIST"               }, 	/* Restorationist */
Packit 89ede9
	{ "rst",	"RESPONDENT-APPELLANT"         }, 	/* Respondent-appellant */
Packit 89ede9
	{ "rth",	"RESEARCH_TEAM_HEAD"           }, 	/* Research team head */
Packit 89ede9
	{ "rtm",	"RESEARCH_TEAM_MEMBER"         }, 	/* Research team member */
Packit 89ede9
	{ "sad",	"SCIENTIFIC_ADVISOR"           }, 	/* Scientific advisor */
Packit 89ede9
	{ "sce",	"SCENARIST"                    }, 	/* Scenarist */
Packit 89ede9
	{ "scl",	"SCULPTOR"                     }, 	/* Sculptor */
Packit 89ede9
	{ "scr",	"SCRIBE"                       }, 	/* Scribe */
Packit 89ede9
	{ "sds",	"SOUND_DESIGNER"               }, 	/* Sound designer */
Packit 89ede9
	{ "sec",	"SECRETARY"                    }, 	/* Secretary */
Packit 89ede9
	{ "sgd",	"STAGE_DIRECTOR"               }, 	/* Stage director */
Packit 89ede9
	{ "sgn",	"SIGNER"                       }, 	/* Signer */
Packit 89ede9
	{ "sht",	"SUPPORTING_HOST"              }, 	/* Supporting host */
Packit 89ede9
	{ "sll",	"SELLER"                       }, 	/* Seller */
Packit 89ede9
	{ "sng",	"SINGER"                       }, 	/* Singer */
Packit 89ede9
	{ "spk",	"SPEAKER"                      }, 	/* Speaker */
Packit 89ede9
	{ "spn",	"SPONSOR"                      }, 	/* Sponsor */
Packit 89ede9
	{ "spy",	"SECOND_PARTY"                 }, 	/* Second party */
Packit 89ede9
	{ "srv",	"SURVEYOR"                     }, 	/* Surveyor */
Packit 89ede9
	{ "std",	"SET_DESIGNER"                 },	/* Set designer */
Packit 89ede9
	{ "stg",	"SETTING"                      },	/* Setting */
Packit 89ede9
	{ "stl",	"STORYTELLER"                  },	/* Storyteller */
Packit 89ede9
	{ "stm",	"STAGE_MANAGER"                },	/* Stage manager */
Packit 89ede9
	{ "stn",	"STANDARDS_BODY"               },	/* Standards body */
Packit 89ede9
	{ "str",	"STEREOTYPER"                  },	/* Stereotyper */
Packit 89ede9
	{ "tcd",	"TECHNICAL_DIRECTOR"           },	/* Technical director */
Packit 89ede9
	{ "tch",	"TEACHER"                      },	/* Teacher */
Packit 89ede9
	{ "ths",	"THESIS_ADVISOR"               },	/* Thesis advisor */
Packit 89ede9
	{ "tld",	"TELEVISION_DIRECTOR"          },	/* Television director */
Packit 89ede9
	{ "tlp",	"TELEVISION_PRODUCER"          },	/* Television producer */
Packit 89ede9
	{ "trc",	"TRANSCRIBER"                  },	/* Transcriber */
Packit 89ede9
	{ "trl",	"TRANSLATOR"                   },	/* Translator */
Packit 89ede9
	{ "tyd",	"TYPE_DIRECTOR"                }, 	/* Type designer */
Packit 89ede9
	{ "tyg",	"TYPOGRAPHER"                  }, 	/* Typographer */
Packit 89ede9
	{ "uvp",	"UNIVERSITY_PLACE"             }, 	/* University place */
Packit 89ede9
	{ "vac",	"VOICE_ACTOR"                  }, 	/* Voice actor */
Packit 89ede9
	{ "vdg",	"VIDEOGRAPHER"                 }, 	/* Videographer */
Packit 89ede9
	{ "voc",	"VOCALIST"                     }, 	/* Vocalist */
Packit 89ede9
	{ "wac",	"AUTHOR"                       }, 	/* Writer of added commentary */
Packit 89ede9
	{ "wal",	"AUTHOR"                       }, 	/* Writer of added lyrics */
Packit 89ede9
	{ "wam",	"AUTHOR"                       }, 	/* Writer of accompanying material */
Packit 89ede9
	{ "wat",	"AUTHOR"                       }, 	/* Writer of added text */
Packit 89ede9
	{ "wdc",	"WOODCUTTER"                   }, 	/* Woodcutter */
Packit 89ede9
	{ "wde",	"WOOD_ENGRAVER"                }, 	/* Wood engraver */
Packit 89ede9
	{ "win",	"AUTHOR"                       }, 	/* Writer of introduction */
Packit 89ede9
	{ "wit",	"WITNESS"                      }, 	/* Witness */
Packit 89ede9
	{ "wpr",	"AUTHOR"                       }, 	/* Writer of preface */
Packit 89ede9
	{ "wst",	"AUTHOR"                       }, 	/* Writer of supplementary textual content */
Packit 89ede9
};
Packit 89ede9
Packit 89ede9
static const int nrealtors = sizeof( relators ) / sizeof( relators[0] );
Packit 89ede9
Packit 89ede9
char *
Packit 89ede9
marc_convertrole( const char *query )
Packit 89ede9
{
Packit 89ede9
	int i;
Packit 89ede9
Packit 89ede9
	for ( i=0; i
Packit 89ede9
		if ( !strcasecmp( query, relators[i].abbreviation ) )
Packit 89ede9
			return relators[i].internal_name;
Packit 89ede9
	}
Packit 89ede9
	return NULL;
Packit 89ede9
}
Packit 89ede9
Packit 89ede9
static int
Packit 89ede9
position_in_list( const char *list[], int nlist, const char *query )
Packit 89ede9
{
Packit 89ede9
	int i;
Packit 89ede9
	for ( i=0; i
Packit 89ede9
		if ( !strcasecmp( query, list[i] ) ) return i;
Packit 89ede9
	}
Packit 89ede9
	return -1;
Packit 89ede9
}
Packit 89ede9
Packit 89ede9
int
Packit 89ede9
marc_findgenre( const char *query )
Packit 89ede9
{
Packit 89ede9
	return position_in_list( marc_genre, nmarc_genre, query );
Packit 89ede9
}
Packit 89ede9
Packit 89ede9
int
Packit 89ede9
is_marc_genre( const char *query )
Packit 89ede9
{
Packit 89ede9
	if ( marc_findgenre( query ) != -1 ) return 1;
Packit 89ede9
	else return 0;
Packit 89ede9
}
Packit 89ede9
Packit 89ede9
int
Packit 89ede9
marc_findresource( const char *query )
Packit 89ede9
{
Packit 89ede9
	return position_in_list( marc_resource, nmarc_resource, query );
Packit 89ede9
}
Packit 89ede9
Packit 89ede9
int
Packit 89ede9
is_marc_resource( const char *query )
Packit 89ede9
{
Packit 89ede9
	if ( marc_findresource( query ) != -1 ) return 1;
Packit 89ede9
	else return 0;
Packit 89ede9
}