r2197 - in packages: . libmarc-record-perl libmarc-record-perl/branches libmarc-record-perl/branches/upstream libmarc-record-perl/branches/upstream/current libmarc-record-perl/branches/upstream/current/bin libmarc-record-perl/branches/upstream/current/etc libmarc-record-perl/branches/upstream/current/lib libmarc-record-perl/branches/upstream/current/lib/MARC libmarc-record-perl/branches/upstream/current/lib/MARC/Doc libmarc-record-perl/branches/upstream/current/lib/MARC/File libmarc-record-perl/branches/upstream/current/t

gregor herrmann gregoa-guest at costa.debian.org
Sat Feb 25 20:45:11 UTC 2006


Author: gregoa-guest
Date: 2006-02-25 20:44:36 +0000 (Sat, 25 Feb 2006)
New Revision: 2197

Added:
   packages/libmarc-record-perl/
   packages/libmarc-record-perl/branches/
   packages/libmarc-record-perl/branches/upstream/
   packages/libmarc-record-perl/branches/upstream/current/
   packages/libmarc-record-perl/branches/upstream/current/.releaserc
   packages/libmarc-record-perl/branches/upstream/current/Changes
   packages/libmarc-record-perl/branches/upstream/current/MANIFEST
   packages/libmarc-record-perl/branches/upstream/current/META.yml
   packages/libmarc-record-perl/branches/upstream/current/Makefile.PL
   packages/libmarc-record-perl/branches/upstream/current/README
   packages/libmarc-record-perl/branches/upstream/current/bin/
   packages/libmarc-record-perl/branches/upstream/current/bin/marcdump
   packages/libmarc-record-perl/branches/upstream/current/bin/marclint
   packages/libmarc-record-perl/branches/upstream/current/etc/
   packages/libmarc-record-perl/branches/upstream/current/etc/ecbdlist.html
   packages/libmarc-record-perl/branches/upstream/current/etc/specs
   packages/libmarc-record-perl/branches/upstream/current/lib/
   packages/libmarc-record-perl/branches/upstream/current/lib/MARC/
   packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Batch.pm
   packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Doc/
   packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Doc/Tutorial.pod
   packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Field.pm
   packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File.pm
   packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File/
   packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File/MicroLIF.pm
   packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File/USMARC.pm
   packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Lint.pm
   packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Record.pm
   packages/libmarc-record-perl/branches/upstream/current/t/
   packages/libmarc-record-perl/branches/upstream/current/t/00.load.t
   packages/libmarc-record-perl/branches/upstream/current/t/01.version.t
   packages/libmarc-record-perl/branches/upstream/current/t/10.camel.t
   packages/libmarc-record-perl/branches/upstream/current/t/11.astring.t
   packages/libmarc-record-perl/branches/upstream/current/t/12.ldr.t
   packages/libmarc-record-perl/branches/upstream/current/t/20.clone.t
   packages/libmarc-record-perl/branches/upstream/current/t/50.batch.t
   packages/libmarc-record-perl/branches/upstream/current/t/60.insert.t
   packages/libmarc-record-perl/branches/upstream/current/t/60.update.t
   packages/libmarc-record-perl/branches/upstream/current/t/61.append.t
   packages/libmarc-record-perl/branches/upstream/current/t/61.replace.t
   packages/libmarc-record-perl/branches/upstream/current/t/62.before.t
   packages/libmarc-record-perl/branches/upstream/current/t/63.after.t
   packages/libmarc-record-perl/branches/upstream/current/t/64.create.t
   packages/libmarc-record-perl/branches/upstream/current/t/66.grouped.t
   packages/libmarc-record-perl/branches/upstream/current/t/66.ordered.t
   packages/libmarc-record-perl/branches/upstream/current/t/70.croak.t
   packages/libmarc-record-perl/branches/upstream/current/t/75.warnings.t
   packages/libmarc-record-perl/branches/upstream/current/t/80.alphatag.t
   packages/libmarc-record-perl/branches/upstream/current/t/81.decode.t
   packages/libmarc-record-perl/branches/upstream/current/t/82.baddir.t
   packages/libmarc-record-perl/branches/upstream/current/t/83.indicators.t
   packages/libmarc-record-perl/branches/upstream/current/t/85.fh.t
   packages/libmarc-record-perl/branches/upstream/current/t/alphatag.lif
   packages/libmarc-record-perl/branches/upstream/current/t/baddir.usmarc
   packages/libmarc-record-perl/branches/upstream/current/t/badind.usmarc
   packages/libmarc-record-perl/branches/upstream/current/t/badldr.usmarc
   packages/libmarc-record-perl/branches/upstream/current/t/batch-filter.t
   packages/libmarc-record-perl/branches/upstream/current/t/camel.usmarc
   packages/libmarc-record-perl/branches/upstream/current/t/convenience.t
   packages/libmarc-record-perl/branches/upstream/current/t/decode-filter.t
   packages/libmarc-record-perl/branches/upstream/current/t/file-filter.t
   packages/libmarc-record-perl/branches/upstream/current/t/file-header.t
   packages/libmarc-record-perl/branches/upstream/current/t/lineendings-0a.lif
   packages/libmarc-record-perl/branches/upstream/current/t/lineendings-0d.lif
   packages/libmarc-record-perl/branches/upstream/current/t/lineendings-0d0a.lif
   packages/libmarc-record-perl/branches/upstream/current/t/lineendings.t
   packages/libmarc-record-perl/branches/upstream/current/t/lint.t
   packages/libmarc-record-perl/branches/upstream/current/t/pod-coverage.t
   packages/libmarc-record-perl/branches/upstream/current/t/pod.t
   packages/libmarc-record-perl/branches/upstream/current/t/sample1.lif
   packages/libmarc-record-perl/branches/upstream/current/t/sample1.usmarc
   packages/libmarc-record-perl/branches/upstream/current/t/sample100.lif
   packages/libmarc-record-perl/branches/upstream/current/t/sample20.lif
   packages/libmarc-record-perl/branches/upstream/current/t/title_proper.t
   packages/libmarc-record-perl/branches/upstream/current/t/title_proper.usmarc
   packages/libmarc-record-perl/branches/upstream/current/t/utf8.t
   packages/libmarc-record-perl/tags/
Log:
[svn-inject] Installing original source of libmarc-record-perl

Added: packages/libmarc-record-perl/branches/upstream/current/.releaserc
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/.releaserc	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/.releaserc	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,4 @@
+sf_group_id 1254
+sf_package_id 41528
+sf_user petdance
+cpan_user PETDANCE

Added: packages/libmarc-record-perl/branches/upstream/current/Changes
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/Changes	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/Changes	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,432 @@
+Revision history for Perl extension MARC::Record.
+
+1.38	March 16th, 2004
+
+        [ENHANCEMENTS]
+        - Performance tweak on MARC::Field->is_control_field() since it
+	  gets called a lot when cloning records.
+	- Performance tweak on MARC::Field->as_string(), since it gets
+	  called all the time.
+
+
+1.36    March 9th, 2004
+
+        [THINGS THAT MAY BREAK YOUR CODE]
+        - Renamed MARC::Field->is_control_tag() to is_control_field().
+
+        [FIXES]
+        - fixed SYNOPSIS in MARC::Batch to use constructor. Thanks Ed Sperr
+          New England College of Optometry.
+        - fixed reference to the tutorial in README. Thanks Stephen Graham,
+          London Business School.
+        - marcdump and marclint didn't recognize the -v flag.
+        - calls to MARC::Field::subfield() on a control field (tag < 010 ) 
+          will cause a fatal error, with a friendly message telling you 
+          to use data(). Similarly a call to data() on a field >= 010
+          will result in a friendly error telling you to use subfield().
+          Previously a warning was generated, and MARC::Field continued
+          along only to barf when it was unable to find an array ref in 
+          $self->{ _subfields }.
+
+        [ENHANCEMENTS]
+        - Finished documentation on all modules.  Updated t/pod-coverage.t
+          to keep us in line.
+
+1.34    December 16th, 2003
+        [ENHANCEMENTS]
+        - modified MARC::File::in() to allow passing in filehandles instead
+          of a filename. Useful in situations where you might have data
+          compressed on disk, and want to read from a decompression pipe.
+          This effects MARC::Batch of course as well, which has had its
+          documentation updated. 
+        - added t/85.fh.t to test new filehandle passing
+        - Incorrect filetypes passed in to the MARC::Batch constructor
+          now croak instead of die, so you can see where in your code it
+          was called.
+
+        [FIXES]
+        - etc/specs modified to correctly parse LCs docs to get the 250 $b 
+          properly. Thanks Bryan Baldus at Quality Books.
+        - new Lint.pm with 250 $b.
+        - MARC::Field now leaves alphabetic indicators as they are instead
+          of squashing to a space. Added test of new functionailty. Thanks 
+          Leif Andersson from Stockholms Universitet.
+        - MARC::File::USMARC no longer checks the validity of indicators
+          but leaves that up to MARC::Field (instead of having the check
+          twice).
+        - In MARC::Batch, the 'warn' elements weren't quoted.
+        - warnings_on and strict_on should now be respected.
+
+1.33    November 24th, 2003
+        MARC::Record should now run on Perls back to 5.00503!
+
+        [FIXES]
+        - fixed behavior in MARC::File::USMARC which was causing 
+          MARC::File::next() to return a partial record when the record
+          lacked a proper end of directory byte. RT #4474. Added regression
+          test t/82.baddir.t.
+        - we now warn on improper 010 tag access, not croak.
+        - fixed t/80.alphatag to test new MARC::Field::data() behavior
+        - doc fix to insert_field_grouped()
+        - tons of fixes and additions to MARC::Doc::Tutorial
+
+        [INTERNALS]
+        - Moved pl/ to bin/
+        - Split out the sfdocs stuff from Makefile.PL to bin/makesfdocs
+
+1.32    November 5th, 2003
+        [ENHANCEMENTS]
+        - added insert_ordered_fields(), thanks Leif Andersson.
+
+1.31    October 16th, 2003
+        [FIXES]
+        - set_leader_lengths() will now also set other MARC21 leader defaults.
+          Postitions 10-11, 20-23. For details on the defaults see:
+          http://www.loc.gov/marc/bibliographic/ecbdldrd.html 
+        - MARC::Batch::next() now accepts a filter function.
+        - Fixed an incorrect instruction in MARC::File::MicroLIF.
+        - marclint actually counts the number of records now.
+
+        [DOCUMENTATION]
+        - Added sample usage for insert_grouped_fields()
+        - Added example about subfield v to x conversion to tutorial.
+        - Documentation fix for MARC::Field::new().
+        - Fixed useage of MARC::Record::append_fields() in example 17
+          of the Tutorial.
+        - Added TODO test for utf8 handling (utf8.t)
+        - Fixed doc bug in MARC::File::USMARC (#2937)
+
+1.30    There is no 1.30.  We skipped a number.
+
+1.29    June 05, 2003   
+        [ENHANCEMENTS]
+        - MARC::Field::subfield() will return a list of all subfield
+          data when called in a list context...and only the first when
+          called in a scalar context. Also added a test 67.subfield.t
+          to test new functionality.
+
+1.28    May 23, 2003
+        [FIXES]
+        - Fixed MARC::Lint::check_record()'s checking for multiple 1XX tags.
+
+        - Fixed the docs for MARC::Lint and what errors it says it catches.
+
+1.27    May 22, 2003
+        [ENHANCMENTS]
+        - MARC::Field::update() by default will append any subfields which do
+          not exist in the record to the end of the field. Added tests to test
+          the new functionality to 60.update.t
+
+        [FIXES]
+        - Updated MARC::Lint to use the latest field/subfield designations from
+          the Library of Congress.  The data for MARC::Lint is now
+          automatically generated from the LC webpage.  Thanks to Colin
+          Campbell of Sirsi for the program that does the translation.
+          
+        - removed MARC::Lint check_260() since a subfield c is not 
+          mandatory (see RT #1565).
+
+1.26    May 8, 2003
+        [FIXES]
+        - Removed the "use warnings" in the couple of files that used it.
+          This obviates the need for the pre5006.patch file.
+
+        - Fixed some warnings for undefs.  These only turned up because
+          Test::Harness now has warnings turned on.
+
+1.25    April 22, 2003
+        NO CHANGES.  Just compensating for upload problems.
+
+1.24    April 22, 2003
+        [ENHANCEMENTS]
+        - expanded documentation for MARC::Field::as_string()
+
+        [FIX]
+        - modified MARC::File::USMARC to silently ignore any
+          combination of nulls, spaces, CRs, and LFs between
+          records.  (They're not allowed to be there, but some
+          vendors put them there anyway.)  With this change in
+          place you will now get the complete record--if the
+          inter-record garbage is the only problem--rather than
+          a record with (usually) zero fields.
+
+1.23    March 30, 2003
+        [FIX]
+        - removed t/85.utf8.t since it did not work
+        - removed bytes pragma usage since there is no feasible way to 
+          get MARC::Record to properly handle utf8 while it is using 
+          substr() so heavily. substr() uses character lengths, and 
+          directory positions measure lengths in bytes.
+        - updated pre5006.patch to only remove warnings pragma
+
+1.22    March 23, 2003
+        - added t/85.utf8.t to test record lengths work when utf8 data
+          is present in a record (regression test for RT #2165)
+        - warnings and bytes pragmas are now explicit
+        - added patch for removing warnings and bytes pragmas for Perl 
+          versions < 5.006
+        - updated README to include information about the patch
+        [FIX]
+        - removed warnings pragma from MARC/File/USMARC.pm and 
+          MARC/File/MicroLIF.pm since with warnings on, they generate quite 
+          a few warnings. These are mainly thrown by substr() when 
+          working with invalid MARC data.
+
+1.21    March 14, 2003
+        [ENHANCEMENTS]
+        - MARC::File::MicroLIF now reads the MicroLIF header from
+          the input file and makes it available via the header()
+          call.  If there is no header in the file, header()
+          will return undef.  Because the header is now taken
+          care of when the file is opened, 
+          MARC::File::MicroLIF::decode no longer supports skipping 
+          the file header.
+        - MARC:File::MicroLIF::decode now detects fields that
+          have no subfields (other than 001-009) rather than
+          passing them through to MARC::Field which croak()s.
+          When such a tag is encountered it is thrown away and
+          a warning added to the MARC::Record, rather than
+          allowing MARC::Field to croak().
+        - Updated data files used to test MARC::File::MicroLIF
+          so that they have a header.
+
+        [FIXES]
+        - MARC:File::MicroLIF now supports input files with any
+          type of line ending--\x0d, \x0a, or \x0d\0a.  A file no
+          longer has to have created on a system with compatible
+          line endings.
+        - Fixed invalid assumption in MARC::File::MicroLIF that
+          the MicroLIF header is supposed to begin with 'HDR'.
+
+1.20    February 26, 2003
+        [FIXES]
+        - Removed $VERSION from all modules except for MARC::Record
+          itself.
+        - Fixed a $VERSION problem in MARC::Record that prevented CPAN
+          from indexing the module correctly.
+        - Added more tests to the .t files.
+
+1.18    February 16, 2003
+        [ENHANCEMENTS]
+        - when MARC::Batch::no_strict() will allow you to read in 
+          records with invalid record lengths.
+        [FIXES]
+        - Changes to MARC::File::USMARC->decode() to fix the
+          rt.cpan.org bug #2017, "MARC::File::USMARC assumes 
+          that fields apper in directory order".
+        - Stricter checking on MARC directory entries.
+
+1.17    January 29, 2003
+        [ENHANCEMENTS]
+        - Added optional subfield string to MARC::Field::as_string().
+        - Added tag-based filtering on the USMARC constructors and 
+          passthru support for this in MARC::File::next().  Now you can 
+          select which tags get put into your MARC record, and not have
+          to pay the processing costs for fields you're going to ignore.
+        - title_proper() now returns the _a, _n and _p from the 245 in
+          whatever order they happen to appear.  Thanks to Anne Highsmith
+          for the change and the test data.
+        - Minor speed tweaks when checking for tags < 010
+        - Made the POD checking in t/99.pod.t work better.  Eventually I
+          need to make the same changes into Test::Pod.
+
+1.16    January 28, 2003
+        [ENHANCEMENTS]
+        - title() and author() now return empty strings, rather than
+          "<No XXX found>"
+        - Added title_proper(), edition() and publication_date()
+          convenience methods to MARC::Record.
+        - Added more unit tests.
+
+        [FIXES]
+        - marcdump utility will not output LDR when running under --field 
+          option, unless the LDR is specifically asked for.
+
+1.15    December 8, 2002
+        [FIXES]
+        - Ignores and warns about any completely empty subfields (i.e. not
+          even any indicators)
+        - MARC::File::USMARC::decode and MARC::File::MicroLIF::decode needed to
+          be able to be called in a variety of ways: $obj->decode(), 
+          MARC::File::MicroLIF->decode() and MARC::File::MicroLIF::decode()
+          Added t/081.decode.t to make sure things are shipshape.
+
+1.14    November 27, 2002
+        [FIXES]
+        - Fixed bug in MARC::File::USMARC that was set off by failure of 
+          t/75.warnings.t under ActivePerl and CygWin.
+
+1.13    November 26, 2002 
+        [ENHANCEMENTS]
+        - Moved new_from_usmarc() docs & code up right after new() to 
+          be more prominent. Thanks to Chris Biemesderfer for pointing this 
+          out.
+        - Added Chris Biemesderfer's section to the tutorial which 
+          discusses using MARC::Record with Net::Z3950.
+        - Yet another overhaul to MARC::Batch to allow for error trapping. 
+          Added the warnings_on() warnings_off() methods to turn on/off 
+          warnings on STDERR. Also added strict_on() and strict_off() to 
+          change the behavior of next() when an error is encountered.
+          Thanks to Rob Fox of Notre Dame for providing guidance on the type
+          of behavior that is really needed when batch processing.
+        - Added new tests for the improved handling of errors in MARC::Batch.
+        - Added new warnings and strict methods to MARC::Doc::Tutorial, also
+          added more use of MARC::Batch instead of using MARC::File directly.
+        - Improved docs on some functions to explicitly says what gets
+          returned from each function.
+
+1.12    October 9, 2002 
+        [ENHANCEMENTS]
+        - Makefile.PL will now generate PDF and HTML documentation for 
+          Sourceforge when asked to.
+        - Added a test for insert_field_grouped()
+        - Added subject heading example to Tutorial
+        - Fixed typo in docs for MARC::Record::append_fields()
+        - Added code (and tests) for allowing users to specify alphanumeric
+          tags. This is little used, but it's in the spec, and someone asked
+          for it (Notre Dame). Edits were to MARC::Field and to a lesser
+          extent MARC::Record.
+
+1.11    September 10, 2002
+        [ENHANCEMENTS]
+        - Added a 99.pod.t to check pod
+        - insert_fields_before(), insert_fields_after(), appned_fields(),
+          and insert_grouped_fields() now call croak() instead of _gripe
+          in order to help MARC::Record users to locate where their call 
+          is failing. Thanks to Jackie Shieh for pointing this out.
+        - MARC::Batch is now fault tolerant, in that it will store 
+          warnings about file format problems, but will not bomb out. 
+          The method MARC::Batch::warnings() can be used to get info
+          about what went wrong while reading a record, and users can
+          determine what to do. Thanks to Betsy Earl for solidifying the
+          need for this.
+
+1.10    August 30, 2002
+        [ENHANCEMENTS]
+        - Now runs under Perl 5.005.  All you people who have older Perls can
+          now share in the joy that is MARC::Record.
+        - Added warnings() and _warn methods to MARC::Batch, MARC::File to 
+          support warning collection and reporting.
+        - Added use bytes to MARC::File::USMARC so that calls to length() will
+          return actual bytes rather than characters if Unicode characters are
+          found in the data.  This only works if you're using 5.6.0+.
+
+        [FIXES]
+        - Modified MARC::File::USMARC::_next() to slurp in a record using
+          local $/ = 0x1D, rather than reading record length and then calling
+          read(). This will allow recovery from invalid leaders in batch 
+          reading. 
+
+1.00    July 3, 2002
+        - _gripe() fires off warnings instead of dying silently.
+        - MARC::File::USMARC no longer creates an error if it's and the
+          end of a file when it tries to next().
+        - Tests use the isa_ok() function to be more stringent in checking
+          return values from functions.
+
+0.94    June 10, 2002
+        - Added $MARC::Record::DEBUG
+        - Added --debug flag to marcdump to enable $MARC::Record::DEBUG
+        - Added 'Validation' section to MARC::Doc::Tutorial
+        - Added append_fields(), insert_fields_after(), 
+          insert_fields_before() and deprecated add_fields()
+        - Added test of new methods (t/60.insert.t)
+        - Updated MARC::Doc::Tutorial to reflect change in add_fields()
+
+0.93    May 21, 2002
+        - Added update() and replace_with() methods to MARC::Field
+        - Added more stuff to MARC::Doc::Tutorial
+        - Added MARC::Doc::Tutorial
+        - Changed method call description for as_usmarc() in MARC::Record.
+        - Removed IDEA for cloning in MARC::Record docs since it's been done.
+
+0.92    April 2, 2002
+        - Fixed marclint to use the new MARC::File object
+        - Added MARC::Record::new_from_usmarc() for backward compatibility.
+        This is in addition to the MARC::Record::as_usmarc() function.
+
+0.91    April 2, 2002
+        - Fixed a bad build: MARC::Batch wasn't included in the tarball.
+
+        - marcdump now takes a --lif parm to be able to dump MicroLIF
+        records.
+
+0.90    April 1, 2002
+        - Alpha version of what will become MARC::Record 1.00.
+
+        - MAJOR infrastructure changes.  Scripts WILL break.
+
+        - The file-handling has been removed from the MARC::Record class
+        and moved into its own MARC::File::* set of classes.
+
+        - First rudimentary MARC::Batch functionality.  This will make
+        it easy to handle bunches of files at once without having to
+        muck with what file you're on.
+
+        - Now fully embracing all the glory of 5.6+ Perl, such as the
+        "our" keyword and $fh filehandles.
+
+0.15    March 19, 2002
+        - Added clone() methods for MARC::Field and MARC::Record, so
+        you can make a copy of an existing record.  Plus, this acts
+        as a filter to create records that are subsets of another.
+        
+        - Added selective printing of fields in marcdump.  Now you
+        can do something like this:
+
+            marcdump myfile.marc --field=245 --field=1XX
+
+        and only get back the title and author fields
+
+0.14    March 7, 2002
+        - Added skip_from_file() to read and ignore a record.  It's the
+        same as next_from_file(), without the overhead of the parsing.
+
+0.13    November 18, 2001
+        - MARC::Lint now squawks if there are inappropriate control
+          characters in the data.
+
+0.12    November 13, 2001
+        - new_from_microlif() now allows underscores that are embedded in a
+          subfield, and ignores any HDR line that gets passed to it.
+
+0.11    November 12, 2001
+        - Added inbound microlif support.
+        - Added lif2marc program.
+
+0.10    September 27, 2001
+        - Correctly updates the base address in the leader.  Thanks to
+        Tim Wentz (twentz at mc.net) for finding & fixing.
+
+0.09    August 9, 2001
+        - Updated rules from "Understanding MARC" book.
+        - Added delete_field() method.
+
+0.08    May 25, 2001
+        - Added MARC::Record::title and ::author methods
+        - Added the marclint program.
+        - Added the rest of the rules for the 5XX tags forward.
+        - Made the modules compatible with Perl 5.004.  The exception
+          is MARC::Lint, which requires 5.005 because of the qr//
+          operator.
+        - as_string() methods now return raw strings, without any special
+          formatting.  To get the formatted strings from versions <=0.07,
+          use as_formatted().
+
+0.07    May 22, 2001
+        - Added the rudimentary MARC::Lint module.
+        - Added parms to marcdump program
+
+0.06    May 16, 2001
+        - Added marcdump program as demo and actual useful code
+
+0.05    May 16, 2001
+        - Created t/camel.t as the basis for a test suite. 
+        - Removed the MARC::Field::subfields() method
+        - Documentation cleanup.
+
+0.04    May 15, 2001
+        - Sped up the MARC::Record and MARC::Field constructors about 30%.
+
+0.01    Apr 20, 2001
+        - First version.

Added: packages/libmarc-record-perl/branches/upstream/current/MANIFEST
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/MANIFEST	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/MANIFEST	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,65 @@
+.releaserc
+Changes
+MANIFEST
+Makefile.PL
+META.yml
+README
+bin/marcdump
+bin/marclint
+etc/ecbdlist.html
+etc/specs
+lib/MARC/Batch.pm
+lib/MARC/Doc/Tutorial.pod
+lib/MARC/Field.pm
+lib/MARC/File/MicroLIF.pm
+lib/MARC/File.pm
+lib/MARC/File/USMARC.pm
+lib/MARC/Lint.pm
+lib/MARC/Record.pm
+t/00.load.t
+t/01.version.t
+t/10.camel.t
+t/11.astring.t
+t/12.ldr.t
+t/20.clone.t
+t/50.batch.t
+t/60.insert.t
+t/60.update.t
+t/61.append.t
+t/61.replace.t
+t/62.before.t
+t/63.after.t
+t/64.create.t
+t/66.grouped.t
+t/66.ordered.t
+t/70.croak.t
+t/75.warnings.t
+t/80.alphatag.t
+t/81.decode.t
+t/82.baddir.t
+t/83.indicators.t
+t/85.fh.t
+t/alphatag.lif
+t/baddir.usmarc
+t/badind.usmarc
+t/badldr.usmarc
+t/batch-filter.t
+t/camel.usmarc
+t/convenience.t
+t/decode-filter.t
+t/file-filter.t
+t/file-header.t
+t/lineendings-0a.lif
+t/lineendings-0d0a.lif
+t/lineendings-0d.lif
+t/lineendings.t
+t/lint.t
+t/pod.t
+t/pod-coverage.t
+t/sample100.lif
+t/sample1.lif
+t/sample1.usmarc
+t/sample20.lif
+t/title_proper.t
+t/title_proper.usmarc
+t/utf8.t

Added: packages/libmarc-record-perl/branches/upstream/current/META.yml
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/META.yml	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/META.yml	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,14 @@
+# http://module-build.sourceforge.net/META-spec.html
+#XXXXXXX This is a prototype!!!  It will change in the future!!! XXXXX#
+name:         MARC-Record
+version:      1.38
+version_from: lib/MARC/Record.pm
+installdirs:  site
+requires:
+    Carp:                          0
+    File::Find:                    0
+    File::Spec:                    0
+    Test::More:                    0
+
+distribution_type: module
+generated_by: ExtUtils::MakeMaker version 6.21

Added: packages/libmarc-record-perl/branches/upstream/current/Makefile.PL
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/Makefile.PL	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/Makefile.PL	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,36 @@
+use 5.005;
+use strict;
+use ExtUtils::MakeMaker;
+use File::Find;
+
+find( \&filecheck, "." );
+
+sub filecheck {
+	unlink if /~$/;	# Remove any vi backup files
+	die "Aborting: Swapfile $_ found" if /\.swp$/;
+}
+
+&WriteMakefile(
+	NAME		=> 'MARC::Record',
+	DISTNAME	=> 'MARC-Record',
+	VERSION_FROM	=> 'lib/MARC/Record.pm',
+	ABSTRACT_FROM	=> 'lib/MARC/Record.pm',
+	PMLIBDIRS	=> [ qw( lib/ ) ],
+	AUTHOR		=> 'Andy Lester <andy at petdance.com>',
+	PREREQ_PM	=> {
+			    'Test::More' => 0,
+			    'File::Spec' => 0,
+			    'File::Find' => 0,
+			    'Carp' => 0,
+			    },
+	EXE_FILES	=> [ qw( bin/marcdump bin/marclint ) ],
+	dist 		=> {
+			    COMPRESS => 'gzip -9f', 
+			    SUFFIX => 'gz',
+			    },
+	depend		=> { 
+			    Makefile => '$(VERSION_FROM)'
+			    },
+	clean		=> { FILES => 'MARC-Record-*' },
+	
+);

Added: packages/libmarc-record-perl/branches/upstream/current/README
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/README	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/README	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,65 @@
+MARC::Record and its family
+===========================
+
+SYNOPSIS
+
+The MARC::* series of modules create a simple object-oriented 
+abstraction of MARC record handling.  The files are:
+
+MARC::Doc::Tutorial
+    A tutorial explaining how to use MARC::Record.
+
+MARC::Record
+    The core class for representing a single MARC record.
+
+MARC::Field
+    Another core class for representing a single field in a record.
+
+MARC::Batch
+    The basic object for access to a batch of one or more MARC records.
+
+MARC::File
+    Base class for the MARC file.
+
+MARC::File::USMARC
+MARC::File::MicroLIF
+    Subclasses of MARC::File specific to the USMARC and MicroLIF formats
+
+MARC::Lint
+    Extension to check MARC records for validity.
+    
+
+INSTALLATION
+
+To install this module type the following:
+
+   perl Makefile.PL
+   make
+   make test
+   make install
+
+
+DEPENDENCIES
+
+If you would like to run MARC::Record under a Perl version that is earlier than 
+v5.006 there is a patch which you can apply prior to installing:
+
+    tar xvfz MARC-Record-1.XX.tar.gz
+    cd MARC-Record-1.XX
+    patch -p1 < pre5006.patch
+
+MARC::* requires Perl and Test::More for tests. Test::More comes standard in
+Perl 5.8.
+
+Tests are known to fail under Perl 5.6.0. We recommend you upgrade to a later
+version of Perl, or downgrade to an earlier one if you want to use
+MARC::Record. Perl 5.6.0 is known to have been an unstable release of Perl,
+which was quickly rectified in 5.6.1 and later releases.
+
+COPYRIGHT AND LICENCE
+
+This software is free software and may be distributed under the same
+terms as Perl itself .
+
+Copyright (C) 2001-2002 Andy Lester <marc at petdance.com>
+

Added: packages/libmarc-record-perl/branches/upstream/current/bin/marcdump
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/bin/marcdump	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/bin/marcdump	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,98 @@
+#!/usr/bin/perl -w
+
+=head1 NAME
+
+marcdump - MARC record dump utility
+
+=head1 SYNOPSIS
+
+B<marcdump> [options] file(s)
+
+=cut
+
+use strict;
+use integer;
+
+use MARC::File;
+use MARC::Record;
+use Getopt::Long;
+
+my $opt_print = 1;
+my $opt_quiet = 0;
+my $opt_stats = 1;
+my @opt_field = ();
+my $opt_help = 0;
+my $opt_lif = 0;
+
+my $rc =
+    GetOptions(
+	"version"   => sub { print "$0, using MARC::Record v$MARC::Record::VERSION\n"; exit 1; },
+	"print!"    => \$opt_print,
+	"lif!"	    => \$opt_lif,
+	"quiet"	    => \$opt_quiet,
+	"stats!"    => \$opt_stats,
+	"field=s"   => \@opt_field,
+	"debug!"    => \$MARC::Record::DEBUG,
+	"help"	    => \$opt_help,
+	);
+
+my @files = @ARGV;
+if ( $opt_help || !@files || !$rc ) {
+    print <DATA>;
+    exit 1;
+}
+
+my $wants_leader = grep { /LDR/ } @opt_field;
+
+my $class = $opt_lif ? "MARC::File::MicroLIF" : "MARC::File::USMARC";
+eval "require $class"; # Must be quoted to get path searching
+	
+my %counts;
+my %errors;
+for my $filename ( @files ) {
+	$counts{$filename} = 0;
+	$errors{$filename} = 0;
+
+	warn "$filename\n" unless $opt_quiet;
+
+	my $file = $class->in( $filename ) or die $MARC::File::ERROR;
+
+	while ( my $marc = $file->next() ) {
+		++$counts{$filename};
+		warn "$counts{$filename} records\n" if ( !$opt_quiet && ($counts{$filename} % 1000 == 0) );
+
+		if ( @opt_field ) {
+			$marc = $marc->clone( @opt_field );
+			$marc->leader('') unless $wants_leader;
+		}
+
+		print $marc->as_formatted, "\n\n" if $opt_print;
+		if ( $marc->warnings() ) {
+			++$errors{$filename};
+			print join( "\n", $marc->warnings(), "" );
+		}
+	} # while
+	$file->close();
+} # for 
+
+if ( $opt_stats ) {
+	print " Recs  Errs Filename\n";
+	print "----- ----- --------\n";
+	for my $key ( sort keys %counts ) {
+		printf( "%5d %5d %s\n", $counts{$key}, $errors{$key}, $key );
+	} # for
+} # if stats
+
+__END__
+Usage: marcdump [options] file(s)
+
+Options:
+    --[no]print	    Print a MicroLIF-style dump of each record
+    --lif	    Input files are MicroLIF, not USMARC
+    --field=spec    Specify a field spec to include.  There may be many.
+		    Examples:
+			--field=245 --field=1XX
+    --[no]quiet	    Print status messages
+    --[no]stats	    Print a statistical summary by file at the end
+    --version	    Print version information
+    --help	    Print this summary


Property changes on: packages/libmarc-record-perl/branches/upstream/current/bin/marcdump
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/bin/marclint
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/bin/marclint	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/bin/marclint	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,108 @@
+#!/usr/bin/perl -w
+
+=head1 NAME
+
+marclint - MARC record dump utility
+
+=head1 SYNOPSIS
+
+B<marclint> [options] file(s)
+
+=over 4
+
+=item options
+
+=over 4
+
+=item --help
+
+Print a summary of commands
+
+=item --[no]stats
+
+Print a statistical summary by file at the end.  (Default: on)
+
+=back
+
+=back
+
+=cut
+
+use strict;
+use integer;
+
+use MARC::File::USMARC;
+use MARC::Lint;
+use Getopt::Long;
+
+use constant USAGE => <<"END";
+Usage: marclint [options] file(s)
+    options
+        --help
+	    Print a summary of commands
+	--version
+	    Print version
+	--[no]quiet
+	    Suppress status messages
+        --[no]stats
+            Print a statistical summary by file at the end
+END
+
+my $stats = 1;
+my $help = 0;
+my $quiet = 0;
+
+my $rc = GetOptions(
+	"stats!" => \$stats,
+	"quiet!" => \$quiet,
+	"help"   => \$help,
+	"version"   => sub { print "$0, using MARC::Record v$MARC::Record::VERSION\n"; exit 1; },
+	);
+
+my @files = @ARGV;
+
+die USAGE if $help or (not $rc) or (@files == 0);
+
+my $linter = new MARC::Lint;
+my %counts;
+my %errors;
+
+for my $filename ( @files ) {
+	$counts{$filename} = 0;
+	$errors{$filename} = 0;
+
+	my $file = MARC::File::USMARC->in( $filename ) or die $MARC::File::ERROR;
+	warn "$filename\n" unless $quiet;
+
+	while ( my $marc = $file->next() ) {
+		if ( not $marc ) {
+			warn $MARC::Record::ERROR;
+			++$errors{$filename};
+		} else {
+			++$counts{$filename};
+		}
+
+	        $linter->check_record( $marc );
+
+		if ( $linter->warnings ) {
+			print join( "\n",
+				$marc->title,
+				$linter->warnings,
+				"",
+				"",
+			);
+			++$errors{$filename};
+		}
+	} # while
+	$file->close();
+} # for 
+
+if ( $stats ) {
+	print "\n\n";
+	print " Recs  Errs Filename\n";
+	print "----- ----- --------\n";
+	for my $key ( sort keys %counts ) {
+		printf( "%5d %5d %s\n", $counts{$key}, $errors{$key}, $key );
+	} # for
+} # if stats
+


Property changes on: packages/libmarc-record-perl/branches/upstream/current/bin/marclint
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/etc/ecbdlist.html
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/etc/ecbdlist.html	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/etc/ecbdlist.html	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,4152 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+                        "http://www.w3.org/TR/html40/loose.dtd">
+<html>
+<head>
+<title>MARC 21 Format for Bibliographic Data: Field List</title>
+<base href="http://www.loc.gov/marc/bibliographic/ecbdlist.html">
+<meta name="description" content="This document is the homepage
+ for the list of data elements from the MARC 21 Bibliographic
+format/">
+<meta name="keywords" content="MARC 21 bibliographic format list
+of elements">
+</head>
+<body bgcolor="#ffffff">
+<h1 align=center><em>MARC 21 FORMAT FOR BIBLIOGRAPHIC DATA: FIELD LIST</em></h1>
+<p align=center>1999 English Edition<br>
+  Update No. 1 (October 2000)<br>
+  Update No. 2 (October 2001)<br>
+  Update No. 3 (October 2002)</p>
+<h2 align=center>Network Development and MARC Standards
+ Office</h2>
+<p>This document lists all valid and obsolete data elements that may appear in 
+  MARC 21 bibliographic records. It is intended to meet the need for a simple 
+  data element list to support MARC system development and online validation of 
+  MARC data elements. This listing does not include any descriptions or examples 
+  of MARC data elements. Descriptions and examples can be found in the <em><a href="http://www.loc.gov/marc/bibliographic/">MARC 
+  21 Concise Bibliographic Format</a></em>.</p>
+<hr>
+<pre>--Leader and Directory--<br>
+  LEADER<br>     Character Positions<br>     00-04 - Logical record length<br>     05 - Record status<br>         a - Increase in encoding level
+         c - Corrected or revised<br>         d - Deleted<br>         n - New<br>         p - Increase in encoding level from prepublication<br>      06 - Type of record<br>         a - Language material<br>         b - Archival and manuscripts control [OBSOLETE]<br>         c - Notated music<br>         d - Manuscript notated music<br>         e - Cartographic material<br>         f - Manuscript cartographic material<br>         g - Projected medium<br>         h - Microform publications [OBSOLETE]<br>         i - Nonmusical sound recording<br>         j - Musical sound recording<br>         k - Two-dimensional nonprojectable graphic<br>         m - Computer file<br>         n - Special instructional material [OBSOLETE]<br>         o - Kit<br>         p - Mixed material<br>         r - Three-dimensional artifact or naturally occurring object<br>         t - Manuscript language material<br>      07 - Bibliographic level<br>         a - Monographic component part<br>         b - Serial component part<br>         c - Collection<br>         d - Subunit<br>         i - Integrating resource<br>         m - Monograph/item<br>         s - Serial<br>      08 - Type of control<br>         # - No specific type<br>         a - Archival<br>      09 - Character coding scheme<br>         # - MARC-8<br>         a - UCS/Unicode<br>      10 - Indicator count<br>      11 - Subfield code count<br>      12-16 - Base address of data<br>      17 - Encoding level<br>         # - Full level<br>         1 - Full level, material not examined<br>         2 - Less-than-full level, material not examined<br>         3 - Abbreviated level<br>         4 - Core level<br>         5 - Partial (preliminary) level<br>         7 - Minimal level<br>         8 - Prepublication level<br>         u - Unknown<br>         z - Not applicable<br>      18 - Descriptive cataloging form<br>         # - Non-ISBD<br>         a - AACR 2<br>         i - ISBD<br>         p - Partial ISBD (BK) [OBSOLETE]<br>         r - Provisional (VM MP MU) [OBSOLETE]<br>         u - Unknown<br>      19 - Linked record requirement<br>         # - Related record not required<br>         r - Related record required<br>      20-23 - Entry map<br>      20 - Length of the length-of-field portion<br>      21 - Length of the starting-character-position portion<br>      22 - Length of the implementation-defined portion<br>      23 - Undefined Entry map character position
+DIRECTORY<br>   Character Positions<br>      00-02 - Tag<br>      03-06 - Field length<br>      07-11 - Starting character position
+
+--Control Fields (001-006)--<br>  
+001 - CONTROL NUMBER (NR)<br>  
+003 - CONTROL NUMBER IDENTIFIER (NR)<br>  
+005 - DATE AND TIME OF LATEST TRANSACTION (NR)<br>  
+006 - FIXED-LENGTH DATA ELEMENTS--ADDITIONAL MATERIAL CHARACTERISTICS<br>        --GENERAL INFORMATION (R)<br>  006--BOOKS<br>   Character Positions<br>      00 - Form of material<br>         a - Language material<br>         t - Manuscript language material<br>      01-04 - Illustrations<br>      05 - Target audience<br>      06 - Form of item<br>      07-10 - Nature of contents<br>      11 - Government publication<br>      12 - Conference publication<br>      13 - Festschrift<br>      14 - Index<br>      15 - Undefined<br>      16 - Literary form<br>      17 - Biography<br>  006--COMPUTER FILES/ELECTRONIC RESOURCES<br>   Character Positions<br>      00 - Form of material<br>         m - Computer file/Electronic resource<br>      01-04 - Undefined<br>      05 - Target audience<br>      06-08 - Undefined<br>      09 - Type of computer file<br>      10 - Undefined<br>      11 - Government publication<br>      12-17 - Undefined<br>  006--MAPS<br>   Character Positions<br>      00 - Form of material<br>         e - Cartographic material<br>         f - Manuscript cartographic material<br>      01-04 - Relief<br>      05-06 - Projection<br>      07 - Undefined<br>      07 - Prime meridian [OBSOLETE]<br>      08 - Type of cartographic material<br>      09-10 - Undefined<br>      11 - Government publication<br>      12 - Form of item<br>      12 - Undefined [OBSOLETE]<br>      13 - Undefined<br>      14 - Index<br>      15 - Undefined<br>      16-17 - Special format characteristics<br>  006--MIXED MATERIALS<br>   Character Positions<br>      00 - Form of material<br>         p - Mixed material<br>      01-05 - Undefined<br>      06 - Form of item<br>      07-17 - Undefined<br>  006--MUSIC<br>   Character Positions<br>      00 - Form of material<br>         c - Notated music<br>         d - Manuscript notated music<br>         i - Nonmusical sound recording<br>         j - Musical sound recording<br>      01-02 - Form of composition<br>      03 - Format of music<br>      04 - Music parts<br>      05 - Target audience<br>      06 - Form of item<br>      07-12 - Accompanying matter<br>      13-14 - Literary text for sound recordings<br>      15 - Undefined
+      16 - Transposition and arrangement
+      17 - Undefined<br>  006--CONTINUING RESOURCES<br>   Character Positions<br>      00 - Form of material<br>         s - Serial/Integrating resource<br>      01 - Frequency<br>      02 - Regularity<br>      03 - ISSN center<br>      04 - Type of continuing resource<br>      05 - Form of original item<br>      06 - Form of item<br>      07 - Nature of entire work<br>      08-10 - Nature of contents<br>      11 - Government publication<br>      12 - Conference publication<br>      13-15 - Undefined<br>      16 - Original alphabet or script of title<br>      17 - Entry convention<br>  006--VISUAL MATERIALS<br>   Character Positions<br>      00 - Form of material<br>         g - Projected medium<br>         k - Two-dimensional nonprojectable graphic<br>         o - Kit<br>         r - Three-dimensional artifact or naturally occurring object<br>      01-03 - Running time<br>      04 - Undefined<br>      05 - Target audience<br>      06-10 - Undefined<br>      06-10 - Accompanying matter [OBSOLETE]<br>      11 - Government publication<br>      12 - Form of item<br>      12 - Undefined [OBSOLETE]<br>      13-15 - Undefined<br>      16 - Type of visual material<br>      17 - Technique<br><br>--Control Field 007--<br>  007 - PHYSICAL DESCRIPTION FIXED FIELD
+        --GENERAL INFORMATION (R)<br>  007--MAP<br>   Character Positions<br>      00 - Category of material<br>         a - Map<br>      01 - Specific material designation<br>         d - Atlas<br>         g - Diagram<br>         j - Map<br>         k - Profile<br>         q - Model<br>         r - Remote-sensing image<br>         s - Section<br>         u - Unspecified<br>         y - View<br>         z - Other<br>         | - No attempt to code<br>      02 - Undefined<br>      03 - Color<br>         a - One color<br>         c - Multicolored<br>         | - No attempt to code<br>      04 - Physical medium<br>         a - Paper<br>         b - Wood<br>         c - Stone<br>         d - Metal<br>         e - Synthetic<br>         f - Skin<br>         g - Textile<br>         j - Glass<br>         p - Plaster<br>         q - Flexible base photographic, positive<br>         r - Flexible base photographic, negative<br>         s - Non-flexible base photographic, positive<br>         t - Non-flexible base photographic, negative<br>         u - Unknown<br>         y - Other photographic medium<br>         z - Other<br>         | - No attempt to code<br>      05 - Type of reproduction<br>         f - Facsimile<br>         n - Not applicable<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      06 - Production/reproduction details<br>         a - Photocopy, blueline print<br>         b - Photocopy<br>         c - Pre-production<br>         d - Film<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      07 - Positive/negative aspect<br>         a - Positive<br>         b - Negative<br>         m - Mixed polarity<br>         n - Not applicable<br>         | - No attempt to code<br>  007--ELECTRONIC RESOURCE<br>   Character Positions<br>      00 - Category of material<br>         c - Computer file<br>      01 - Specific material designation<br>         a - Tape cartridge<br>         b - Chip cartridge<br>         c - Computer optical disc cartridge<br>         f - Tape cassette<br>         h - Tape reel<br>         j - Magnetic disk<br>         m - Magneto-optical disc<br>         o - Optical disc<br>         r - Remote<br>         u - Unspecified<br>         z - Other<br>         | - No attempt to code<br>      02 - Undefined<br>      03 - Color<br>         a - One color<br>         b - Black-and-white<br>         c - Multicolored<br>         g - Gray scale<br>         m - Mixed<br>         n - Not applicable<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      04 - Dimensions<br>         a - 3 1/2 in.<br>         e - 12 in.<br>         g - 4 3/4 in. or 12 cm.<br>         i - 1 1/8 x 2 3/8 in.<br>         j - 3 7/8 x 2 1/2 in.<br>         n - Not applicable<br>         o - 5 1/4 in.<br>         u - Unknown<br>         v - 8 in.<br>         z - Other<br>         | - No attempt to code<br>      05 - Sound<br>         # - No sound (silent)<br>         a - Sound on medium<br>         u - Unknown<br>         | - No attempt to code<br>      06-08 - Image bit depth<br>         001-999 - Exact bit depth<br>         mmm - Multiple<br>         nnn - Not applicable<br>         --- - Unknown<br>         ||| - No attempt to code<br>      09 - File formats<br>         a - One<br>         m - Multiple<br>         u - Unknown<br>         | - No attempt to code<br>      10 - Quality assurance target(s)<br>         a - Absent<br>         n - Not applicable<br>         p - Present<br>         u - Unknown<br>         | - No attempt to code<br>      11 - Antecedent/source<br>         a - File reproduced from original<br>         b - File reproduced from microform<br>         c - File reproduced from an electronic resource<br>         d - File reproduced from an intermediate 
+            (not microform)<br>         m - Mixed<br>         n - Not applicable<br>         u - Unknown<br>         | - No attempt to code<br>      12 - Level of compression<br>         a - Uncompressed<br>         b - Lossless<br>         d - Lossy<br>         m - Mixed<br>         u - Unknown<br>         | - No attempt to code<br>      13 - Reformatting quality<br>         a - Access<br>         n - Not applicable<br>         p - Preservation<br>         r - Replacement<br>         u - Unknown<br>         | - No attempt to code<br>  007--GLOBE<br>   Character Positions<br>      00 - Category of material<br>         d - Globe<br>      01 - Specific material designation<br>         a - Celestial globe<br>         b - Planetary or lunar globe<br>         c - Terrestrial globe<br>         e - Earth moon globe<br>         u - Unspecified<br>         z - Other<br>         | - No attempt to code<br>      02 - Undefined<br>      03 - Color<br>         a - One color<br>         c - Multicolored<br>         | - No attempt to code<br>      04 - Physical medium<br>         a - Paper<br>         b - Wood<br>         c - Stone<br>         d - Metal<br>         e - Synthetic<br>         f - Skin<br>         g - Textile<br>         p - Plaster<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      05 - Type of reproduction<br>         f - Facsimile<br>         n - Not applicable<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>  007--TACTILE MATERIAL<br>   Character Positions<br>      00 - Category of material<br>         f - Tactile material<br>      01 - Specific material designation<br>         a - Moon<br>         b - Braille<br>         c - Combination<br>         d - Tactile, with no writing system<br>         u - Unspecified<br>         z - Other<br>         | - No attempt to code<br>      02 - Undefined<br>      03-04 - Class of braille writing<br>         # - No specified class of braille writing<br>         a - Literary braille<br>         b - Format code braille<br>         c - Mathematics and scientific braille<br>         d - Computer braille<br>         e - Music braille<br>         m - Multiple braille types<br>         n - Not applicable<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      05 - Level of contraction<br>         a - Uncontracted<br>         b - Contracted<br>         m - Combination<br>         n - Not applicable<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      06-08 - Braille music format<br>         # - No specified braille music format<br>         a - Bar over bar<br>         b - Bar by bar<br>         c - Line over line<br>         d - Paragraph<br>         e - Single line<br>         f - Section by section<br>         g - Line by line<br>         h - Open score<br>         i - Spanner short form scoring<br>         j - Short form scoring<br>         k - Outline<br>         l - Vertical score<br>         n - Not applicable<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      09 - Specific physical characteristics<br>         a - Print/braille<br>         b - Jumbo or enlarged braille<br>         n - Not applicable<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>  007--PROJECTED GRAPHIC<br>   Character Positions<br>      00 - Category of material<br>         g - Projected graphic<br>      01 - Specific material designation<br>         c - Filmstrip cartridge<br>         d - Filmslip<br>         f - Other filmstrip type<br>         o - Filmstrip roll<br>         s - Slide<br>         t - Transparency<br>         u - Unspecified<br>         z - Other<br>         | - No attempt to code<br>      02 - Undefined<br>      03 - Color<br>         a - One color<br>         b - Black-and-white<br>         c - Multicolored<br>         h - Hand colored<br>         m - Mixed<br>         n - Not applicable<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      04 - Base of emulsion<br>         d - Glass<br>         e - Synthetic<br>         j - Safety film<br>         k - Film base, other than safety film<br>         m - Mixed collection<br>         o - Paper<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      05 - Sound on medium or separate<br>         # - No sound (silent)<br>         a - Sound on medium<br>         b - Sound separate from medium<br>         u - Unknown<br>         | - No attempt to code<br>      06 - Medium for sound<br>         # - No sound (silent)<br>         a - Optical sound track on motion picture film<br>         b - Magnetic sound track on motion picture film<br>         c - Magnetic audio tape in cartridge<br>         d - Sound disc<br>         e - Magnetic audio tape on reel<br>         f - Magnetic audio tape in cassette<br>         g - Optical and magnetic sound track on<br>             motion picture film<br>         h - Videotape<br>         i - Videodisc<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      07 - Dimensions<br>         a - Standard 8 mm.<br>         b - Super 8 mm./single 8 mm.<br>         c - 9.5 mm.<br>         d - 16 mm.<br>         e - 28 mm.<br>         f - 35 mm.<br>         g - 70 mm.<br>         j - 2x2 in. or 5x5 cm.<br>         k - 2 1/4 x 2 1/4 in. or 6x6 cm.<br>         s - 4x5 in. or 10x13 cm. <br>         t - 5x7 in. or 13x18 cm.<br>         u - Unknown<br>         v - 8x10 in. or 21x26 cm.<br>         w - 9x9 in. or 23x23 cm.<br>         x - 10x10 in. or 26x26 cm.<br>         y - 7x7 in. or 18x18 cm.<br>         z - Other<br>         | - No attempt to code<br>      08 - Secondary support material<br>         # - No secondary support<br>         c - Cardboard<br>         d - Glass<br>         e - Synthetic<br>         h - Metal<br>         j - Metal and glass<br>         k - Synthetic and glass<br>         m - Mixed collection<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>  007--MICROFORM<br>   Character Positions<br>      00 - Category of material<br>         h - Microform<br>      01 - Specific material designation<br>         a - Aperture card<br>         b - Microfilm cartridge<br>         c - Microfilm cassette<br>         d - Microfilm reel<br>         e - Microfiche<br>         f - Microfiche cassette<br>         g - Microopaque<br>         u - Unspecified<br>         z - Other<br>         | - No attempt to code<br>      02 - Undefined<br>      03 - Positive/negative aspect<br>         a - Positive<br>         b - Negative<br>         m - Mixed polarity<br>         u - Unknown<br>         | - No attempt to code<br>      04 - Dimensions<br>         a - 8 mm.<br>         d - 16 mm.<br>         f - 35 mm.<br>         g - 70 mm.<br>         h - 105 mm.<br>         l - 3x5 in. or 8x13 cm.<br>         m - 4x6 in. or 11x15 cm.<br>         o - 6x9 in. or 16x23 cm.<br>         p - 3 1/4 x 7 3/8 in. or 9x19 cm.<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      05 - Reduction ratio range<br>         a - Low reduction<br>         b - Normal reduction<br>         c - High reduction<br>         d - Very high reduction<br>         e - Ultra high reduction<br>         u - Unknown<br>         v - Reduction rate varies<br>         | - No attempt to code<br>      06-08 - Reduction ratio<br>      09 - Color<br>         b - Black-and-white (or monochrome)<br>         c - Multicolored<br>         m - Mixed<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      10 - Emulsion on film<br>         a - Silver halide<br>         b - Diazo<br>         c - Vesicular<br>         m - Mixed emulsion<br>         n - Not applicable<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      11 - Generation<br>         a - First generation (master)<br>         b - Printing master<br>         c - Service copy<br>         m - Mixed generation<br>         u - Unknown<br>         | - No attempt to code<br>      12 - Base of film<br>         a - Safety base, undetermined<br>         c - Safety base, acetate undetermined<br>         d - Safety base, diacetate<br>         p - Safety base, polyester<br>         r - Safety base, mixed<br>         t - Safety base, triacetate<br>         i - Nitrate base<br>         m - Mixed base (nitrate and safety)<br>         n - Not applicable<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>  007--NONPROJECTED GRAPHIC<br>   Character Positions<br>      00 - Category of material<br>         k - Nonprojected graphic<br>      01 - Specific material designation<br>         c - Collage<br>         d - Drawing<br>         e - Painting<br>         f - Photomechanical print<br>         g - Photonegative<br>         h - Photoprint<br>         i - Picture<br>         j - Print<br>         l - Technical drawing<br>         n - Chart<br>         o - Flash card<br>         u - Unspecified<br>         z - Other<br>         | - No attempt to code<br>      02 - Undefined<br>      03 - Color<br>         a - One color<br>         b - Black-and-white<br>         c - Multicolored<br>         h - Hand colored<br>         m - Mixed<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      04 - Primary support material<br>         a - Canvas<br>         b - Bristol board<br>         c - Cardboard/illustration board<br>         d - Glass<br>         e - Synthetic<br>         f - Skin<br>         g - Textile<br>         h - Metal<br>         m - Mixed collection<br>         o - Paper<br>         p - Plaster<br>         q - Hardboard<br>         r - Porcelain<br>         s - Stone<br>         t - Wood<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      05 - Secondary support material<br>         # - No secondary support<br>         a - Canvas<br>         b - Bristol board<br>         c - Cardboard/illustration board<br>         d - Glass<br>         e - Synthetic<br>         f - Skin<br>         g - Textile<br>         h - Metal<br>         m - Mixed collection<br>         o - Paper<br>         p - Plaster<br>         q - Hardboard<br>         r - Porcelain<br>         s - Stone<br>         t - Wood<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>  007--MOTION PICTURE<br>   Character Positions<br>      00 - Category of material<br>         m - Motion picture<br>      01 - Specific material designation<br>         c - Film cartridge<br>         f - Film cassette<br>         r - Film reel<br>         u - Unspecified<br>         z - Other<br>         | - No attempt to code<br>      02 - Undefined<br>      03 - Color<br>         b - Black-and-white<br>         c - Multicolored<br>         h - Hand colored<br>         m - Mixed<br>         n - Not applicable<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      04 - Motion picture presentation format<br>         a - Standard sound aperture (reduced frame)<br>         b - Nonanamorphic (wide-screen)<br>         c - 3D<br>         d - Anamorphic (wide-screen)<br>         e - Other wide-screen format<br>         f - Standard silent aperture (full frame)<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      05 - Sound on medium or separate<br>         # - No sound (silent)<br>         a - Sound on medium<br>         b - Sound separate from medium<br>         u - Unknown<br>         | - No attempt to code<br>      06 - Medium for sound<br>         # - No sound (silent)<br>         a - Optical sound track on motion picture film<br>         b - Magnetic sound track on motion picture film<br>         c - Magnetic audio tape in cartridge<br>         d - Sound disc<br>         e - Magnetic audio tape on reel <br>         f - Magnetic audio tape in cassette<br>         g - Optical and magnetic sound track on<br>             motion picture film<br>         h - Videotape<br>         i - Videodisc<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      07 - Dimensions<br>         a - Standard 8 mm.<br>         b - Super 8 mm./single 8 mm.<br>         c - 9.5 mm.<br>         d - 16 mm.<br>         e - 28 mm.<br>         f - 35 mm.<br>         g - 70 mm.<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      08 - Configuration of playback channels<br>         k - Mixed<br>         m - Monaural<br>         n - Not applicable<br>         q - Quadraphonic, multichannel, or surround<br>         s - Stereophonic<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      09 - Production elements<br>         a - Workprint<br>         b - Trims<br>         c - Outtakes<br>         d - Rushes<br>         e - Mixing tracks<br>         f - Title bands/intertitle rolls<br>         g - Production rolls<br>         n - Not applicable<br>         z - Other<br>         | - No attempt to code<br>      10 - Positive/negative aspect<br>         a - Positive<br>         b - Negative<br>         n - Not applicable<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      11 - Generation<br>         d - Duplicate<br>         e - Master<br>         o - Original<br>         r - Reference print/viewing copy<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      12 - Base of film<br>         a - Safety base, undetermined<br>         c - Safety base, acetate undetermined<br>         d - Safety base, diacetate<br>         p - Safety base, polyester<br>         r - Safety base, mixed<br>         t - Safety base, triacetate<br>         i - Nitrate base<br>         m - Mixed base (nitrate and safety)<br>         n - Not applicable<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      13 - Refined categories of color<br>         a - 3 layer color<br>         b - 2 color, single strip<br>         c - Undetermined 2 color<br>         d - Undetermined 3 color <br>         e - 3 strip color<br>         f - 2 strip color<br>         g - Red strip<br>         h - Blue or green strip<br>         i - Cyan strip<br>         j - Magenta strip<br>         k - Yellow strip<br>         l - S E N 2<br>         m - S E N 3<br>         n - Not applicable<br>         p - Sepia tone<br>         q - Other tone<br>         r - Tint<br>         s - Tinted and toned<br>         t - Stencil color<br>         u - Unknown<br>         v - Hand colored<br>         z - Other<br>         | - No attempt to code<br>      14 - Kind of color stock or print<br>         a - Imbibition dye transfer prints<br>         b - Three layer stock<br>         c - Three layer stock, low fade<br>         d - Duplitized stock<br>         n - Not applicable<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      15 - Deterioration stage<br>         a - None apparent<br>         b - Nitrate: suspicious odor<br>         c - Nitrate: pungent odor<br>         d - Nitrate: brownish, discoloration, fading, dusty<br>         e - Nitrate: sticky<br>         f - Nitrate: frothy, bubbles, blisters 
+         g - Nitrate: congealed<br>         h - Nitrate: powder<br>         k - Non-nitrate: detectable deterioration (diacetate odor)<br>         l - Non-nitrate: advanced deterioration<br>         m - Non-nitrate: disaster<br>         | - No attempt to code<br>      16 - Completeness<br>         c - Complete<br>         i - Incomplete<br>         n - Not applicable<br>         u - Unknown<br>         | - No attempt to code<br>      17-22 - Film inspection date<br>  007--KIT<br>   Character Positions<br>      00 - Category of material<br>         o - Kit<br>      01 - Specific material designation<br>         u - Unspecified<br>         | - No attempt to code<br>  007--NOTATED MUSIC<br>   Character Positions<br>      00 - Category of material<br>         q - Notated music<br>      01 - Specific material designation<br>         u - Unspecified<br>         | - No attempt to code<br>  007--REMOTE-SENSING IMAGE<br>   Character Positions<br>      00 - Category of material<br>         r - Remote-sensing image<br>      01 - Specific material designation<br>         u - Unspecified<br>         | - No attempt to code<br>      02 - Undefined<br>      03 - Altitude of sensor<br>         a - Surface<br>         b - Airborne<br>         c - Spaceborne<br>         n - Not applicable<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      04 - Attitude of sensor<br>         a - Low oblique<br>         b - High oblique<br>         c - Vertical<br>         n - Not applicable<br>         u - Unknown<br>         | - No attempt to code<br>      05 - Cloud cover<br>         0 - 0-9%<br>         1 - 10-19%<br>         2 - 20-29%<br>         3 - 30-39%<br>         4 - 40-49%<br>         5 - 50-59%<br>         6 - 60-69%<br>         7 - 70-79%<br>         8 - 80-89%<br>         9 - 90-100%<br>         n - Not applicable<br>         u - Unknown<br>         | - No attempt to code<br>      06 - Platform construction type<br>         a - Balloon<br>         b - Aircraft--low altitude<br>         c - Aircraft--medium altitude<br>         d - Aircraft--high altitude<br>         e - Manned spacecraft<br>         f - Unmanned spacecraft<br>         g - Land-based remote-sensing device<br>         h - Water surface-based remote-sensing device<br>         i - Submersible remote-sensing device<br>         n - Not applicable<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      07 - Platform use category<br>         a - Meteorological<br>         b - Surface observing<br>         c - Space observing<br>         m - Mixed uses<br>         n - Not applicable<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      08 - Sensor type<br>         a - Active<br>         b - Passive<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      09-10 - Data type<br>         aa - Visible light<br>         da - Near infrared<br>         db - Middle infrared<br>         dc - Far infrared<br>         dd - Thermal infrared<br>         de - Shortwave infrared (SWIR)<br>         df - Reflective infrared<br>         dv - Combinations<br>         dz - Other infrared data <br>         ga - Sidelooking airborne radar (SLAR)<br>         gb - Synthetic aperture radar (SAR)-Single frequency<br>         gc - SAR-multi-frequency (multichannel)<br>         gd - SAR-like polarization<br>         ge - SAR-cross polarization<br>         gf - Infometric SAR<br>         gg - polarmetric SAR<br>         gu - Passive microwave mapping<br>         gz - Other microwave data<br>         ja - Far ultraviolet<br>         jb - Middle ultraviolet<br>         jc - Near ultraviolet<br>         jv - Ultraviolet combinations<br>         jz - Other ultraviolet data<br>         ma - Multi-spectral, multidata<br>         mb - Multi-temporal<br>         mm - Combination of various data types<br>         nn - Not applicable<br>         pa - Sonar--water depth<br>         pb - Sonar--bottom topography images, sidescan<br>         pc - Sonar--bottom topography, near surface<br>         pd - Sonar--bottom topography, near bottom<br>         pe - Seismic surveys<br>         pz - Other acoustical data<br>         ra - Gravity anomalies (general)<br>         rb - Free-air<br>         rc - Bouger<br>         rd - Isostatic<br>         sa - Magnetic field<br>         ta - radiometric surveys<br>         uu - Unknown<br>         zz - Other<br>         || - No attempt to code<br>  007--SOUND RECORDING<br>   Character Positions<br>      00 - Category of material<br>         s - Sound recording<br>      01 - Specific material designation<br>         d - Sound disc<br>         e - Cylinder<br>         g - Sound cartridge<br>         i - Sound-track film<br>         q - Roll<br>         s - Sound cassette<br>         t - Sound-tape reel<br>         u - Unspecified<br>         w - Wire recording<br>         z - Other<br>         | - No attempt to code<br>      02 - Undefined<br>      03 - Speed<br>         a - 16 rpm<br>         b - 33 1/3 rpm<br>         c - 45 rpm<br>         d - 78 rpm<br>         e - 8 rpm<br>         f - 1.4 m. per sec.<br>         h - 120 rpm<br>         i - 160 rpm<br>         k - 15/16 ips<br>         l - 1 7/8 ips<br>         m - 3 3/4 ips<br>         o - 7 1/2 ips<br>         p - 15 ips<br>         r - 30 ips<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      04 - Configuration of playback channels<br>         m - Monaural<br>         q - Quadraphonic<br>         s - Stereophonic<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      05 - Groove width/groove pitch<br>         m - Microgroove/fine<br>         n - Not applicable<br>         s - Coarse/standard<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      06 - Dimensions<br>         a - 3 in.<br>         b - 5 in.<br>         c - 7 in.<br>         d - 10 in.<br>         e - 12 in.<br>         f - 16 in.<br>         g - 4 3/4 in. or 12 cm.<br>         j - 3 7/8 x 2 1/2 in.<br>         o - 5 1/4 x 3 7/8 in.<br>         n - Not applicable<br>         s - 2 3/4 x 4 in.<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      07 - Tape width<br>         l - 1/8 in.<br>         m - 1/4 in.<br>         n - Not applicable<br>         o - 1/2 in.<br>         p - 1 in.<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      08 - Tape configuration<br>         a - Full (1) track<br>         b - Half (2) track<br>         c - Quarter (4) track<br>         d - Eight track<br>         e - Twelve track<br>         f - Sixteen track<br>         n - Not applicable<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      09 - Kind of disc, cylinder or tape<br>         a - Master tape<br>         b - Tape duplication master<br>         d - Disc master (negative)<br>         i - Instantaneous (recorded on the spot)<br>         m - Mass produced<br>         n - Not applicable<br>         r - Mother (positive)<br>         s - Stamper (negative)<br>         t - Test pressing<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      10 - Kind of material<br>         a - Lacquer coating
+         b - Cellulose nitrate
+         c - Acetate tape with ferrous oxide
+         g - Glass with lacquer
+         i - Aluminum with lacquer
+         r - Paper with lacquer or ferrous oxide<br>         l - Metal<br>         m - Plastic with metal<br>         n - Not applicable [OBSOLETE]<br>         p - Plastic<br>         s - Shellac<br>         u - Unknown<br>         w - Wax
+         z - Other<br>         | - No attempt to code<br>      11 - Kind of cutting<br>         h - Hill-and-dale cutting<br>         l - Lateral or combined cutting<br>         n - Not applicable<br>         u - Unknown<br>         | - No attempt to code<br>      12 - Special playback characteristics<br>         a - NAB standard<br>         b - CCIR standard<br>         c - Dolby-B encoded<br>         d - dbx encoded<br>         e - Digital recording<br>         f - Dolby-A encoded<br>         g - Dolby-C encoded<br>         h - CX encoded<br>         n - Not applicable<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      13 - Capture and storage technique<br>         a - Acoustical capture, direct storage<br>         b - Direct storage, not acoustical<br>         d - Digital storage<br>         e - Analog electrical storage<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>  007--TEXT<br>   Character Positions<br>      00 - Category of material<br>         t - Text<br>      01 - Specific material designation<br>         a - Regular print<br>         b - Large print<br>         c - Braille<br>         d - Text in looseleaf binder<br>         u - Unspecified<br>         z - Other<br>         | - No attempt to code<br>  007--VIDEORECORDING<br>   Character Positions<br>      00 - Category of material<br>         v - Videorecording<br>      01 - Specific material designation<br>         c - Videocartridge<br>         d - Videodisc<br>         f - Videocassette<br>         r - Videoreel<br>         u - Unspecified<br>         z - Other<br>         | - No attempt to code<br>      02 - Undefined<br>      03 - Color<br>         a - One color<br>         b - Black-and-white<br>         c - Multicolored<br>         m - Mixed<br>         n - Not applicable<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      04 - Videorecording format<br>         a - Beta (1/2 in., videocassette)<br>         b - VHS (1/2 in., videocassette)<br>         c - U-matic (3/4 in., videocassette)<br>         d - EIAJ (1/2 in. reel)<br>         e - Type C (1 in., reel)<br>         f - Quadruplex (1 in. or 2 in., reel)<br>         g - Laserdisc<br>         h - CED (Capacitance Electronic Disc) videodisc<br>         i - Betacam (1/2 in., videocassette)<br>         j - Betacam SP (1/2 in., videocassette)<br>         k - Super-VHS (1/2 in., videocassette)<br>         m - M-II (1/2 in., videocassette)<br>         o - D-2 (3/4 in., videocassette)<br>         p - 8 mm.<br>         q - Hi-8 mm.<br>         u - Unknown<br>         v - DVD<br>         z - Other<br>         | - No attempt to code<br>      05 - Sound on medium or separate<br>         # - No sound (silent)<br>         a - Sound on medium<br>         b - Sound separate from medium <br>         u - Unknown<br>         | - No attempt to code<br>      06 - Medium for sound<br>         # - No sound (silent)<br>         a - Optical sound track on motion picture film<br>         b - Magnetic sound track on motion picture film<br>         c - Magnetic audio tape in cartridge<br>         d - Sound disc<br>         e - Magnetic audio tape on reel<br>         f - Magnetic audio tape in cassette<br>         g - Optical and magnetic sound track on motion picture film<br>         h - Videotape<br>         i - Videodisc<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      07 - Dimensions<br>         a - 8 mm.<br>         m - 1/4 in.<br>         o - 1/2 in.<br>         p - 1 in.<br>         q - 2 in.<br>         r - 3/4 in.<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      08 - Configuration of playback channels<br>         k - Mixed<br>         m - Monaural<br>         n - Not applicable<br>         q - Quadraphonic, multichannel, or surround<br>         s - Stereophonic<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>  007--UNSPECIFIED<br>   Character Positions<br>      00 - Category of material<br>         z - Unspecified<br>      01 - Specific material designation<br>         m - Multiple physical forms<br>         u - Unspecified<br>         z - Other<br>         | - No attempt to code
+
+--Control Field 008--<br>  008 - FIXED-LENGTH DATA ELEMENTS--GENERAL INFORMATION (NR)<br>  008--ALL MATERIALS<br>   Character Positions<br>      00-05 - Date entered on file<br>      06 - Type of date/Publication status<br>         b - No dates given; B.C. date involved<br>         c - Continuing resource currently published<br>         c - Actual date and copyright date [OBSOLETE]<br>         d - Continuing resource ceased publication<br>         d - Detailed date [OBSOLETE]<br>         e - Detailed date<br>         i - Inclusive dates of collection<br>         k - Range of years of bulk of collection<br>         m - Multiple dates<br>         n - Dates unknown<br>         p - Date of distribution/release/issue and production/recording 
+             session when different<br>         q - Questionable date<br>         r - Reprint/reissue date and original date<br>         s - Single known date/probable date<br>         t - Publication date and copyright date<br>         u - Continuing resource status unknown<br>         | - No attempt to code<br>      07-10 - Date 1<br>         1-9 - Date digit<br>         # - Date element is not applicable<br>         u - Date element is totally or partially unknown<br>         | - No attempt to code<br>      11-14 - Date 2<br>         1-9 - Date digit<br>         # - Date element is not applicable<br>         u - Date element is totally or partially unknown<br>         | - No attempt to code<br>      15-17 - Place of publication, production, or execution<br>      35-37 - Language<br>      38 - Modified record<br>         # - Not modified<br>         d - Dashed-on information omitted<br>         o - Completely romanized/printed cards romanized<br>         r - Completely romanized/printed cards in script<br>         s - Shortened<br>         x - Missing characters<br>         | - No attempt to code<br>      39 - Cataloging source<br>         # - National bibliographic agency<br>         a - National Agricultural Library [OBSOLETE]<br>         b - National Library of Medicine [OBSOLETE]<br>         c - Cooperative cataloging program<br>         d - Other<br>         n - Report to [OBSOLETE]
+         u - Unknown
+         | - No attempt to code<br>  008--BOOKS<br>   Character Positions<br>      18-21 - Illustrations<br>         # - No illustrations<br>         a - Illustrations<br>         b - Maps<br>         c - Portraits<br>         d - Charts<br>         e - Plans<br>         f - Plates<br>         g - Music<br>         h - Facsimiles<br>         i - Coats of arms<br>         j - Genealogical tables<br>         k - Forms<br>         l - Samples<br>         m - Phonodisc, phonowire, etc.<br>         o - Photographs<br>         p - Illuminations<br>         | - No attempt to code<br>      22 - Target audience<br>         # - Unknown or not specified<br>         a - Preschool<br>         b - Primary<br>         c - Pre-adolescent<br>         d - Adolescent<br>         e - Adult<br>         f - Specialized<br>         g - General<br>         j - Juvenile<br>         | - No attempt to code<br>      23 - Form of item<br>         # - None of the following<br>         a - Microfilm<br>         b - Microfiche<br>         c - Microopaque<br>         d - Large print<br>         f - Braille<br>         g - Punched paper tape [OBSOLETE]<br>         h - Magnetic tape [OBSOLETE]<br>         i - Multimedia [OBSOLETE]<br>         r - Regular print reproduction<br>         s - Electronic<br>         z - Other form of reproduction [OBSOLETE]<br>         | - No attempt to code<br>      24-27 - Nature of contents<br>         # - No specified nature of contents<br>         a - Abstracts/summaries<br>         b - Bibliographies<br>         c - Catalogs<br>         d - Dictionaries<br>         e - Encyclopedias<br>         f - Handbooks<br>         g - Legal articles<br>         h - Handbooks [OBSOLETE]<br>         i - Indexes<br>         j - Patent document<br>         k - Discographies<br>         l - Legislation<br>         m - Theses<br>         n - Surveys of literature in a subject area<br>         o - Reviews<br>         p - Programmed texts<br>         q - Filmographies<br>         r - Directories<br>         s - Statistics<br>         t - Technical reports
+         u - Standards/specifications<br>         v - Legal cases and case notes<br>         w - Law reports and digests<br>         y - Yearbooks [OBSOLETE]<br>         z - Treaties<br>         | - No attempt to code<br>      28 - Government publication<br>         # - Not a government publication<br>         a - Autonomous or semi-autonomous component<br>         c - Multilocal<br>         f - Federal/national<br>         i - International intergovernmental<br>         l - Local<br>         m - Multistate<br>         n - Government publication--level undetermined [OBSOLETE]<br>         o - Government publication--level undetermined<br>         s - State, provincial, territorial, dependent, etc.<br>         u - Unknown if item is government publication<br>         z - Other<br>         | - No attempt to code<br>      29 - Conference publication<br>         0 - Not a conference publication<br>         1 - Conference publication<br>         | - No attempt to code<br>      30 - Festschrift<br>         0 - Not a festschrift<br>         1 - Festschrift<br>         | - No attempt to code<br>      31 - Index<br>         0 - No index<br>         1 - Index present<br>         | - No attempt to code<br>      32 - Undefined<br>      32 - Main entry in body of entry [OBSOLETE]<br>         0 - Main entry not in body of entry<br>         1 - Main entry in body of entry<br>         | - No attempt to code<br>      33 - Literary form<br>         0 - Not fiction (not further specified)<br>         1 - Fiction (not further specified)<br>         c - Comic strips<br>         d - Dramas<br>         e - Essays<br>         f - Novels<br>         h - Humor, satires, etc.<br>         i - Letters<br>         j - Short stories<br>         m - Mixed forms<br>         p - Poetry<br>         s - Speeches<br>         u - Unknown<br>         | - No attempt to code<br>      34 - Biography<br>         # - No biographical material<br>         a - Autobiography<br>         b - Individual biography<br>         c - Collective biography<br>         d - Contains biographical information<br>         | - No attempt to code<br>  008--COMPUTER FILES<br>   Character Positions<br>      18-21 - Undefined<br>      18 - Frequency [OBSOLETE]<br>         # - No determinable frequency<br>         a - Annual<br>         b - Bimonthly<br>         c - Semiweekly<br>         d - Daily<br>         e - Biweekly<br>         f - Semiannual<br>         g - Biennial<br>         h - Triennial<br>         i - Three times a week<br>         j - Three times a month<br>         m - Monthly<br>         n - Not applicable<br>         q - Quarterly<br>         s - Semimonthly<br>         t - Three times a year<br>         u - Unknown<br>         w - Weekly<br>         z - Other frequencies<br>      19 - Regularity [OBSOLETE]<br>         # - Not applicable<br>         n - Normalized irregular<br>         r - Regular<br>         u - Unknown<br>         x - Completely irregular<br>      22 - Target audience<br>         # - Unknown or not specified<br>         a - Preschool<br>         b - Primary<br>         c - Pre-adolescent<br>         d - Adolescent<br>         e - Adult<br>         f - Specialized<br>         g - General<br>         j - Juvenile<br>         | - No attempt to code<br>      23-25 - Undefined<br>      26 - Type of computer file<br>         a - Numeric data<br>         b - Computer program<br>         c - Representational<br>         d - Document<br>         e - Bibliographic data<br>         f - Font<br>         g - Game<br>         h - Sound<br>         i - Interactive multimedia<br>         j - Online system or service<br>         m - Combination<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      27 - Undefined<br>      27 - Type of machine [OBSOLETE]<br>         a - Computer readable<br>         z - Other<br>      28 - Government publication<br>         # - Not a government publication<br>         a - Autonomous or semi-autonomous component<br>         c - Multilocal<br>         f - Federal/national<br>         i - International intergovernmental<br>         l - Local<br>         m - Multistate<br>         o - Government publication--level undetermined<br>         s - State, provincial, territorial, dependent, etc.<br>         u - Unknown if item is government publication<br>         z - Other<br>         | - No attempt to code<br>      29-34 - Undefined<br>  008--MAPS<br>   Character Positions<br>      18-21 - Relief<br>         # - No relief shown<br>         a - Contours<br>         b - Shading<br>         c - Gradient and bathymetric tints<br>         d - Hachures<br>         e - Bathymetry/soundings<br>         f - Form lines<br>         g - Spot heights<br>         h - Color [OBSOLETE]<br>         i - Pictorially<br>         j - Land forms<br>         k - Bathymetry/isolines<br>         m - Rock drawings<br>         z - Other relief type<br>         | - No attempt to code<br>      22-23 - Projection<br>         ## - Projection not specified<br>         aa - Aitoff<br>         ab - Gnomic<br>         ac - Lambert's azimuthal equal area<br>         ad - Orthographic<br>         ae - Azimuthal equidistant<br>         af - Stereographic<br>         ag - General vertical near-sided<br>         am - Modified stereographic for Alaska<br>         an - Chamberlin trimetric<br>         ap - Polar stereographic<br>         au - Azimuthal, specific type unknown<br>         az - Azimuthal, other<br>         ba - Gall<br>         bb - Goode's homolographic<br>         bc - Lambert's cylindrical equal area<br>         bd - Mercator<br>         be - Miller<br>         bf - Mollweide<br>         bg - Sinusoidal<br>         bh - Transverse Mercator<br>         bi - Gauss-Kruger<br>         bj - Equirectangular<br>         bo - Oblique Mercator<br>         br - Robinson<br>         bs - Space oblique Mercator<br>         bu - Cylindrical, specific type unknown<br>         bz - Cylindrical, other<br>         ca - Alber's equal area<br>         cb - Bonne<br>         cc - Lambert's conformal conic<br>         ce - Equidistant conic<br>         cp - Polyconic<br>         cu - Conic, specific type unknown<br>         cz - Conic, other<br>         da - Armadillo<br>         db - Butterfly<br>         dc - Eckert<br>         dd - Goode's homolosine<br>         de - Miller's bipolar oblique conformal conic<br>         df - Van Der Grinten<br>         dg - Dimaxion<br>         dh - Cordiform<br>         dl - Lambert conformal<br>         zz - Other<br>         | - No attempt to code<br>      24 - Undefined<br>      24 - Prime meridian [OBSOLETE]<br>         # - Prime meridian not specified<br>         e - Greenwich<br>         f - Ferro<br>         g - Paris<br>         h - Other [OBSOLETE]<br>         p - Philadelphia<br>         w - Washington, D.C.<br>         z - Other<br>      25 - Type of cartographic material<br>         a - Single map<br>         b - Map series<br>         c - Map serial<br>         d - Globe<br>         e - Atlas<br>         f - Separate map supplement to another work<br>         g - Map bound as part of another work<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      26-27 - Undefined<br>      26-27 - Publisher code [OBSOLETE]<br>      28 - Government publication<br>         # - Not a government publication<br>         a - Autonomous or semi-autonomous component<br>         c - Multilocal<br>         f - Federal/national<br>         i - International intergovernmental<br>         l - Local<br>         m - Multistate<br>         o - Government publication--level undetermined<br>         s - State, provincial, territorial, dependent, etc.<br>         u - Unknown if item is government publication<br>         z - Other<br>         | - No attempt to code<br>      29 - Form of item<br>         # - None of the following<br>         a - Microfilm<br>         b - Microfiche<br>         c - Microopaque<br>         d - Large print<br>         f - Braille<br>         r - Regular print reproduction<br>         s - Electronic<br>         | - No attempt to code<br>      30 - Undefined<br>      31 - Index<br>         0 - No index<br>         1 - Index present<br>         | - No attempt to code<br>      32 - Undefined<br>      32 - Citation indicator [OBSOLETE]<br>      33-34 - Special format characteristics<br>         # - No specified special format characteristics<br>         a - Photocopy, blue line print [OBSOLETE]<br>         b - Photocopy [OBSOLETE]<br>         c - Negative photocopy [OBSOLETE]<br>         d - Film negative [OBSOLETE] <br>         e - Manuscript<br>         f - Facsimile [OBSOLETE]<br>         g - Relief model [OBSOLETE]<br>         h - Rare [OBSOLETE]<br>         j - Picture card, post card<br>         k - Calendar<br>         l - Puzzle<br>         m - Braille [OBSOLETE]<br>         n - Game<br>         o - Wall map<br>         p - Playing cards<br>         q - Large print [OBSOLETE]<br>         r - Loose-leaf<br>         z - Other<br>         | - No attempt to code<br>  008--MUSIC<br>   Character Positions<br>      18-19 - Form of composition<br>         an - Anthems<br>         bd - Ballads<br>         bg - Bluegrass music<br>         bl - Blues<br>         bt - Ballets<br>         ca - Chaconnes<br>         cb - Chants, Other religions<br>         cc - Chant, Christian<br>         cg - Concerti grossi<br>         ch - Chorales<br>         cl - Chorale preludes<br>         cn - Canons and rounds<br>         co - Concertos<br>         cp - Chansons, polyphonic<br>         cr - Carols<br>         cs - Chance compositions<br>         ct - Cantatas<br>         cy - Country music<br>         cz - Canzonas<br>         df - Dance forms<br>         dv - Divertimentos, serenades, cassations, divertissements, notturni<br>         fg - Fugues<br>         fm - Folk music<br>         ft - Fantasias<br>         gm - Gospel music<br>         hy - Hymns<br>         jz - Jazz<br>         mc - Musical revues and comedies<br>         md - Madrigals<br>         mi - Minuets<br>         mo - Motets<br>         mp - Motion picture music<br>         mr - Marches<br>         ms - Masses<br>         mu - Multiple forms<br>         mz - Mazurkas<br>         nc - Nocturnes<br>         nn - Not applicable<br>         op - Operas<br>         or - Oratorios<br>         ov - Overtures<br>         pg - Program music<br>         pm - Passion music<br>         po - Polonaises<br>         pp - Popular music<br>         pr - Preludes<br>         ps - Passacaglias<br>         pt - Part-songs<br>         pv - Pavans<br>         rc - Rock music<br>         rd - Rondos<br>         rg - Ragtime music<br>         ri - Ricercars<br>         rp - Rhapsodies<br>         rq - Requiems<br>         sd - Square dance music<br>         sg - Songs<br>         sn - Sonatas<br>         sp - Symphonic poems<br>         st - Studies and exercises<br>         su - Suites<br>         sy - Symphonies<br>         tc - Toccatas<br>         ts - Trio-sonatas<br>         uu - Unknown<br>         vr - Variations<br>         wz - Waltzes<br>         zz - Other<br>         || - No attempt to code<br>      20 - Format of music<br>         a - Full score<br>         b - Full score, miniature or study size<br>         c - Accompaniment reduced for keyboard <br>         d - Voice score<br>         e - Condensed score or piano-conductor score<br>         g - Close score<br>         m - Multiple score formats<br>         n - Not applicable<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code
+      21 - Music parts<br>         # - No parts in hand or not specified<br>         d - Instrumental and vocal parts<br>         e - Instrumental parts
+         f - Vocal parts<br>         n - Not applicable
+         u - Unknown
+         | - No attempt to code <br>       21 - Existence of parts [OBSOLETE]<br>         # - No parts exist<br>         a - Parts exist<br>         n - Not applicable<br>         u - Unknown<br>      22 - Target audience<br>         # - Unknown or not specified<br>         a - Preschool<br>         b - Primary<br>         c - Pre-adolescent<br>         d - Adolescent<br>         e - Adult<br>         f - Specialized<br>         g - General<br>         j - Juvenile<br>         | - No attempt to code<br>      23 - Form of item<br>         # - None of the following<br>         a - Microfilm<br>         b - Microfiche<br>         c - Microopaque<br>         d - Large print<br>         f - Braille<br>         g - Punched paper tape [OBSOLETE]<br>         h - Magnetic tape [OBSOLETE] <br>         i - Multimedia [OBSOLETE]<br>         r - Regular print reproduction<br>         s - Electronic<br>         x - Other form of reproduction [OBSOLETE]<br>         z - Other form of reproduction [OBSOLETE]<br>         | - No attempt to code<br>      24-29 - Accompanying matter<br>         # - No accompanying matter<br>         a - Discography<br>         b - Bibliography<br>         c - Thematic index<br>         d - Libretto or text<br>         e - Biography of composer or author<br>         f - Biography of performer or history of ensemble<br>         g - Technical and/or historical information on instruments<br>         h - Technical information on music<br>         i - Historical information<br>         j - Historical information other than music [OBSOLETE]<br>         k - Ethnological information<br>         n - Not applicable [OBSOLETE]<br>         r - Instructional materials<br>         s - Music<br>         z - Other<br>         | - No attempt to code<br>      30-31 - Literary text for sound recordings<br>         # - Item is a musical sound recording<br>         a - Autobiography<br>         b - Biography<br>         c - Conference proceedings<br>         d - Drama<br>         e - Essays<br>         f - Fiction<br>         g - Reporting<br>         h - History<br>         i - Instruction<br>         j - Language instruction<br>         k - Comedy<br>         l - Lectures, speeches<br>         m - Memoirs<br>         n - Not applicable<br>         o - Folktales<br>         p - Poetry<br>         r - Rehearsals<br>         s - Sounds<br>         t - Interviews<br>         z - Other<br>         | - No attempt to code<br>      32 - Main entry in body of entry [OBSOLETE]<br>         0 - Main entry not in body of entry<br>         1 - Main entry in body of entry<br>         | - No attempt to code<br>      32 - Undefined
+      33 - Transposition and arrangement <br>         # - Not arrangement or transposition or not specified <br>         a - Transposition <br>         b - Arrangement <br>         c - Both transposed and arranged <br>         n - Not applicable <br>         u - Unknown <br>         | - No attempt to code 
+      34 - Undefined<br>  008--CONTINUING RESOURCES<br>   Character Positions<br>      18 - Frequency<br>         # - No determinable frequency<br>         a - Annual<br>         b - Bimonthly<br>         c - Semiweekly<br>         d - Daily<br>         e - Biweekly<br>         f - Semiannual<br>         g - Biennial<br>         h - Triennial<br>         i - Three times a week<br>         j - Three times a month<br>         k - Continuously updated<br>         m - Monthly<br>         q - Quarterly<br>         s - Semimonthly<br>         t - Three times a year<br>         u - Unknown<br>         w - Weekly<br>         z - Other<br>         | - No attempt to code<br>      19 - Regularity<br>         n - Normalized irregular<br>         r - Regular<br>         u - Unknown<br>         x - Completely irregular<br>         | - No attempt to code<br>      20 - ISSN center<br>         # - No ISSN center code assigned<br>         0 - International Center<br>         1 - United States<br>         2 - United Kingdom <br>         3 - Australia [OBSOLETE]<br>         4 - Canada<br>         5 - Moscow Regional Centre [OBSOLETE]<br>         6 - Federal Republic of Germany [OBSOLETE]<br>         7 - France [OBSOLETE]<br>         8 - Argentina [OBSOLETE]<br>         9 - Japan [OBSOLETE]<br>         u - Unknown [OBSOLETE]<br>         z - Other<br>         | - No attempt to code<br>      21 - Type of continuing resource<br>         # - None of the following<br>         d - Updating database<br>         l - Updating loose-leaf<br>         m - Monographic series<br>         n - Newspaper<br>         p - Periodical<br>         w - Updating Web site<br>         | - No attempt to code<br>      22 - Form of original item<br>         # - None of the following<br>         a - Microfilm<br>         b - Microfiche<br>         c - Microopaque<br>         d - Large print<br>         e - Newspaper format<br>         f - Braille<br>         g - Punched paper tape [OBSOLETE]<br>         h - Magnetic tape [OBSOLETE]<br>         i - Multimedia [OBSOLETE]<br>         s - Electronic<br>         x - Other physical medium [OBSOLETE]<br>         z - Other physical medium [OBSOLETE]<br>         | - No attempt to code<br>      23 - Form of item<br>         # - None of the following<br>         a - Microfilm<br>         b - Microfiche<br>         c - Microopaque<br>         d - Large print<br>         f - Braille<br>         g - Punched paper tape [OBSOLETE]<br>         h - Magnetic tape [OBSOLETE]<br>         i - Multimedia [OBSOLETE]<br>         r - Regular print reproduction<br>         s - Electronic<br>         z - Other form of reproduction [OBSOLETE]<br>         | - No attempt to code<br>      24 - Nature of entire work<br>         # - No specified nature of entire work<br>         a - Abstracts/summaries<br>         b - Bibliographies<br>         c - Catalogs<br>         d - Dictionaries<br>         e - Encyclopedias<br>         f - Handbooks<br>         g - Legal articles<br>         h - Biography<br>         i - Indexes<br>         k - Discographies<br>         l - Legislation<br>         m - Theses<br>         n - Surveys of literature in a subject area<br>         n - Legal cases and case notes [OBSOLETE]<br>         o - Reviews<br>         p - Programmed texts<br>         q - Filmographies<br>         r - Directories<br>         s - Statistics<br>         t - Technical reports
+         u - Standards/specifications<br>         v - Legal cases and case notes<br>         w - Law reports and digests<br>         y - Yearbooks [OBSOLETE]<br>         z - Treaties<br>         | - No attempt to code<br>      25-27 - Nature of contents<br>         # - No specified nature of contents<br>         a - Abstracts/summaries<br>         b - Bibliographies<br>         c - Catalogs<br>         d - Dictionaries<br>         e - Encyclopedias<br>         f - Handbooks<br>         g - Legal articles<br>         h - Biography<br>         i - Indexes<br>         k - Discographies<br>         l - Legislation<br>         m - Theses<br>         n - Surveys of literature in a subject area<br>         n - Legal cases and case notes [OBSOLETE]<br>         o - Reviews<br>         p - Programmed texts<br>         q - Filmographies<br>         r - Directories<br>         s - Statistics<br>         t - Technical reports
+         u - Standards/specifications<br>         v - Legal cases and case notes<br>         w - Law reports and digests<br>         y - Yearbooks [OBSOLETE]<br>         z - Treaties<br>         | - No attempt to code<br>      28 - Government publication<br>         # - Not a government publication<br>         a - Autonomous or semi-autonomous component<br>         c - Multilocal<br>         f - Federal/national<br>         i - International intergovernmental<br>         l - Local<br>         m - Multistate<br>         n - Government publication--level undetermined [OBSOLETE]<br>         o - Government publication--level undetermined<br>         s - State, provincial, territorial, dependent,etc.<br>         u - Unknown if item is government publication<br>         z - Other<br>         | - No attempt to code<br>      29 - Conference publication<br>         0 - Not a conference publication<br>         1 - Conference publication <br>         | - No attempt to code<br>      30-32 - Undefined<br>      30 - Title page availability [OBSOLETE]<br>         # - No separate title page issued<br>         a - In last issue of volume, loose<br>         b - In last issue of volume, attached<br>         c - In first issue of next volume, loose<br>         d - In first issue of next volume, attached<br>         e - Published separately, free upon request<br>         f - Published separately, free, automatically sent<br>         g - Published separately, purchase, request<br>         u - Unknown<br>         z - Other title page availability<br>         | - No attempt to code<br>      31 - Index availability [OBSOLETE]<br>         # - No index published<br>         a - Each issue contains index to its own contents (no volume index), loose<br>         b - In last issue of volume, loose, separately paged<br>         c - In last issue of volume, loose, unpaged<br>         d - In last issue of volume, attached<br>         e - In first issue of next volume, loose, separately paged<br>         f - In first issue of next volume, loose, unpaged<br>         g - In first issue of next volume, attached<br>         h - Published separately, free, automatically sent<br>         i - Published separately, free, upon request<br>         j - Published separately, bound from publisher, free, automatically sent<br>         k - Published separately, bound from publisher, free, upon request<br>         l - Received separately, bound from publisher<br>         m - Supplement or subseries, indexed in parent journal index<br>         u - Unknown<br>         z - Other index availability<br>         | - No attempt to code<br>      32 - Cumulative index availability [OBSOLETE]<br>         0 - No cumulative index available<br>         1 - Cumulative index available<br>         u - Unknown<br>         | - No attempt to code<br>      33 - Original alphabet or script of title<br>         # - No alphabet or script given/no key title<br>         a - Basic roman<br>         b - Extended roman<br>         c - Cyrillic<br>         d - Japanese<br>         e - Chinese<br>         f - Arabic<br>         g - Greek<br>         h - Hebrew<br>         i - Thai<br>         j - Devanagari<br>         k - Korean<br>         l - Tamil<br>         u - Unknown<br>         z - Other<br>         | - No attempt to code<br>      34 - Entry convention<br>         0 - Successive entry<br>         1 - Latest entry<br>         2 - Integrated entry<br>         | - No attempt to code<br>  008--VISUAL MATERIALS<br>   Character Positions<br>      18-20 - Running time for motion pictures and videorecordings<br>         000 - Running time exceeds three characters<br>         001-999 - Running time<br>         --- - Running time unknown<br>         nnn - Not applicable<br>         ||| - No attempt to code<br>      21 - Undefined<br>      21 - In LC collection [OBSOLETE]<br>         # - Not in LC<br>         a - In LC, print note<br>         b - In LC, do not print note<br>         u - Unknown<br>      22 - Target audience<br>         # - Unknown or not specified<br>         a - Preschool<br>         b - Primary<br>         c - Pre-adolescent<br>         d - Adolescent<br>         e - Adult<br>         f - Specialized<br>         g - General<br>         j - Juvenile<br>         | - No attempt to code<br>      23-27 - Undefined<br>      23-27 - Accompanying matter [OBSOLETE]<br>         # - No accompanying matter<br>         0 - No [OBSOLETE]<br>         1 - Yes [OBSOLETE]<br>         l - Stills<br>         m - Script material<br>         o - Posters<br>         p - Pressbooks<br>         q - Lobby cards<br>         r - Instructional materials<br>         s - Music<br>         z - Other<br>         | - No attempt to code<br>      28 - Government publication<br>         # - Not a government publication<br>         a - Autonomous or semi-autonomous component<br>         c - Multilocal<br>         f - Federal/national<br>         i - International intergovernmental <br>         l - Local<br>         m - Multistate<br>         n - Government publication--level undetermined [OBSOLETE]<br>         o - Government publication--level undetermined<br>         s - State, provincial, territorial, dependent, etc.<br>         u - Unknown if item is government publication<br>         z - Other<br>         | - No attempt to code<br>      29 - Form of item<br>         # - None of the following<br>         a - Microfilm<br>         b - Microfiche<br>         c - Microopaque<br>         d - Large print<br>         f - Braille<br>         r - Regular print reproduction<br>         s - Electronic<br>         | - No attempt to code<br>      30-32 - Undefined<br>      32 - Main entry in body of entry [OBSOLETE]<br>         0 - Main entry not in body of entry<br>         1 - Main entry in body of entry<br>         | - No attempt to code<br>      33 - Type of visual material<br>         a - Art original<br>         b - Kit<br>         c - Art reproduction<br>         d - Diorama<br>         e - Electronic videorecording [OBSOLETE]<br>         f - Filmstrip<br>         g - Game<br>         i - Picture<br>         k - Graphic<br>         l - Technical drawing<br>         m - Motion picture<br>         n - Chart<br>         o - Flash card<br>         p - Microscope slide<br>         q - Model<br>         r - Realia<br>         s - Slide<br>         t - Transparency<br>         v - Videorecording<br>         w - Toy<br>         z - Other<br>         | - No attempt to code<br>      34 - Technique<br>         # - Not applicable [OBSOLETE]<br>         a - Animation<br>         c - Animation and live action<br>         l - Live action<br>         n - Not applicable<br>         u - Unknown<br>         z - Other technique<br>         | - No attempt to code<br>  008--MIXED MATERIALS<br>   Character Positions<br>      18-22 - Undefined<br>      23 - Form of item<br>         # - None of the following<br>         a - Microfilm<br>         b - Microfiche<br>         c - Microopaque<br>         d - Large print<br>         f - Braille<br>         g - Punched paper tape [OBSOLETE]<br>         h - Magnetic tape [OBSOLETE]<br>         i - Multimedia [OBSOLETE]<br>         j - Handwritten transcript [OBSOLETE]<br>         p - Photocopy [OBSOLETE]<br>         r - Regular print reproduction<br>         s - Electronic<br>         t - Typewritten transcript [OBSOLETE]<br>         z - Other form of reproduction [OBSOLETE]<br>         | - No attempt to code<br>      24-34 - Undefined<br>      30 - Case file indicator [OBSOLETE]<br>         # - No case file exists<br>         c - Case file exists<br>      32 - Processing status code [OBSOLETE]<br>         a - Collection not in library<br>         b - Completely processed<br>         c - Processed but with unprocessed additions<br>         d - Requires processing<br>         e - Totally unprocessed<br>         f - Under total cloture<br>         u - Unknown<br>      33 - Collection status code [OBSOLETE]<br>         a - Discrete grouping of material<br>         b - Accession<br>         c - Active solicitation<br>         d - Solicitation unsuccessful<br>         e - Information file only<br>         u - Unknown<br>      34 - Level of collection control code [OBSOLETE]<br>         a - Control on collection level<br>         b - Control by series<br>         c - Control by container<br>         d - Control by folder<br>         e - Control by item<br>         u - Unknown<br>  009 - PHYSICAL DESCRIPTION FIXED-FIELD FOR ARCHIVAL COLLECTION (VM) - [OBSOLETE]<br>   Character Positions<br>      00 - Genealogical stage<br>      01 - Technical stage<br>      02 - Color stage<br>      03 - Film emulsion<br>      04 - Film base<br>      05 - Negative or positive sound<br>      06 - Additional types of color<br>      07 - Longitudinal shrinkage<br>      08 - Perforation shrinkage<br>      09 - Film deterioration<br>      10 - Completeness<br>      11-14 - Film inspection date
+
+--Number and Code Fields (01X-04X)--<br>  010 - LIBRARY OF CONGRESS CONTROL NUMBER (NR)<br>   Indicators<br>      First - Undefined<br>         # - Undefined<br>      Second - Undefined<br>         # - Undefined<br>   Subfield Codes<br>      $a - LC control number (NR)<br>      $b - NUCMC control number (R)<br>      $z - Canceled/invalid LC control number (R)<br>      $8 - Field link and sequence number (R)
+  011 - LINKING LIBRARY OF CONGRESS CONTROL NUMBER (NR) [OBSOLETE]<br>   Indicators<br>      First - Undefined<br>         # - Undefined<br>      Second - Undefined<br>         # - Undefined<br>   Subfield Codes<br>      $a - LINKING LC control number (R)
+  013 - PATENT CONTROL INFORMATION (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Number (NR)
+      $b - Country (NR)
+      $c - Type of number (NR)
+      $d - Date (R)
+      $e - Status (R)
+      $f - Party to document (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)
+  015 - NATIONAL BIBLIOGRAPHY NUMBER (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - National bibliography number (R)
+      $2 - Source (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  016 - NATIONAL BIBLIOGRAPHIC AGENCY CONTROL NUMBER (R)
+   Indicators
+      First - National bibliographic agency
+         # - National Library of Canada
+         7 - Agency identified in subfield $2
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Record control number (NR)
+      $z - Canceled or invalid record control number (R)
+      $2 - Source (NR)
+      $8 - Field link and sequence number (R)   
+  017 - COPYRIGHT OR LEGAL DEPOSIT NUMBER (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Code
+      $a - Copyright registration number (R)
+      $b - Assigning agency (NR)
+      $2 - Source (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  018 - COPYRIGHT ARTICLE-FEE CODE (NR)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Code
+      $a - Copyright article-fee code (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R) 
+  020 - INTERNATIONAL STANDARD BOOK NUMBER (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - International Standard Book Number (NR)
+      $c - Terms of availability (NR)
+      $z - Canceled/invalid ISBN (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  022 - INTERNATIONAL STANDARD SERIAL NUMBER (R)
+   Indicators
+      First - Level of international interest
+         # - No level specified
+         0 - Serial of international interest
+         1 - Serial not of international interest
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - International Standard Serial Number (NR)
+      $y - Incorrect ISSN (R)
+      $z - Canceled ISSN (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  024 - OTHER STANDARD IDENTIFIER (R)
+   Indicators
+      First - Type of standard number or code
+         0 - International Standard Recording Code (ISRC)
+         1 - Universal Product Code (UPC) 
+         2 - International Standard Music Number (ISMN) 
+         3 - International Article Number (EAN) 
+         4 - Serial Item and Contribution Identifier (SICI) 
+         7 - Source specified in subfield $2
+         8 - Unspecified type of standard number or code
+      Second - Difference indicator
+         # - No information provided
+         0 - No difference
+         1 - Difference
+   Subfield Codes
+      $a - Standard number or code (NR)
+      $c - Terms of availability (NR)
+      $d - Additional codes following the standard number or code (NR)
+      $z - Canceled/invalid standard number or code (R)
+      $2 - Source of number or code (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  025 - OVERSEAS ACQUISITION NUMBER (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Code
+      $a - Overseas acquisition number (R)
+      $8 - Field link and sequence number (R)   
+  026 - FINGERPRINT IDENTIFIER (R)
+   Indicators
+       First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - First and second groups of characters (R) <br>      $b - Third and fourth groups of characters (R) <br>      $c - Date (NR) <br>      $d - Number of volume or part (R) <br>      $e - Unparsed fingerprint (NR) <br>      $2 - Source (NR)<br>      $5 - Institution to which field applies (R) <br>      $6 - Linkage (NR) <br>      $8 - Field link and sequence number (R) <br>  027 - STANDARD TECHNICAL REPORT NUMBER (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Standard technical report number (NR)
+      $z - Canceled/invalid number (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  028 - PUBLISHER NUMBER (R)
+   Indicators
+      First - Type of publisher number
+         0 - Issue number
+         1 - Matrix number
+         2 - Plate number
+         3 - Other music number
+         4 - Videorecording number
+         5 - Other publisher number
+      Second - Note/added entry controller
+         0 - No note, no added entry
+         1 - Note, added entry
+         2 - Note, no added entry
+         3 - No note, added entry
+   Subfield Codes
+      $a - Publisher number (NR)
+      $b - Source (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R) 
+  030 - CODEN DESIGNATION (R) 
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - CODEN (NR)
+      $z - Canceled/invalid CODEN (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  032 - POSTAL REGISTRATION NUMBER (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Postal registration number (NR)
+      $b - Source (agency assigning number) (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R) 
+  033 - DATE/TIME AND PLACE OF AN EVENT (R)
+   Indicators
+      First - Type of date in subfield $a
+         # - No date information
+         0 - Single date
+         1 - Multiple single dates
+         2 - Range of dates
+      Second - Type of event
+         # - No information provided
+         0 - Capture
+         1 - Broadcast
+         2 - Finding
+   Subfield Codes
+      $a - Formatted date/time (R)
+      $b - Geographic classification area code (R)
+      $c - Geographic classification subarea code (R)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  034 - CODED CARTOGRAPHIC MATHEMATICAL DATA (R)
+   Indicators
+      First - Type of scale
+         0 - Scale indeterminable/No scale recorded
+         1 - Single scale
+         3 - Range of scales
+      Second - Type of ring
+         # - Not applicable
+         0 - Outer ring
+         1 - Exclusion ring
+   Subfield Codes
+      $a - Category of scale (NR)
+         a - Linear scale 
+         b - Angular scale
+         z - Other type of scale
+      $b - Constant ratio linear horizontal scale (R)
+      $c - Constant ratio linear vertical scale (R)
+      $d - Coordinates--westernmost longitude (NR)
+      $e - Coordinates--easternmost longitude (NR)
+      $f - Coordinates--northernmost latitude (NR)
+      $g - Coordinates--southernmost latitude (NR)
+      $h - Angular scale (R)
+      $j - Declination--northern limit (NR)
+      $k - Declination--southern limit (NR)
+      $m - Right ascension--eastern limit (NR)
+      $n - Right ascension--western limit (NR)
+      $p - Equinox (NR)
+      $s - G-ring latitude (R)
+      $t - G-ring longitude (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)
+  035 - SYSTEM CONTROL NUMBER (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - System control number (NR)
+      $z - Canceled/invalid control number (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)
+  036 - ORIGINAL STUDY NUMBER FOR COMPUTER DATA FILES (NR)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Original study number (NR)
+      $b - Source (agency assigning number) (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  037 - SOURCE OF ACQUISITION (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Stock number (NR)
+      $b - Source of stock number/acquisition (NR)
+      $c - Terms of availability (R)
+      $f - Form of issue (R)
+      $g - Additional format characteristics (R)
+      $n - Note (R)
+      $6 - Linkage (NR)
+       $8 - Field link and sequence number (R) 
+  038 - RECORD CONTENT LICENSOR (NR)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Record content licensor (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)
+  040 - CATALOGING SOURCE (NR)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Original cataloging agency (NR)
+      $b - Language of cataloging (NR)
+      $c - Transcribing agency (NR)
+      $d - Modifying agency (R)
+      $e - Description conventions (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)
+  041 - LANGUAGE CODE (R)
+   Indicators
+      First - Translation indication
+         0 - Item not a translation/does not include a translation
+         1 - Item is or includes a translation
+      Second - Source of code
+         # - MARC language code
+         7 - Source specified in subfield $2 
+   Subfield Codes
+      $a - Language code of text/sound track or separate title (R)
+      $b - Language code of summary or abstract/overprinted title or subtitle (R)
+      $d - Language code of sung or spoken text (R)
+      $e - Language code of librettos (R)
+      $f - Language code of table of contents (R)
+      $g - Language code of accompanying material other than librettos (R)
+      $h - Language code of original and/or intermediate translations of text (R)
+      $2 - Source of code (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  042 - AUTHENTICATION CODE (NR)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Code
+      $a - Authentication code (R)
+         dc - Dublin Core 
+         dhca - Dance Heritage Coalition Access Project
+         gamma - Georgia Archives & Manuscripts Automated Access Project
+         gils - Government Information Location Service
+         isds/c - ISSN Canada
+         lc - Library of Congress
+         lcac - LC Annotated Children's Cataloging Program
+         lccopycat - LC copy cataloging
+         lccopycat-nm - LC copy cataloging-Near Match
+         lcd - CONSER full authority application
+         lcderive - LC derived cataloging
+         lchlas - Handbook of Latin American Studies
+         lcllh - LC Law Library Hispanic
+         lcnccp - LC National Coordinated Cataloging Program
+         lcnitrate - LC nitrate film
+         lcnuc - National Union Catalog
+         lcode - LC overseas data entry
+         msc - CONSER minimal authority application
+         nlc - National Library of Canada 
+         nlmcopyc - National Library of Medicine copy cataloging
+         nsdp - National Serial Data Program
+         ntccf - LC National Translations Center citation file
+         pcc - Program for Cooperative Cataloging
+         premarc - LC PreMARC Retrospective Conversion Project
+         sanb - South African National Bibliography Project
+         xisds/c - ISSN Canada does not consider item a serial
+         xlc - LC does not consider item a serial
+         xnlc - NLC does not consider item a serial
+         xnsdp - NSDP does not consider item a serial   
+  043 - GEOGRAPHIC AREA CODE (NR)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Code
+      $a - Geographic area code (R)
+      $b - Local GAC code (R)
+      $c - ISO code (R)
+      $2 - Source of local code (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)
+  044 - COUNTRY OF PUBLISHING/PRODUCING ENTITY CODE (NR)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Code
+      $a - Country of publishing/producing entity code (R)
+      $b - Local subentity code (R)
+      $c - ISO code (R)
+      $2 - Source of local subentity code (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)
+  045 - TIME PERIOD OF CONTENT (NR)
+   Indicators 
+      First - Type of time period in subfield $b or $c
+         # - Subfield $b or $c not present
+         0 - Single date/time
+         1 - Multiple single dates/times
+         2 - Range of dates/times
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Time period code (R)
+      $b - Formatted 9999 B.C. through C.E. time period (R)
+      $c - Formatted pre-9999 B.C. time period (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  046 - SPECIAL CODED DATES (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Type of date code (NR)
+          i - Inclusive dates of collection
+          k - Bulk of collection
+          m - Multiple dates
+          n - Unknown dates
+          p - Distribution/release/issue and production/recording session dates
+          q - Questionable date
+          r - Reissue and originaldates
+          s - Single known/probable date
+          t - Publication date and copyright dates
+          x - Incorrect dates
+      $b - Date 1 (B.C. date) (NR)
+      $c - Date 1 (C.E. date) (NR)
+      $d - Date 2 (B.C. date) (NR)
+      $e - Date 2 (C.E. date) (NR)
+      $j - Date resource modified (NR) <br>      $k - Beginning or single date created (NR) <br>      $l - Ending date created (NR) <br>      $m - Beginning of date valid (NR) <br>      $n - End of date valid (NR) <br>      $2 - Source of date (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R) 
+  047 - FORM OF MUSICAL COMPOSITION CODE (NR)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Form of musical composition code (R)
+      $8 - Field link and sequence number (R)
+  048 - NUMBER OF MUSICAL INSTRUMENTS OR VOICES CODE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Performer or ensemble (R)
+      $b - Soloist (R)
+      $8 - Field link and sequence number(R)
+   Instrument or Voices Codes 
+      ba - Brass - Horn
+      bb - Brass--Trumpet
+      bc - Brass--Cornet
+      bd - Brass--Trombone
+      be - Brass--Tuba
+      bf - Brass--Baritone
+      bn - Brass--Unspecified
+      bu - Brass--Unknown
+      by - Brass--Ethnic
+      bz - Brass--Other
+      ca - Choruses--Mixed
+      cb - Choruses--Women's
+      cc - Choruses--Men's
+      cd - Choruses--Children's
+      cn - Choruses--Unspecified
+      cu - Choruses--Unknown
+      cy - Choruses--Ethnic
+      ea - Electronic--Synthesizer
+      eb - Electronic--Tape
+      ec - Electronic--Computer
+      ed - Electronic--Ondes Martinot
+      en - Electronic--Unspecified
+      eu - Electronic--Unknown
+      ez - Electronic--Other
+      ka - Keyboard--Piano
+      kb - Keyboard--Organ  
+      kc - Keyboard--Harpsichord
+      kd - Keyboard--Clavichord
+      ke - Keyboard--Continuo
+      kf - Keyboard--Celeste
+      kn - Keyboard--Unspecified
+      ku - Keyboard--Unknown
+      ky - Keyboard--Ethnic
+      kz - Keyboard--Other
+      oa - Larger ensemble--Full orchestra
+      ob - Larger ensemble--Chamber orch.
+      oc - Larger ensemble--String orchestra
+      od - Larger ensemble--Band
+      oe - Larger ensemble--Dance orchestra
+      of - Larger ensemble--Brass band
+      on - Larger ensemble--Unspecified
+      ou - Larger ensemble--Unknown
+      oy - Larger ensemble--Ethnic
+      oz - Larger ensemble--Other
+      pa - Percussion--Timpani
+      pb - Percussion--Xylophone
+      pc - Percussion--Marimba
+      pd - Percussion--Drum
+      pn - Percussion--Unspecified
+      pu - Percussion--Unknown
+      py - Percussion--Ethnic
+      pz - Percussion--Other
+      sa - Strings, bowed--Violin
+      sb - Strings, bowed--Viola
+      sc - Strings, bowed--Violoncello
+      sd - Strings, bowed--Double bass
+      se - Strings, bowed--Viol
+      sf - Strings, bowed--Viola d'amore
+      sg - Strings, bowed--Viola da gamba
+      sn - Strings, bowed--Unspecified
+      su - Strings, bowed--Unknown
+      sy - Strings, bowed--Ethnic
+      sz - Strings, bowed--Other
+      ta - Strings, plucked--Harp
+      tb - Strings, plucked--Guitar
+      tc - Strings, plucked--Lute
+      td - Strings, plucked--Mandolin
+      tn - Strings, plucked--Unspecified
+      tu - Strings, plucked--Unknown
+      ty - Strings, plucked--Ethnic
+      tz - Strings, plucked--Other
+      va - Voices--Soprano
+      vb - Voices--Mezzo Soprano
+      vc - Voices--Alto
+      vd - Voices--Tenor
+      ve - Voices--Baritone
+      vf - Voices--Bass
+      vg - Voices--Counter tenor
+      vh - Voices--High voice
+      vi - Voices--Medium voice
+      vj - Voices--Low voice
+      vn - Voices--Unspecified
+      vu - Voices--Unknown
+      vy - Voices--Ethnic
+      wa - Woodwinds--Flute
+      wb - Woodwinds--Oboe
+      wc - Woodwinds--Clarinet
+      wd - Woodwinds--Bassoon
+      we - Woodwinds--Piccolo
+      wf - Woodwinds--English horn
+      wg - Woodwinds--Bass clarinet
+      wh - Woodwinds--Recorder
+      wi - Woodwinds--Saxophone
+      wn - Woodwinds--Unspecified
+      wu - Woodwinds--Unknown
+      wy - Woodwinds--Ethnic
+      wz - Woodwinds--Other
+      zn - Unspecified instruments
+      zu - Unknown
+
+--Classification and Call Number Fields (05X-08X)--
+  050 - LIBRARY OF CONGRESS CALL NUMBER (R)
+   Indicators
+      First - Existence in LC collection
+         # - No information provided
+         0 - Item is in LC
+         1 - Item is not in LC
+      Second - Source of call number
+         # - No information provided [OBSOLETE]
+         0 - Assigned by LC
+         4 - Assigned by agency other than LC
+      Second - Series call number (SE) [OBSOLETE]
+         0 - No series involved
+         1 - Main series
+         2 - Subseries
+         3 - Sub-subseries
+   Subfield Codes
+      $a - Classification number (R)
+      $b - Item number (NR)
+      $d - Supplementary class number (MU) [OBSOLETE]
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R) 
+  051 - LIBRARY OF CONGRESS COPY, ISSUE, OFFPRINT STATEMENT (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+      Second - Series call number (SE) [OBSOLETE]
+         0 - No series involved
+         1 - Main series
+         2 - Subseries
+         3 - Sub-subseries
+   Subfield Codes
+      $a - Classification number (NR)
+      $b - Item number (NR)
+      $c - Copy information (NR)
+      $8 - Field link and sequence number (R)
+  052 - GEOGRAPHIC CLASSIFICATION (R)
+   Indicators
+      First - Code source
+         # - Library of Congress Classification
+         0 - U.S. Dept. of Defense Classification [OBSOLETE]
+         1 - U.S. Dept. of Defense Classification
+         7 - Source specified in subfield $2
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Geographic classification area code (NR)
+      $b - Geographic classification subarea code (R)
+      $c - Subject (MP) [OBSOLETE]
+      $d - Populated place name (R)
+      $2 - Code source (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  055 - CLASSIFICATION NUMBERS ASSIGNED IN CANADA (R)
+   Indicators
+      First - Existence in NLC collection
+         # - Information not provided
+         0 - Work held by NLC
+         1 - Work not held by NLC
+      Second - Type, completeness, source of class/call number
+         0 - LC-based call number assigned by NLC
+         1 - Complete LC class number assigned by NLC
+         2 - Incomplete LC class number assigned by NLC
+         3 - LC-based call number assigned by the contributing library
+         4 - Complete LC class number assigned by the contributing library
+         5 - Incomplete LC class number assigned by the contributing library
+         6 - Other call number assigned by NLC
+         7 - Other class number assigned by NLC
+         8 - Other call number assigned by the contributing library
+         9 - Other class number assigned by the contributing library
+   Subfield Codes
+      $a - Classification number (NR)
+      $b - Item number (NR)
+      $2 - Source of call/class number (NR)
+      $8 - Field link and sequence number (R)  
+  060 - NATIONAL LIBRARY OF MEDICINE CALL NUMBER (R)
+   Indicators
+      First - Existence in NLM collection
+         # - No information provided
+         0 - Item is in NLM
+         1 - Item is not in NLM
+      Second - Source of call number
+         # - No information provided [OBSOLETE]
+         0 - Assigned by NLM
+         4 - Assigned by agency other than NLM
+      Second - Series call number (SE) [OBSOLETE]
+         0 - No series involved
+         1 - Main series
+         2 - Subseries
+         3 - Sub-subseries
+   Subfield Codes
+      $a - Classification number (R)
+      $b - Item number (NR)
+      $8 - Field link and sequence number (R)
+  061 - NATIONAL LIBRARY OF MEDICINE COPY STATEMENT (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+      Second - Series call number (SE) [OBSOLETE]
+         0 - No series involved
+         1 - Main series
+         2 - Subseries
+         3 - Sub-subseries
+   Subfield Codes
+      $a - Classification number (R)
+      $b - Item number (NR)
+      $c - Copy information (NR)
+      $8 - Field link and sequence number (R)
+  066 - CHARACTER SETS PRESENT (NR)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Primary G0 character set (NR)
+      $b - Primary G1 character set (NR)
+      $c - Alternate G0 or G1 character set (R)
+  070 - NATIONAL AGRICULTURAL LIBRARY CALL NUMBER (R)
+   Indicators
+      First - Existence in NAL collection
+         0 - Item is in NAL
+         1 - Item is not in NAL
+      Second - Undefined
+         # - Undefined
+      Second - Series call number (SE) [OBSOLETE]
+         0 - No series involved
+         1 - Main series
+         2 - Subseries
+         3 - Sub-subseries
+   Subfield Codes
+      $a - Classification number (R)
+      $b - Item number (NR)
+      $8 - Field link and sequence number (R)  
+  071 - NATIONAL AGRICULTURAL LIBRARY COPY STATEMENT (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+      Second - Series call number (SE) [OBSOLETE]
+         0 - No series involved
+         1 - Main series
+         2 - Subseries
+         3 - Sub-subseries
+   Subfield Codes
+      $a - Classification number (R)
+      $b - Item number (NR)
+      $c - Copy information (NR)
+      $8 - Field link and sequence number (R)
+  072 - SUBJECT CATEGORY CODE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Code source
+         0 - NAL subject category code list
+         7 - Code source specified in subfield $2
+   Subfield Codes
+      $a - Subject category code (NR)
+      $x - Subject category code subdivision (R)
+      $2 - Code source (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)
+  074 - GPO ITEM NUMBER (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - GPO item number (NR)
+      $z - Canceled/invalid GPO item number (R)
+      $8 - Field link and sequence number (R)  
+  080 - UNIVERSAL DECIMAL CLASSIFICATION NUMBER (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Code
+      $a - Universal Decimal Classification number (NR)
+      $b - Item number (NR)
+      $x - Common auxiliary subdivision (R)
+      $2 - Edition identifier (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  082 - DEWEY DECIMAL CLASSIFICATION NUMBER (R)
+   Indicators
+      First - Type of edition
+         # - No edition information recorded (BK CF MU VM SE) [OBSOLETE]
+         0 - Full edition
+         1 - Abridged edition
+         2 - Abridged NST version (BK MU VM SE) [OBSOLETE]
+      Second - Source of classification number
+         # - No information provided
+         0 - Assigned by LC
+         4 - Assigned by agency other than LC
+   Subfield Codes
+      $a - Classification number (R)
+      $b - Item number (NR)
+      $b - DDC number--abridged NST version (SE) [OBSOLETE]
+      $2 - Edition number (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  084 - OTHER CLASSIFICATION NUMBER (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Classification number (R)
+      $b - Item number (NR)
+      $2 - Source of number (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  086 - GOVERNMENT DOCUMENT CLASSIFICATION NUMBER (R)
+   Indicators
+      First - Number source
+         # - Source specified in subfield $2
+         # - Undefined (BK MP MU VM SE) [OBSOLETE]
+         0 - Superintendent of Documents Classification System
+         1 - Government of Canada Publications: Outline of Classification
+      First - Government jurisdiction (BK MP MU VM SE) [OBSOLETE]
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Classification number (NR)
+      $z - Canceled/invalid classification number (R)
+      $2 - Number source (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R) 
+  088 - REPORT NUMBER (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Report number (NR)
+      $z - Canceled/invalid report number (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)
+  090 - LOCAL CALL NUMBER (BK AM CF MP MU VM SE) [OBSOLETE]
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Local class number (NR)
+      $b - Local Cutter number (NR)
+  090 - SHELF LOCATION (AM)[OBSOLETE]
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Code
+      $a - Shelf location (NR)
+  091 - MICROFILM SHELF LOCATION (AM) [OBSOLETE]
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Code
+      $a - Microfilm shelf location (NR)
+
+--Main Entry Fields (1XX)--
+  100 - MAIN ENTRY--PERSONAL NAME (NR)
+   Indicators
+      First - Type of personal name entry element
+         0 - Forename
+         1 - Surname
+         2 - Multiple surname [OBSOLETE]
+         3 - Family name
+      Second - Undefined
+         # - Undefined
+      Second - Main entry/subject relationship (BK MU SE) [OBSOLETE]
+   Subfield Codes
+      $a - Personal name (NR)
+      $b - Numeration (NR)
+      $c - Titles and other words associated with a name (R)
+      $d - Dates associated with a name (NR)
+      $e - Relator term (R)
+      $f - Date of a work (NR)
+      $g - Miscellaneous information (NR)
+      $j - Attribution qualifier (R)
+      $k - Form subheading (R)
+      $l - Language of a work (NR)
+      $n - Number of part/section of a work (R)
+      $p - Name of part/section of a work (R)
+      $q - Fuller form of name (NR)
+      $t - Title of a work (NR)
+      $u - Affiliation (NR)
+      $4 - Relator code (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  110 - MAIN ENTRY--CORPORATE NAME (NR)
+   Indicators
+      First - Type of corporate name entry element
+         0 - Inverted name
+         1 - Jurisdiction name
+         2 - Name in direct order
+      Second - Undefined
+         # - Undefined
+      Second - Main entry/subject relationship (BK MU SE) [OBSOLETE]
+   Subfield Codes
+      $a - Corporate name or jurisdiction name as entry element (NR)
+      $b - Subordinate unit (R)
+      $c - Location of meeting (NR)
+      $d - Date of meeting or treaty signing (R)
+      $e - Relator term (R)
+      $f - Date of a work (NR)
+      $g - Miscellaneous information (NR)
+      $k - Form subheading (R)
+      $l - Language of a work (NR)
+      $n - Number of part/section/meeting (R)
+      $p - Name of part/section of a work (R)
+      $t - Title of a work (NR)
+      $u - Affiliation (NR)
+      $4 - Relator code (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  111 - MAIN ENTRY--MEETING NAME (NR)
+   Indicators
+      First - Type of meeting name entry element
+         0 - Inverted name 
+         1 - Jurisdiction name
+         2 - Name in direct order
+      Second - Undefined
+         # - Undefined
+
+      Second - Main entry/subject relationship (BK MU SE) [OBSOLETE]
+   Subfield Codes
+      $a - Meeting name or jurisdiction name as entry element (NR)
+      $b - Number (BK CF MP MU SE VM MX) [OBSOLETE]
+      $c - Location of meeting (NR)
+      $d - Date of meeting (NR)
+      $e - Subordinate unit (R)
+      $f - Date of a work (NR)
+      $g - Miscellaneous information (NR)
+      $k - Form subheading (R)
+      $l - Language of a work (NR)
+      $n - Number of part/section/meeting (R)
+      $p - Name of part/section of a work (R)
+      $q - Name of meeting following jurisdiction name entry element (NR)
+      $t - Title of a work (NR)
+      $u - Affiliation (NR)
+      $4 - Relator code (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  130 - MAIN ENTRY--UNIFORM TITLE (NR)
+   Indicators 
+      First - Nonfiling characters
+         0-9 - Number of nonfiling characters present
+         # - Nonfiling characters not specified [OBSOLETE]
+      Second - Undefined
+         # - Undefined
+      Second - Main entry/subject relationship (BK MU SE) [OBSOLETE]
+   Subfield Codes
+      $a - Uniform title (NR)
+      $d - Date of treaty signing (R)
+      $f - Date of a work (NR)
+      $g - Miscellaneous information (NR)
+      $h - Medium (NR)
+      $k - Form subheading (R)
+      $l - Language of a work (NR)
+      $m - Medium of performance for music (R)
+      $n - Number of part/section of a work (R)
+      $o - Arranged statement for music (NR)
+      $p - Name of part/section of a work (R)
+      $r - Key for music (NR)
+      $s - Version (NR)
+      $t - Title of a work (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)
+
+--Title and Title-Related Fields (20X-24X)--
+  210 - ABBREVIATED TITLE (R)
+   Indicators
+      First - Title added entry
+         0 - No added entry
+         1 - Added entry
+      Second - Type
+         # - Abbreviated key title
+         0 - Other abbreviated title
+   Subfield Codes
+      $a - Abbreviated title (NR)
+      $b - Qualifying information (NR)
+      $2 - Source (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  211 - ACRONYM OR SHORTENED TITLE (R) [OBSOLETE]
+   Indicators
+      First - Title added entry
+         0 - No title added entry
+         1 - Title added entry
+      Second - Nonfiling characters
+         0-9 - Number of nonfiling characters present
+   Subfield Codes
+      $a - Acronym or shortened title (NR)
+      $6 - Linkage (NR)
+  212 - VARIANT ACCESS TITLE (R) [OBSOLETE]
+   Indicators
+      First - Title added entry
+         0 - No title added entry
+         1 - Title added entry
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Variant access title (NR)
+      $6 - Linkage (NR)
+  214 - AUGMENTED TITLE (R) [OBSOLETE]
+   Indicators
+      First - Title added entry
+         0 - No title added entry
+         1 - Title added entry
+      Second - Nonfiling characters
+         0-9 - Number of nonfiling characters present
+   Subfield Codes
+      $a - Augmented title (NR)
+      $6 - Linkage (NR)
+  222 - KEY TITLE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      First - Specifies whether variant title and/or added entry is required
+              (CF SE) [OBSOLETE]
+         0 - No key title added entry; title proper same
+         1 - Key title added entry; title proper different
+         2 - Key title added entry; title proper same
+         3 - No key title added entry; title proper different
+      Second - Nonfiling characters
+         0-9 - Number of nonfiling characters
+   Subfield Codes
+      $a - Key title (NR)
+      $b - Qualifying information (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)
+  240 - UNIFORM TITLE (NR)
+   Indicators
+      First - Uniform title printed or displayed
+         0 - Not printed or displayed
+         1 - Printed or displayed
+         2 - Not printed on card, title added entry (MU) [OBSOLETE]
+         3 - Printed on card, title added entry (MU) [OBSOLETE]
+      Second - Nonfiling characters
+         0-9 - Number of nonfiling characters
+   Subfield Codes
+      $a - Uniform title (NR)
+      $d - Date of treaty signing (R)
+      $f - Date of a work (NR)
+      $g - Miscellaneous information (NR)
+      $h - Medium (NR)
+      $k - Form subheading (R)
+      $l - Language of a work (NR)
+      $m - Medium of performance for music (R)
+      $n - Number of part/section of a work (R)
+      $o - Arranged statement for music (NR)
+      $p - Name of part/section of a work (R)
+      $r - Key for music (NR)
+      $s - Version (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  241 - ROMANIZED TITLE (BK AM CF MP MU VM) (NR) [OBSOLETE]
+   Indicators
+      First - Title added entry
+         0 - No title added entry
+         1 - Title added entry
+      Second - Nonfiling characters
+         0-9 - Number of nonfiling characters
+   Subfield Codes
+      $a - Romanized title (NR)
+      $h - Medium (NR)
+  242 - TRANSLATION OF TITLE BY CATALOGING AGENCY (R)
+   Indicators
+      First - Title added entry
+         0 - No added entry
+         1 - Added entry
+      Second - Nonfiling characters
+         0-9 - Number of nonfiling characters
+   Subfield Codes
+      $a - Title (NR)
+      $b - Remainder of title (NR)
+      $c - Statement of responsibility, etc. (NR)
+      $d - Designation of section (BK AM MP MU VM SE) [OBSOLETE]
+      $e - Name of part/section (BK AM MP MU VM SE) [OBSOLETE]
+      $h - Medium (NR)
+      $n - Number of part/section of a work (R)
+      $p - Name of part/section of a work (R)
+      $y - Language code of translated title (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  243 - COLLECTIVE UNIFORM TITLE (NR)
+   Indicators 
+      First - Uniform title printed or displayed
+         0 - Not printed or displayed
+         1 - Printed or displayed
+         2 - Not printed on card, title added entry (MU) [OBSOLETE]
+         3 - Printed on card, title added entry (MU) [OBSOLETE]
+      Second - Nonfiling characters
+         0-9 - Number of nonfiling characters
+   Subfield Codes
+      $a - Uniform title (NR)
+      $d - Date of treaty signing (R)
+      $f - Date of a work (NR)
+      $g - Miscellaneous information (NR)
+      $h - Medium (NR)
+      $k - Form subheading (R)
+      $l - Language of a work (NR)
+      $m - Medium of performance for music (R)
+      $n - Number of part/section of a work (R)
+      $o - Arranged statement for music (NR)
+      $p - Name of part/section of a work (R)
+      $r - Key for music (NR)
+      $s - Version (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R) 
+  245 - TITLE STATEMENT (NR)
+   Indicators
+      First - Title added entry
+         0 - No added entry
+         1 - Added entry
+      Second - Nonfiling characters
+         0-9 - Number of nonfiling characters
+   Subfield Codes
+      $a - Title (NR)
+      $b - Remainder of title (NR)
+      $c - Statement of responsibility, etc. (NR)
+      $d - Designation of section (SE) [OBSOLETE]
+      $e - Name of part/section (SE) [OBSOLETE]
+      $f - Inclusive dates (NR)
+      $g - Bulk dates (NR)
+      $h - Medium (NR)
+      $k - Form (R)
+      $n - Number of part/section of a work (R)
+      $p - Name of part/section of a work (R)
+      $s - Version (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)
+  246 - VARYING FORM OF TITLE (R)
+   Indicators
+      First - Note/added entry controller
+         0 - Note, no added entry
+         1 - Note, added entry
+         2 - No note, no title added entry
+         3 - No note, added entry 
+      Second - Type of title
+         # - No type specified
+         0 - Portion of title
+         1 - Parallel title
+         2 - Distinctive title
+         3 - Other title
+         4 - Cover title
+         5 - Added title page title
+         6 - Caption title
+         7 - Running title
+         8 - Spine title
+   Subfield Codes
+      $a - Title proper/short title (NR)
+      $b - Remainder of title (NR)
+      $d - Designation of section (SE) [OBSOLETE]
+      $e - Name of part/section (SE) [OBSOLETE]
+      $f - Date or sequential designation (NR)
+      $g - Miscellaneous information (NR)
+      $h - Medium (NR)
+      $i - Display text (NR)
+      $n - Number of part/section of a work (R)
+      $p - Name of part/section of a work (R)
+      $5 - Institution to which field applies (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R) 
+  247 - FORMER TITLE (R)
+   Indicators
+      First - Title added entry
+         0 - No added entry
+         1 - Added entry
+      Second - Note controller
+         0 - Display note
+         1 - Do not display note
+   Subfield Codes
+      $a - Title (NR)
+      $b - Remainder of title (NR)
+      $d - Designation of section (SE) [OBSOLETE]
+      $e - Name of part/section (SE) [OBSOLETE]
+      $f - Date or sequential designation (NR)
+      $g - Miscellaneous information (NR)
+      $h - Medium (NR)
+      $n - Number of part/section of a work (R)
+      $p - Name of part/section of a work (R)
+      $x - International Standard Serial Number (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)
+
+--Edition, Imprint, etc. Fields 250-270--
+  250 - EDITION STATEMENT (NR)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Edition statement (NR)
+      $b - Remainder of edition statement(NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)
+  254 - MUSICAL PRESENTATION STATEMENT (NR)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Musical presentation statement (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  255 - CARTOGRAPHIC MATHEMATICAL DATA (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Statement of scale (NR)
+      $b - Statement of projection (NR)
+      $c - Statement of coordinates (NR)
+      $d - Statement of zone (NR)
+      $e - Statement of equinox (NR)
+      $f - Outer G-ring coordinate pairs (NR)
+      $g - Exclusion G-ring coordinate pairs (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  256 - COMPUTER FILE CHARACTERISTICS (NR)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Computer file characteristics (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R) 
+  257 - COUNTRY OF PRODUCING ENTITY FOR ARCHIVAL FILMS (NR)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Country of producing entity (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  260 - PUBLICATION, DISTRIBUTION, ETC. (IMPRINT) (R)
+   Indicators
+      First - Sequence of publishing statements
+         # - Not applicable/No information provided/Earliest available publisher
+         2 - Intervening publisher
+         3 - Current/latest publisher
+      Second - Undefined
+         # - Undefined
+      First - Presence of publisher in imprint (BK MP MU SE) [OBSOLETE]
+         0 - Publisher, distributor, etc. is present
+         1 - Publisher, distributor, etc. is not present
+      Second - Added entry/publisher relationship (SE) [OBSOLETE]
+         0 - Publisher, distributor, etc. not same as issuing body in added entry
+         1 - Publisher, distributor, etc. same as issuing body in added entry
+   Subfield Codes
+      $a - Place of publication, distribution, etc. (R)
+      $b - Name of publisher, distributor, etc. (R)
+      $c - Date of publication, distribution, etc. (R)
+      $d - Plate or publisher's number for music (Pre-AACR 2) (NR) [LOCAL]
+      $e - Place of manufacture (NR)
+      $f - Manufacturer (NR)
+      $g - Date of manufacture (NR)
+      $3 - Materials specified (NR)
+          $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  261 - IMPRINT STATEMENT FOR FILMS (Pre-AACR 1 Revised) (NR) [LOCAL]
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Producing company (R)
+      $b - Releasing company (primary distributor) (R)
+      $d - Date of production, release, etc. (R)
+      $e - Contractual producer (R)
+      $f - Place of production, release, etc. (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  262 - IMPRINT STATEMENT FOR SOUND RECORDINGS (Pre-AACR 2) (NR) [LOCAL]
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Place of production, release, etc. (NR)
+      $b - Publisher or trade name (NR)
+      $c - Date of production, release, etc. (NR)
+      $k - Serial identification (NR)
+      $l - Matrix and/or take number (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  263 - PROJECTED PUBLICATION DATE (NR)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Code
+      $a - Projected publication date (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  265 - SOURCE FOR ACQUISITION/SUBSCRIPTION ADDRESS (NR) [OBSOLETE]
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Source for acquisition/subscription address (R)
+      $6 - Linkage (NR)
+  270 - ADDRESS (R)
+   Indicators
+      First - Level
+         # - No level specified
+         1 - Primary
+         2 - Secondary
+      Second - Type of address
+         # - No type specified
+         0 - Mailing
+         7 - Type specified in subfield $i
+   Subfield Codes
+      $a - Address (R)
+      $b - City (NR)
+      $c - State or province (NR)
+      $d - Country (NR)
+      $e - Postal code (NR)
+      $f - Terms preceding attention name (NR)
+      $g - Attention name (NR)
+      $h - Attention position (NR)
+      $i - Type of address (NR)
+      $j - Specialized telephone number (R)
+      $k - Telephone number (R)
+      $l - Fax number (R)
+      $m - Electronic mail address (R)
+      $n - TDD or TTY number (R)
+      $p - Contact person (R)
+      $q - Title of contact person (R)
+      $r - Hours (R)
+      $z - Public note (R)
+      $4 - Relator code (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)
+          
+--Physical Description, etc. Fields (3XX)--
+  300 - PHYSICAL DESCRIPTION (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Extent (R)
+      $b - Other physical details (NR)
+      $c - Dimensions (R)
+      $e - Accompanying material (NR)
+      $f - Type of unit (R)
+      $g - Size of unit (R)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  301 - PHYSICAL DESCRIPTION FOR FILMS (PRE-AACR 2) (VM) [OBSOLETE]
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Extent of item (NR)
+      $b - Sound characteristics (NR)
+      $c - Color characteristics (NR)
+      $d - Dimensions (NR)
+      $e - Accompanying material (NR)
+      $f - Speed (NR)
+  302 - PAGE OR ITEM COUNT (BK AM) [OBSOLETE]
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Page count (NR)
+  303 - UNIT COUNT (AM) [OBSOLETE]
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Unit count (NR)
+  304 - LINEAR FOOTAGE (AM) [OBSOLETE]
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Linear footage (NR)
+  305 - PHYSICAL DESCRIPTION FOR SOUND RECORDINGS (Pre-AACR 2) (MU) [OBSOLETE]
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Extent (NR)
+      $b - Other physical details (NR)
+      $c - Dimensions (NR)
+      $d - Microgroove or standard (NR)
+      $e - Stereophonic, monaural (NR)
+      $f - Number of tracks (NR)
+      $m - Serial identification (NR)
+      $n - Matrix and/or take number (NR)
+      $6 - Linkage (NR)
+  306 - PLAYING TIME (NR)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Code
+      $a - Playing time (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  307 - HOURS, ETC. (R)
+   Indicators
+      First - Display constant controller
+         # - Hours
+         8 - No display constant generated
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Hours (NR)
+      $b - Additional information (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  308 - PHYSICAL DESCRIPTION FOR FILMS (ARCHIVAL) (VM) [OBSOLETE]
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Number of reels (NR)
+      $b - Footage (NR)
+      $c - Sound characteristics (NR)
+      $d - Color characteristics (NR)
+      $e - Width (NR)
+      $f - Presentation format (NR)
+      $6 - Linkage (NR)
+  310 - CURRENT PUBLICATION FREQUENCY (NR)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Current publication frequency (NR)
+      $b - Date of current publication frequency (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  315 - FREQUENCY (NR) (CF MP) [OBSOLETE]
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Frequency (R)
+      $b - Dates of frequency (R)
+      $6 - Linkage (NR)
+ 321 - FORMER PUBLICATION FREQUENCY (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Former publication frequency (NR)
+      $b - Dates of former publication frequency (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R) 
+  340 - PHYSICAL MEDIUM (R)
+   Indicators 
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Material base and configuration (R)
+      $b - Dimensions (R)
+      $c - Materials applied to surface (R)
+      $d - Information recording technique (R)
+      $e - Support (R)
+      $f - Production rate/ratio (R)
+      $h - Location within medium (R)
+      $i - Technical specifications of medium (R)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  342 - GEOSPATIAL REFERENCE DATA (R)
+   Indicators
+      First - Geospatial reference dimension
+         0 - Horizontal coordinate system
+         1 - Vertical coordinate system
+      Second - Geospatial reference method
+         0 - Geographic
+         1 - Map projection
+         2 - Grid coordinate system
+         3 - Local planar
+         4 - Local
+         5 - Geodetic model
+         6 - Altitude
+         7 - Method specified in $2
+         8 - Depth
+   Subfield Codes
+      $a - Name (NR)
+      $b - Coordinate or distance units (NR)
+      $c - Latitude resolution (NR)
+      $d - Longitude resolution (NR)
+      $e - Standard parallel or oblique line latitude (R)
+      $f - Oblique line longitude (R)
+      $g - Longitude of central meridian or projection center (NR)
+      $h - Latitude of projection origin or projection center (NR)
+      $i - False easting (NR)
+      $j - False northing (NR)
+      $k - Scale factor (NR)
+      $l - Height of perspective point above surface (NR)
+      $m - Azimuthal angle (NR)
+      $n - Azimuth measure point longitude or straight vertical 
+               longitude from pole (NR)
+      $o - Landsat number and path number (NR)
+      $p - Zone identifier (NR)
+      $q - Ellipsoid name (NR)
+      $r - Semi-major axis (NR)
+      $s - Denominator of flattening ratio (NR)
+      $t - Vertical resolution (NR)
+      $u - Vertical encoding method (NR)
+      $v - Local planar, local, or other projection or grid description (NR)
+      $w - Local planar or local georeference information (NR)
+      $2 - Reference method used (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  343 - PLANAR COORDINATE DATA (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Planar coordinate encoding method (NR)
+      $b - Planar distance units (NR)
+      $c - Abscissa resolution (NR)
+      $d - Ordinate resolution (NR)
+      $e - Distance resolution (NR)
+      $f - Bearing resolution (NR)
+      $g - Bearing units (NR)
+      $h - Bearing reference direction (NR)
+      $i - Bearing reference meridian (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  350 - PRICE (NR) (BK AM CF MU VM SE) [OBSOLETE] 
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Price (R)
+      $b - Form of issue (R)
+      $6 - Linkage (NR)
+  351 - ORGANIZATION AND ARRANGEMENT OF MATERIALS (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Organization (R)
+      $b - Arrangement (R)
+      $c - Hierarchical level (NR)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  352 - DIGITAL GRAPHIC REPRESENTATION (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Direct reference method (NR)
+      $b - Object type (R)
+      $c - Object count (R)
+      $d - Row count (NR)
+      $e - Column count (NR)
+      $f - Vertical count (NR)
+      $g - VPF topology level (NR)
+      $i - Indirect reference description (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R) 
+  355 - SECURITY CLASSIFICATION CONTROL (R)
+   Indicators
+      First - Controlled element
+         0 - Document
+         1 - Title
+         2 - Abstract
+         3 - Contents note
+         4 - Author
+         5 - Record
+         8 - Other element
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Security classification (NR)
+      $b - Handling instructions (R)
+      $c - External dissemination information (R)
+      $d - Downgrading or declassification event (NR)
+      $e - Classification system (NR)
+      $f - Country of origin code (NR)
+      $g - Downgrading date (NR)
+      $h - Declassification date (NR)
+      $j - Authorization (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  357 - ORIGINATOR DISSEMINATION CONTROL (NR)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfields
+      $a - Originator control term (NR)
+      $b - Originating agency (R)
+      $c - Authorized recipients of material (R)
+      $g - Other restrictions (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  359 - RENTAL PRICE (VM) [OBSOLETE]
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Code
+      $a - Rental price (NR)
+  362 - DATES OF PUBLICATION AND/OR SEQUENTIAL DESIGNATION (R)
+   Indicators
+      First - Format of date
+         0 - Formatted style
+         1 - Unformatted note
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Dates of publication and/or sequential designation (NR)
+      $z - Source of information (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)
+
+--Series Statement Fields (4XX)--
+  400 - SERIES STATEMENT/ADDED ENTRY--PERSONAL NAME  (R) [US-LOCAL]
+   Indicators
+      First - Type of personal name entry element
+         0 - Forename
+         1 - Surname
+         2 - Multiple surname [OBSOLETE]
+         3 - Family name
+      Second - Pronoun represents main entry
+         0 - Main entry not represented by pronoun
+         1 - Main entry represented by pronoun
+   Subfield Codes
+      $a - Personal name (NR)
+      $b - Numeration (NR) 
+      $c - Titles and other words associated with a name (R)
+      $d - Dates associated with a name (NR)
+      $e - Relator term (R)
+      $f - Date of a work (NR)
+      $g - Miscellaneous information (NR)
+      $k - Form subheading (R)
+      $l - Language of a work (NR)
+      $n - Number of part/section of a work (R)
+      $p - Name of part/section of a work (R)
+      $q - Fuller form of name (NR) [OBSOLETE]
+      $t - Title of a work (NR)
+      $u - Affiliation (NR)
+      $v - Volume number/sequential designation  (NR)
+      $x - International Standard Serial Number  (NR)
+      $4 - Relator code (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number  (R)   
+  410 - SERIES STATEMENT/ADDED ENTRY--CORPORATE NAME (R) [US-LOCAL]
+   Indicators
+      First - Type of corporate name entry element
+         0 - Inverted name
+         1 - Jurisdiction name
+         2 - Name in direct order
+      Second - Pronoun represents main entry
+         0 - Main entry not represented by pronoun
+         1 - Main entry represented by pronoun
+   Subfield Codes
+      $a - Corporate name or jurisdiction name as entry element (NR)
+      $b - Subordinate unit (R)
+      $c - Location of meeting (NR)
+      $d - Date of meeting or treaty signing (R)
+      $e - Relator term (R)
+      $f - Date of a work (NR)
+      $g - Miscellaneous information (NR)
+      $k - Form subheading (R)
+      $l - Language of a work (NR)
+      $n - Number of part/section/meeting (R)
+      $p - Name of part/section of a work (R)
+      $t - Title of a work (NR)
+      $u - Affiliation (NR)
+      $v - Volume number/sequential designation  (NR)
+      $x - International Standard Serial Number (NR)
+      $4 - Relator code (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  411 - SERIES STATEMENT/ADDED ENTRY--MEETING NAME (R) [US-LOCAL]
+   Indicators
+      First - Type of meeting name entry element
+         0 - Inverted name
+         1 - Jurisdiction name
+         2 - Name in direct order
+      Second - Pronoun represents main entry
+         0 - Main entry not represented by pronoun
+         1 - Main entry represented by pronoun
+   Subfield Codes
+      $a - Meeting name or jurisdiction name as entry element (NR)
+      $b - Number  [OBSOLETE]
+      $c - Location of meeting (NR)
+      $d - Date of meeting (NR)
+      $e - Subordinate unit (R)
+      $f - Date of a work (NR)
+      $g - Miscellaneous information (NR)
+      $k - Form subheading (R)
+      $l - Language of a work (NR)
+      $n - Number of part/section/meeting (R)
+      $p - Name of part/section of a work (R)
+      $q - Name of meeting following jurisdiction name entry element (NR)
+      $t - Title of a work (NR)
+      $u - Affiliation (NR)
+      $v - Volume number/sequential designation  (NR)
+      $x - International Standard Serial Number (NR)
+      $4 - Relator code (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R) 
+  440 - SERIES STATEMENT/ADDED ENTRY--TITLE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Nonfiling characters
+         0-9 - Number of nonfiling characters 
+   Subfield Codes
+      $a - Title (NR)
+      $n - Number of part/section of a work (R)
+      $p - Name of part/section of a work (R)
+      $v - Volume number/sequential designation  (NR)
+      $x - International Standard Serial Number (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  490 - SERIES STATEMENT (R)
+   Indicators
+      First - Specifies whether series is traced
+         0 - Series not traced
+         1 - Series traced differently
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Series statement (R)
+      $l - Library of Congress call number (NR)
+      $v - Volume number/sequential designation  (R)
+      $x - International Standard Serial Number (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)
+          
+--Note Fields (Part 1: 50X-53X)--
+  500 - GENERAL NOTE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - General note (NR)
+      $l - Library of Congress call number (SE) [OBSOLETE]
+      $x - International Standard Serial Number (SE) [OBSOLETE]
+      $z - Source of note information (AM SE) [OBSOLETE]
+      $3 - Materials specified (NR)
+      $5 - Institution to which field applies (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  501 - WITH NOTE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - With note (NR)
+      $5 - Institution to which field applies (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  502 - DISSERTATION NOTE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Dissertation note (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  503 - BIBLIOGRAPHIC HISTORY NOTE (R) (BK CF MU) [OBSOLETE]
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Bibliographic history note (NR)
+      $6 - Linkage (NR)
+  504 - BIBLIOGRAPHY, ETC. NOTE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Bibliography, etc. note (NR)
+      $b - Number of references (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  505 - FORMATTED CONTENTS NOTE (R)
+   Indicators
+      First - Display constant controller
+         0 - Contents
+         1 - Incomplete contents
+         2 - Partial contents
+         8 - No display constant generated
+      Second - Level of content designation
+         # - Basic
+         0 - Enhanced
+   Subfield Codes
+      $a - Formatted contents note (NR)
+      $g - Miscellaneous information (R)
+      $r - Statement of responsibility (R)
+      $t - Title (R)
+      $u - Uniform Resource Identifier (R) 
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  506 - RESTRICTIONS ON ACCESS NOTE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Terms governing access (NR)
+      $b - Jurisdiction (R)
+      $c - Physical access provisions (R)
+      $d - Authorized users (R)
+      $e - Authorization (R)
+      $u - Uniform Resource Identifier (R)
+      $3 - Materials specified (NR)
+      $5 - Institution to which field applies (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  507 - SCALE NOTE FOR GRAPHIC MATERIAL (NR)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Representative fraction of scale note (NR)
+      $b - Remainder of scale note (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  508 - CREATION/PRODUCTION CREDITS NOTE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Creation/production credits note (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  510 - CITATION/REFERENCES NOTE (R)
+   Indicators
+      First - Coverage/location in source
+         0 - Coverage unknown
+         1 - Coverage complete
+         2 - Coverage is selective
+         3 - Location in source not given
+         4 - Location in source given
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Name of source (NR)
+      $b - Coverage of source (NR)
+      $c - Location within source (NR)
+      $x - International Standard Serial Number (NR)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  511 - PARTICIPANT OR PERFORMER NOTE (R)
+   Indicators
+      First - Display constant controller
+         # - No information provided (VM MU) [OBSOLETE]
+         0 - No display constant generated
+         1 - Cast
+         2 - Presenter (VM MU) [OBSOLETE]
+         3 - Narrator (VM MU) [OBSOLETE]
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Participant or performer note (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R) 
+  512 - EARLIER OR LATER VOLUMES SEPARATELY CATALOGED NOTE (SE) (R) [OBSOLETE]
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Earlier or later volumes separately cataloged note (NR)
+      $6 - Linkage (NR)
+  513 - TYPE OF REPORT AND PERIOD COVERED NOTE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Type of report (NR)
+      $b - Period covered (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  514 - DATA QUALITY NOTE (NR)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Attribute accuracy report (NR)
+      $b - Attribute accuracy value (R)
+      $c - Attribute accuracy explanation (R)
+      $d - Logical consistency report (NR)
+      $e - Completeness report (NR)
+      $f - Horizontal position accuracy report (NR)
+      $g - Horizontal position accuracy value (R)
+      $h - Horizontal position accuracy explanation (R)
+      $i - Vertical positional accuracy report (NR)
+      $j - Vertical positional accuracy value (R)
+      $k - Vertical positional accuracy explanation (R)
+      $m - Cloud cover (NR)
+      $u - Uniform Resource Identifier (R)
+      $z - Display note (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)    
+  515 - NUMBERING PECULIARITIES NOTE (R)
+   Indicators 
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Numbering peculiarities note (NR)
+      $z - Source of note information (NR) (SE) [OBSOLETE]
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  516 - TYPE OF COMPUTER FILE OR DATA NOTE (R)
+   Indicators
+      First - Display constant controller
+         # - Type of file
+         8 - No display constant generated
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Type of computer file or data note (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)
+   517 - CATEGORIES OF FILMS NOTE (ARCHIVAL) (VM) (NR) [OBSOLETE]
+   Indicators
+      First - Fiction specification
+         0 - Nonfiction
+         1 - Fiction
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Different formats (NR)
+      $b - Content descriptors (R)
+      $c - Additional animation techniques (R)
+  518 - DATE/TIME AND PLACE OF AN EVENT NOTE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Date/time and place of an event note (NR)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  520 - SUMMARY, ETC. (R)
+   Indicators
+      First - Display constant controller
+         # - Summary
+         0 - Subject
+         1 - Review
+         2 - Scope and content
+         3 - Abstract
+         8 - No display constant generated
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Summary, etc. note (NR)
+      $b - Expansion of summary note (NR)
+      $u - Uniform Resource Identifier (R)
+      $z - Source of note information (NR) [OBSOLETE]
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  521 - TARGET AUDIENCE NOTE (R)
+   Indicators
+      First - Display constant controller
+         # - Audience
+         0 - Reading grade level
+         1 - Interest age level
+         2 - Interest grade level
+         3 - Special audience characteristics
+         4 - Motivation interest level
+         8 - No display constant generated
+      Second - Undefined 
+         # - Undefined
+   Subfield Codes
+      $a - Target audience note (R)
+      $b - Source (NR)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  522 - GEOGRAPHIC COVERAGE NOTE (R)
+   Indicators
+      First - Display constant controller
+         # - Geographic coverage
+         8 - No display constant generated
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Geographic coverage note (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)
+ 523 - TIME PERIOD OF CONTENT NOTE (NR) (CF) [OBSOLETE]
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Time period of content note (NR)
+      $b - Dates of data collection note (NR)
+      $6 - Linkage (NR)
+  524 - PREFERRED CITATION OF DESCRIBED MATERIALS NOTE (R)
+   Indicators
+      First - Display constant controller
+         # - Cite as
+         8 - No display constant generated
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Preferred citation of described materials note (NR)
+      $2 - Source of schema used (NR)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  525 - SUPPLEMENT NOTE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Supplement note (NR)
+      $z - Source of note information (NR) (SE) [OBSOLETE]
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  526 - STUDY PROGRAM INFORMATION NOTE (R)
+   Indicators
+      First - Display constant controller
+         0 - Reading program
+         8 - No display constant generated
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Program name (NR)
+      $b - Interest level (NR)
+      $c - Reading level (NR)
+      $d - Title point value (NR)
+      $i - Display text (NR)
+      $x - Nonpublic note (R)
+      $z - Public note (R)
+      $5 - Institution to which field applies (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  527 - CENSORSHIP NOTE (VM) (R) [OBSOLETE]
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Censorship note (NR)
+      $6 - Linkage (NR)
+  530 - ADDITIONAL PHYSICAL FORM AVAILABLE NOTE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Additional physical form available note (NR)
+      $b - Availability source (NR)
+      $c - Availability conditions (NR)
+      $d - Order number (NR)
+      $u - Uniform Resource Identifier (R)
+      $z - Source of note information (NR) (AM CF VM SE) [OBSOLETE]
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  533 - REPRODUCTION NOTE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Type of reproduction (NR)
+      $b - Place of reproduction (R)
+      $c - Agency responsible for reproduction (R)
+      $d - Date of reproduction (NR)
+      $e - Physical description of reproduction (NR)
+      $f - Series statement of reproduction (R)
+      $m - Dates and/or sequential designation of issues reproduced (R)
+      $n - Note about reproduction (R)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $7 - Fixed-length data elements of reproduction (NR)
+         0 - Type of date/Publication status
+         1-4 - Date 1
+         5-8 - Date 2
+         9-11 - Place of publication, production, or execution
+         12 - Frequency
+            n - Not applicable
+         13 - Regularity
+            # - Not applicable
+         14 - Form of item
+      $8 - Field link and sequence number (R)   
+  534 - ORIGINAL VERSION NOTE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+      First - Specifies presence of series statement on original (BK MP MU VM SE) [OBSOLETE]
+         0 - Note excludes series of original
+         1 - Note includes series of original
+   Subfield Codes
+      $a - Main entry of original (NR)
+      $b - Edition statement of original (NR)
+      $c - Publication, distribution, etc. of original (NR)
+      $e - Physical description, etc. of original (NR)
+      $f - Series statement of original (R)
+      $k - Key title of original (R)
+      $l - Location of original (NR)
+      $m - Material specific details (NR)
+      $n - Note about original (R)
+      $p - Introductory phrase (NR)
+      $t - Title statement of original (NR)
+      $x - International Standard Serial Number (R)
+      $z - International Standard Book Number (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  535 - LOCATION OF ORIGINALS/DUPLICATES NOTE (R)
+   Indicators 
+      First - Additional information about custodian
+         0 - Repository (AM) [OBSOLETE]
+         1 - Holder of originals
+         2 - Holder of duplicates
+         3 - Holder of oral tapes (AM) [OBSOLETE]
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Custodian (NR)
+      $b - Postal address (R)
+      $c - Country (R)
+      $d - Telecommunications address (R)
+      $g - Repository location code (NR)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+          
+--Note Fields (Part 2: 53X-58X)--
+  536 - FUNDING INFORMATION NOTE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Text of note (NR) 
+      $b - Contract number (R)
+      $c - Grant number (R)
+      $d - Undifferentiated number (R)
+      $e - Program element number (R)
+      $f - Project number (R)
+      $g - Task number (R)
+      $h - Work unit number (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  537 - SOURCE OF DATA NOTE (NR) (CF) [OBSOLETE]
+   Indicators
+      First - Display constant controller
+         # - No information provided
+         8 - No display constant generated
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Source of data note (NR)
+      $6 - Linkage (NR)
+  538 - SYSTEM DETAILS NOTE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - System details note (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  540 - TERMS GOVERNING USE AND REPRODUCTION NOTE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Terms governing use and reproduction (NR)
+      $b - Jurisdiction (NR)
+      $c - Authorization (NR)
+      $d - Authorized users (NR)
+      $u - Uniform Resource Identifier (R)
+      $3 - Materials specified (NR)
+      $5 - Institution to which field applies (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  541 - IMMEDIATE SOURCE OF ACQUISITION NOTE (R)
+   Indicators 
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Source of acquisition (NR)
+      $b - Address (NR)
+      $c - Method of acquisition (NR)
+      $d - Date of acquisition (NR)
+      $e - Accession number (NR)
+      $f - Owner (NR)
+      $h - Purchase price (NR)
+      $n - Extent (R)
+      $o - Type of unit (R)
+      $3 - Materials specified (NR)
+      $5 - Institution to which field applies (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  543 - SOLICITATION INFORMATION NOTE (AM) (R) [OBSOLETE]
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Solicitation information note (NR)
+      $6 - Linkage (NR)
+  544 - LOCATION OF OTHER ARCHIVAL MATERIALS NOTE (R)
+   Indicators
+      First - Relationship
+         # - No information provided
+         0 - Associated materials
+         1 - Related materials
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Custodian (R)
+      $b - Address (R)
+      $c - Country (R)
+      $d - Title (R)
+      $e - Provenance (R)
+      $n - Note (R)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  545 - BIOGRAPHICAL OR HISTORICAL DATA (R)
+   Indicators
+      First - Type of data
+         # - No information provided
+         0 - Biographical sketch
+         1 - Administrative history
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Biographical or historical note (NR)
+      $b - Expansion (NR)
+      $u - Uniform Resource Identifier (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  546 - LANGUAGE NOTE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Language note (NR)
+      $b - Information code or alphabet (R)
+      $z - Source of note information (NR) (SE) [OBSOLETE]
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  547 - FORMER TITLE COMPLEXITY NOTE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Former title complexity note (NR)
+      $z - Source of note information (NR) (SE) [OBSOLETE]
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  550 - ISSUING BODY NOTE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+      First - Existence of additional information (SE) [OBSOLETE]
+         0 - Repetitious
+         1 - Not repetitious
+   Subfield Codes
+      $a - Issuing body note (NR)
+      $z - Source of note information (NR) (SE) [OBSOLETE]
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  552 - ENTITY AND ATTRIBUTE INFORMATION NOTE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Entity type label (NR)
+      $b - Entity type definition and source (NR)
+      $c - Attribute label (NR)
+      $d - Attribute definition and source (NR)
+      $e - Enumerated domain value (R)
+      $f - Enumerated domain value definition and source (R)
+      $g - Range domain minimum and maximum (NR)
+      $h - Codeset name and source (NR)
+      $i - Unrepresentable domain (NR)
+      $j - Attribute units of measurement and resolution (NR)
+      $k - Beginning date and ending date of attribute values (NR)
+      $l - Attribute value accuracy (NR)
+      $m - Attribute value accuracy explanation (NR)
+      $n - Attribute measurement frequency (NR)
+      $o - Entity and attribute overview (R)
+      $p - Entity and attribute detail citation (R)
+      $u - Uniform Resource Identifier (R)
+      $z - Display note (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)
+  555 - CUMULATIVE INDEX/FINDING AIDS NOTE (R)
+   Indicators
+      First - Display constant controller
+         # - Indexes
+         0 - Finding aids
+         8 - No display constant generated
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Cumulative index/finding aids note (NR)
+      $b - Availability source (R)
+      $c - Degree of control (NR)
+      $d - Bibliographic reference (NR)
+      $u - Uniform Resource Identifier (R)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  556 - INFORMATION ABOUT DOCUMENTATION NOTE (R)
+   Indicators
+      First - Display constant controller
+         # - Documentation
+         8 - No display constant generated
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Information about documentation note (NR)
+      $z - International Standard Book Number (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  561 - OWNERSHIP AND CUSTODIAL HISTORY (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - History (NR)
+      $b - Time of collation (NR) [OBSOLETE]
+      $3 - Materials specified (NR)
+      $5 - Institution to which field applies (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  562 - COPY AND VERSION IDENTIFICATION NOTE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Identifying markings (R)
+      $b - Copy identification (R)
+      $c - Version identification (R)
+      $d - Presentation format (R)
+      $e - Number of copies (R)
+      $3 - Materials specified (NR)
+      $5 - Institution to which field applies (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  563 - BINDING INFORMATION (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Binding note (NR) <br>      $u - Uniform Resource Identifier (R)<br>      $3 - Materials specified (NR) <br>      $5 - Institution to which field applies (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  565 - CASE FILE CHARACTERISTICS NOTE (R)
+   Indicators
+      First - Display constant controller
+         # - File size
+         0 - Case file characteristics
+         8 - No display constant generated
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Number of cases/variables (NR)
+      $b - Name of variable (R)
+      $c - Unit of analysis (R)
+      $d - Universe of data (R)
+      $e - Filing scheme or code (R)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)
+  567 - METHODOLOGY NOTE (R)
+   Indicators
+      First - Display constant controller
+         # - Methodology
+         8 - No display constant generated
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Methodology note (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  570 - EDITOR NOTE (SE) (R) [OBSOLETE]
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Editor note (NR) 
+      $z - Source of note information (NR)
+      $6 - Linkage (NR)
+  580 - LINKING ENTRY COMPLEXITY NOTE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Linking entry complexity note (NR)
+      $z - Source of note information (NR) [OBSOLETE]
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  581 - PUBLICATIONS ABOUT DESCRIBED MATERIALS NOTE (R)
+   Indicators
+      First - Display constant controller
+         # - Publications
+         8 - No display constant generated
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Publications about described materials note (NR)
+      $z - International Standard Book Number (R)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  582 - RELATED COMPUTER FILES NOTE (R) (CF) [OBSOLETE]
+   Indicators
+      First - Display constant controller
+         # - No information provided
+         8 - No display constant generated
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Related computer files note (NR)
+      $6 - Linkage (NR)
+  583 - ACTION NOTE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Action (NR)
+      $b - Action identification (R)
+      $c - Time/date of action (R)
+      $d - Action interval (R)
+      $e - Contingency for action (R)
+      $f - Authorization (R)
+      $h - Jurisdiction (R)
+      $i - Method of action (R)
+      $j - Site of action (R)
+      $k - Action agent (R)
+      $l - Status (R)
+      $n - Extent (R)
+      $o - Type of unit (R)
+      $u - Uniform Resource Identifier (R)
+      $x - Nonpublic note (R)
+      $z - Public note (R)
+      $2 - Source of term (NR)
+      $3 - Materials specified (NR)
+      $5 - Institution to which field applies (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)
+  584 - ACCUMULATION AND FREQUENCY OF USE NOTE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Accumulation (R)
+      $b - Frequency of use (R)
+      $3 - Materials specified (NR)
+      $5 - Institution to which field applies (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  585 - EXHIBITIONS NOTE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Exhibitions note (NR)
+      $3 - Materials specified (NR)
+      $5 - Institution to which field applies (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  586 - AWARDS NOTE (R)
+   Indicators
+      First - Display constant controller
+         # - Awards
+         8 - No display constant generated
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Awards note (NR)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  59X - LOCAL NOTES
+  590 - LOCAL NOTE (BK CF MP MU SE VM MX) [OBSOLETE]
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Local note (NR)
+  590 - RECEIPT DATE NOTE (VM) [OBSOLETE]
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Receipt date (NR)
+      $b - Provenance (NR)
+      $d - Condition of individual reels (NR)
+      $d - Origin of safety copy (NR)
+          
+--Subject Access Fields (6XX)--
+  600 - SUBJECT ADDED ENTRY--PERSONAL NAME (R)
+   Indicators
+      First - Type of personal name entry element
+         0 - Forename
+         1 - Surname
+         2 - Multiple surname [OBSOLETE]
+         3 - Family name
+      Second - Thesaurus
+         0 - Library of Congress Subject Headings
+         1 - LC subject headings for children's literature
+         2 - Medical Subject Headings
+         3 - National Agricultural Library subject authority file
+         4 - Source not specified
+         5 - Canadian Subject Headings
+         6 - R&eacute;pertoire de vedettes-mati&egrave;re
+         7 - Source specified in subfield $2
+   Subfield Codes
+      $a - Personal name (NR)
+      $b - Numeration (NR)
+      $c - Titles and other words associated with a name (R)
+      $d - Dates associated with a name (NR)
+      $e - Relator term (R)
+      $f - Date of a work (NR)
+      $g - Miscellaneous information (NR)
+      $h - Medium (NR)
+      $j - Attribution qualifier (R)<br>      $k - Form subheading (R)
+      $l - Language of a work (NR)
+      $m - Medium of performance for music (R)
+      $n - Number of part/section of a work (R)
+      $o - Arranged statement for music (NR)
+      $p - Name of part/section of a work (R)
+      $q - Fuller form of name (NR)
+      $r - Key for music (NR)
+      $s - Version (NR)
+      $t - Title of a work (NR)
+      $u - Affiliation (NR)
+      $v - Form subdivision (R)
+      $x - General subdivision (R)
+      $y - Chronological subdivision (R)
+      $z - Geographic subdivision (R)
+      $2 - Source of heading or term (NR)
+      $3 - Materials specified (NR)
+      $4 - Relator code (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  610 - SUBJECT ADDED ENTRY--CORPORATE NAME (R)
+   Indicators
+      First - Type of corporate name entry element
+         0 - Inverted name
+         1 - Jurisdiction name
+         2 - Name in direct order
+      Second - Thesaurus
+         0 - Library of Congress Subject Headings
+         1 - LC subject headings for children's literature
+         2 - Medical Subject Headings 
+                 3 - National Agricultural Library subject authority file
+         4 - Source not specified
+         5 - Canadian Subject Headings
+         6 - R&eacute;pertoire de vedettes-mati&egrave;re
+         7 - Source specified in subfield $2
+   Subfield Codes
+      $a - Corporate name or jurisdiction name as entry element (NR)
+      $b - Subordinate unit (R)
+      $c - Location of meeting (NR)
+      $d - Date of meeting or treaty signing (R)
+      $e - Relator term (R)
+      $f - Date of a work (NR)
+      $g - Miscellaneous information (NR)
+      $h - Medium (NR)
+      $k - Form subheading (R)
+      $l - Language of a work (NR)
+      $m - Medium of performance for music (R)
+      $n - Number of part/section/meeting (R)
+      $o - Arranged statement for music (NR)
+      $p - Name of part/section of a work (R)
+      $r - Key for music (NR)
+      $s - Version (NR)
+      $t - Title of a work (NR)
+      $u - Affiliation (NR)
+      $v - Form subdivision (R)
+      $x - General subdivision (R)
+      $y - Chronological subdivision (R)
+      $z - Geographic subdivision (R)
+      $2 - Source of heading or term (NR)
+      $3 - Materials specified (NR)
+      $4 - Relator code (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  611 - SUBJECT ADDED ENTRY--MEETING NAME (R)
+   Indicators
+      First - Type of meeting name entry element
+         0 - Inverted name
+         1 - Jurisdiction name
+         2 - Name in direct order
+          Second - Thesaurus
+         0 - Library of Congress Subject Headings
+         1 - LC subject headings for children's literature
+         2 - Medical Subject Headings
+         3 - National Agricultural Library subject authority file
+         4 - Source not specified
+         5 - Canadian Subject Headings
+         6 - R&eacute;pertoire de vedettes-mati&egrave;re
+         7 - Source specified in subfield $2
+   Subfield Codes
+      $a - Meeting name or jurisdiction name as entry element (NR)
+      $b - Number (BK CF MP MU SE VM MX) [OBSOLETE]
+      $c - Location of meeting (NR)
+      $d - Date of meeting (NR)
+      $e - Subordinate unit (R)
+      $f - Date of a work (NR)
+      $g - Miscellaneous information (NR)
+      $h - Medium (NR)
+      $k - Form subheading (R)
+      $l - Language of a work (NR)
+      $n - Number of part/section/meeting (R)
+      $p - Name of part/section of a work (R)
+      $q - Name of meeting following jurisdiction name entry element (NR)
+      $s - Version (NR)
+      $t - Title of a work (NR)
+      $u - Affiliation (NR)
+      $v - Form subdivision (R)
+      $x - General subdivision (R)
+      $y - Chronological subdivision (R)
+      $z - Geographic subdivision (R)
+      $2 - Source of heading or term (NR)
+      $3 - Materials specified (NR)
+      $4 - Relator code (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  630 - SUBJECT ADDED ENTRY--UNIFORM TITLE (R)
+   Indicators
+      First - Nonfiling characters
+         0-9 - Number of nonfiling characters
+         # - Nonfiling characters not specified [OBSOLETE]
+      Second - Thesaurus
+         0 - Library of Congress Subject Headings
+         1 - LC subject headings for children's literature
+         2 - Medical Subject Headings
+         3 - National Agricultural Library subject authority file
+         4 - Source not specified
+         5 - Canadian Subject Headings
+         6 - R&eacute;pertoire de vedettes-mati&egrave;re
+         7 - Source specified in subfield $2
+   Subfield Codes
+      $a - Uniform title (NR)
+      $d - Date of treaty signing (R)
+      $f - Date of a work (NR)
+      $g - Miscellaneous information (NR)
+      $h - Medium (NR)
+      $k - Form subheading (R)
+      $l - Language of a work (NR)
+      $m - Medium of performance for music (R)
+      $n - Number of part/section of a work (R)
+      $o - Arranged statement for music (NR)
+      $p - Name of part/section of a work (R)
+      $r - Key for music (NR)
+      $s - Version (NR)
+      $t - Title of a work (NR)
+      $v - Form subdivision (R)
+      $x - General subdivision (R)
+      $y - Chronological subdivision (R)
+      $z - Geographic subdivision (R)
+      $2 - Source of heading or term (NR)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR) 
+      $8 - Field link and sequence number (R) 
+  648 - SUBJECT ADDED ENTRY--CHRONOLOGICAL TERM (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Thesaurus
+         0 - Library of Congress Subject Headings
+         1 - LC subject headings for children's literature
+         2 - Medical Subject Headings
+         3 - National Agricultural Library subject authority file
+         4 - Source not specified
+         5 - Canadian Subject Headings
+         6 - R&eacute;pertoire de vedettes-mati&egrave;re
+         7 - Source specified in subfield $2
+   Subfield Codes
+      $a - Chronological term (NR)
+      $v - Form subdivision (R)
+      $x - General subdivision (R)
+      $y - Chronological subdivision (R)
+      $z - Geographic subdivision (R)
+      $2 - Source of heading or term (NR)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)    
+ 650 - SUBJECT ADDED ENTRY--TOPICAL TERM (R)
+   Indicators
+      First - Level of subject
+         # - No information provided
+         0 - No level specified
+                 1 - Primary
+         2 - Secondary
+      Second - Thesaurus
+         0 - Library of Congress Subject Headings
+         1 - LC subject headings for children's literature
+         2 - Medical Subject Headings
+         3 - National Agricultural Library subject authority file
+         4 - Source not specified
+         5 - Canadian Subject Headings
+         6 - R&eacute;pertoire de vedettes-mati&egrave;re
+         7 - Source specified in subfield $2
+   Subfield Codes
+      $a - Topical term or geographic name as entry element (NR)
+      $b - Topical term following geographic name as entry element (NR)
+      $c - Location of event (NR)
+      $d - Active dates (NR)
+      $e - Relator term (NR)
+      $v - Form subdivision (R)
+      $x - General subdivision (R)
+      $y - Chronological subdivision (R)
+      $z - Geographic subdivision (R)
+      $2 - Source of heading or term (NR)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  651 - SUBJECT ADDED ENTRY--GEOGRAPHIC NAME (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Thesaurus
+         0 - Library of Congress Subject Headings
+         1 - LC subject headings for children's literature
+         2 - Medical Subject Headings
+         3 - National Agricultural Library subject authority file
+         4 - Source not specified
+         5 - Canadian Subject Headings
+         6 - R&eacute;pertoire de vedettes-mati&egrave;re
+         7 - Source specified in subfield $2
+   Subfield Codes
+      $a - Geographic name (NR)
+      $b - Geographic name following place entry element (R) [OBSOLETE]
+      $v - Form subdivision (R)
+      $x - General subdivision (R)
+      $y - Chronological subdivision (R)
+      $z - Geographic subdivision (R)
+      $2 - Source of heading or term (NR)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  652 - SUBJECT ADDED ENTRY--REVERSED GEOGRAPHIC (BK MP SE) [OBSOLETE] 
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Geographic name of place element (NR)
+      $x - General subdivision (R)
+      $y - Chronological subdivision (R)
+      $z - Geographic subdivision (R)
+  653 - INDEX TERM--UNCONTROLLED (R)
+   Indicators
+      First - Level of index term
+         # - No information provided
+         0 - No level specified
+         1 - Primary 
+         2 - Secondary
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Uncontrolled term (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  654 - SUBJECT ADDED ENTRY--FACETED TOPICAL TERMS (R)
+   Indicators
+      First - Level of subject
+         # - No information provided
+         0 - No level specified
+         1 - Primary 
+         2 - Secondary
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Focus term (R)
+      $b - Non-focus term (R)
+      $c - Facet/hierarchy designation (R)
+      $v - Form subdivision (R)
+      $y - Chronological subdivision (R)
+      $z - Geographic subdivision (R)
+      $2 - Source of heading or term (NR)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  655 - INDEX TERM--GENRE/FORM (R)
+   Indicators
+      First - Type of heading
+         # - Basic
+         0 - Faceted
+      Second - Thesaurus
+         0 - Library of Congress Subject Headings
+         1 - LC subject headings for children's literature
+         2 - Medical Subject Headings
+         3 - National Agricultural Library subject authority file
+         4 - Source not specified
+         5 - Canadian Subject Headings
+         6 - R&eacute;pertoire de vedettes-mati&egrave;re
+         7 - Source specified in subfield $2
+   Subfield Codes
+      $a - Genre/form data or focus term (NR)
+      $b - Non-focus term (R)
+      $c - Facet/hierarchy designation (R)
+      $v - Form subdivision (R)
+      $x - General subdivision (R)
+      $y - Chronological subdivision (R)
+      $z - Geographic subdivision (R)
+      $2 - Source of term (NR)
+      $3 - Materials specified (NR)
+      $5 - Institution to which field applies (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  656 - INDEX TERM--OCCUPATION (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Source of term
+         7 - Source specified in subfield $2
+   Subfield Codes
+      $a - Occupation (NR)
+      $k - Form (NR)
+      $v - Form subdivision (R)
+      $x - General subdivision (R)
+      $y - Chronological subdivision (R)
+      $z - Geographic subdivision (R)
+      $2 - Source of term (NR)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  657 - INDEX TERM--FUNCTION (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Source of term
+         7 - Source specified in subfield $2
+   Subfield Codes
+      $a - Function (NR)
+      $v - Form subdivision (R)
+      $x - General subdivision (R)
+      $y - Chronological subdivision (R)
+      $z - Geographic subdivision (R)
+      $2 - Source of term (NR)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)
+  658 - INDEX TERM--CURRICULUM OBJECTIVE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Main curriculum objective (NR)
+      $b - Subordinate curriculum objective (R)
+      $c - Curriculum code (NR)
+      $d - Correlation factor (NR)
+      $2 - Source of term or code (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+          
+--Added Entry Fields (70X-75X)--
+  700 - ADDED ENTRY--PERSONAL NAME (R)
+   Indicators
+      First - Type of personal name entry element
+         0 - Forename
+         1 - Surname
+         2 - Multiple surname [OBSOLETE]
+         3 - Family name
+      Second - Type of added entry
+         # - No information provided
+         0 - Alternative entry (BK CF MP MU SE MX) [OBSOLETE]
+         1 - Secondary entry (BK CF MP MU SE MX) [OBSOLETE]
+         1 - Printed on card (VM) [OBSOLETE]
+         2 - Analytical entry
+         3 - Not printed on card (VM) [OBSOLETE]
+   Subfield Codes
+      $a - Personal name (NR)
+      $b - Numeration (NR)
+      $c - Titles and other words associated with a name (R)
+      $d - Dates associated with a name (NR)
+      $e - Relator term (R)
+      $f - Date of a work (NR)
+      $g - Miscellaneous information (NR)
+      $h - Medium (NR)
+      $j - Attribution qualifier (R) 
+      $k - Form subheading (R)
+      $l - Language of a work (NR)
+      $m - Medium of performance for music (R)
+      $n - Number of part/section of a work (R)
+      $o - Arranged statement for music (NR)
+      $p - Name of part/section of a work (R)
+      $q - Fuller form of name (NR)
+      $r - Key for music (NR)
+      $s - Version (NR)
+      $t - Title of a work (NR)
+      $u - Affiliation (NR)
+      $x - International Standard Serial Number (NR)
+      $3 - Materials specified (NR)
+      $4 - Relator code (R)
+      $5 - Institution to which field applies (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  705 - ADDED ENTRY--PERSONAL NAME (PERFORMER) (MU) [OBSOLETE]
+   Indicators
+      First - Type of personal name entry element
+         0 - Forename
+         1 - Single surname
+         2 - Multiple surname
+         3 - Family name
+      Second - Type of added entry
+         0 - Alternative entry
+         1 - Secondary entry
+         2 - Analytical entry
+   Subfield Codes
+      $a - Personal name (NR)
+      $b - Numeration (NR)
+      $c - Titles and other words associated with a name (R)
+      $d - Dates associated with a name (NR)
+      $e - Relator term (R)
+      $f - Date of a work (NR)
+      $g - Miscellaneous information (NR)
+      $h - Medium (NR)
+      $k - Form subheading (R)
+      $l - Language of a work (NR)
+      $m - Medium of performance for music (R)
+      $n - Number of part/section of a work (R)
+      $o - Arranged statement for music (NR)
+      $p - Name of part/section of a work (R)
+      $r - Key for music (NR)
+      $s - Version (NR)
+      $t - Title of a work (NR)
+  710 - ADDED ENTRY--CORPORATE NAME (R)
+   Indicators
+      First - Type of corporate name entry element
+         0 - Inverted name
+         1 - Jurisdiction name
+         2 - Name in direct order
+      Second - Type of added entry
+         # - No information provided
+         0 - Alternative entry (BK CF MP MU SE MX) [OBSOLETE]
+         1 - Secondary entry (BK CF MP MU SE MX) [OBSOLETE]
+         1 - Printed on card (VM) [OBSOLETE]
+         2 - Analytical entry
+         3 - Not printed on card (VM) [OBSOLETE]
+   Subfield Codes
+      $a - Corporate name or jurisdiction name as entry element (NR)
+      $b - Subordinate unit (R)
+      $c - Location of meeting (NR)
+      $d - Date of meeting or treaty signing (R)
+      $e - Relator term (R)
+      $f - Date of a work (NR)
+      $g - Miscellaneous information (NR)
+      $h - Medium (NR)
+      $k - Form subheading (R)
+      $l - Language of a work (NR)
+      $m - Medium of performance for music (R)
+      $n - Number of part/section/meeting (R)
+      $o - Arranged statement for music (NR)
+      $p - Name of part/section of a work (R)
+      $r - Key for music (NR)
+      $s - Version (NR)
+      $t - Title of a work (NR)
+      $u - Affiliation (NR)
+      $x - International Standard Serial Number (NR)
+      $3 - Materials specified (NR)
+      $4 - Relator code (R)
+      $5 - Institution to which field applies (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  711 - ADDED ENTRY--MEETING NAME (R)
+   Indicators
+      First - Type of meeting name entry element
+         0 - Inverted name
+         1 - Jurisdiction name
+         2 - Name in direct order
+      Second - Type of added entry
+         # - No information provided
+         0 - Alternative entry (BK CF MP MU SE MX) [OBSOLETE]
+         1 - Secondary entry (BK CF MP MU SE MX) [OBSOLETE]
+         1 - Printed on card (VM) [OBSOLETE]
+         2 - Analytical entry
+         3 - Not printed on card (VM) [OBSOLETE]
+   Subfield Codes
+      $a - Meeting name or jurisdiction name as entry element (NR)
+      $b - Number (BK CF MP MU SE VM MX) [OBSOLETE]
+      $c - Location of meeting (NR)
+      $d - Date of meeting (NR)
+      $e - Subordinate unit (R)
+      $f - Date of a work (NR)
+      $g - Miscellaneous information (NR)
+      $h - Medium (NR)
+      $k - Form subheading (R)
+      $l - Language of a work (NR)
+      $n - Number of part/section/meeting (R)
+      $p - Name of part/section of a work (R)
+      $q - Name of meeting following jurisdiction name entry element (NR)
+      $s - Version (NR)
+      $t - Title of a work (NR)
+      $u - Affiliation (NR)
+      $x - International Standard Serial Number (NR)
+      $3 - Materials specified (NR)
+      $4 - Relator code (R)
+      $5 - Institution to which field applies (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  715 - ADDED ENTRY--CORPORATE NAME (PERFORMING GROUP) (MU) [OBSOLETE]
+   Indicators
+      First - Type of corporate name entry element
+         0 - Inverted name
+         1 - Jurisdiction name
+         2 - Name in direct order
+      Second - Type of added entry
+         0 - Alternative entry
+         1 - Secondary entry
+         2 - Analytical entry
+   Subfield Codes
+      $a - Corporate name or jurisdiction name (NR)
+      $b - Subordinate unit (R)
+      $e - Relator term (R)
+      $f - Date of a work (NR)
+      $g - Miscellaneous information (NR)
+      $h - Medium (NR)
+      $k - Form subheading (R)
+      $l - Language of a work (NR)
+      $m - Medium of performance for music (R)
+      $n - Number of part/section/meeting (R)
+      $o - Arranged statement for music (NR)
+      $p - Name of part/section of a work (R)
+      $r - Key for music (NR)
+      $s - Version (NR)
+      $t - Title of a work (NR)
+      $u - Nonprinting information (NR)
+  720 - ADDED ENTRY--UNCONTROLLED NAME (R)
+   Indicators
+      First - Type of name
+         # - Not specified
+         1 - Personal
+         2 - Other
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Name (NR)
+      $e - Relator term (R)
+      $4 - Relator code (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  730 - ADDED ENTRY--UNIFORM TITLE (R)
+   Indicators
+      First - Nonfiling characters
+         0-9 - Number of nonfiling characters
+         # - Nonfiling characters not specified [OBSOLETE]
+      Second - Type of added entry
+         # - No information provided
+         0 - Alternative entry (BK CF MP MU SE MX) [OBSOLETE]
+         1 - Secondary entry (BK CF MP MU SE MX) [OBSOLETE]
+         1 - Printed on card (VM) [OBSOLETE]
+         2 - Analytical entry
+         3 - Not printed on card (VM) [OBSOLETE]
+   Subfield Codes
+      $a - Uniform title (NR)
+      $d - Date of treaty signing (R)
+      $f - Date of a work (NR)
+      $g - Miscellaneous information (NR)
+      $h - Medium (NR)
+      $k - Form subheading (R)
+      $l - Language of a work (NR)
+      $m - Medium of performance for music (R)
+      $n - Number of part/section of a work (R)
+      $o - Arranged statement for music (NR)
+      $p - Name of part/section of a work (R)
+      $r - Key for music (NR)
+      $s - Version (NR)
+      $t - Title of a work (NR)
+      $x - International Standard Serial Number (NR)
+      $3 - Materials specified (NR)
+      $5 - Institution to which field applies (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)
+  740 - ADDED ENTRY--UNCONTROLLED RELATED/ANALYTICAL TITLE (R)
+   Indicators
+      First - Nonfiling characters
+         0-9 - Number of nonfiling characters
+         # - Nonfiling characters not specified [OBSOLETE]
+      Second - Type of added entry
+         # - No information provided
+         0 - Alternative entry (BK AM CF MP MU) [OBSOLETE]
+         1 - Secondary entry (BK AM CF MP MU) [OBSOLETE]
+         1 - Printed on card (VM) [OBSOLETE]
+         2 - Analytical entry
+         3 - Not printed on card (VM) [OBSOLETE]
+   Subfield Codes
+      $a - Uncontrolled related/analytical title (NR)
+      $h - Medium (NR)
+      $n - Number of part/section of a work (R)
+      $p - Name of part/section of a work (R)
+      $5 - Institution to which field applies (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  752 - ADDED ENTRY--HIERARCHICAL PLACE NAME (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Country (NR)
+      $b - State, province, territory (NR)
+      $c - County, region, islands area (NR)
+      $d - City (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  753 - SYSTEM DETAILS ACCESS TO COMPUTER FILES (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Make and model of machine (NR)
+      $b - Programming language (NR)
+      $c - Operating system (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  754 - ADDED ENTRY--TAXONOMIC IDENTIFICATION (R)
+   Indicators 
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Taxonomic name (R)
+      $c - Taxonomic category (R)
+      $d - Common or alternative name (R)
+      $x - Non-public note (R)
+      $z - Public note (R)
+      $2 - Source of taxonomic identification (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  755 - ADDED ENTRY--PHYSICAL CHARACTERISTICS (R) [OBSOLETE]
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Access term (NR)
+      $x - General subdivision (R)
+      $y - Chronological subdivision (R)
+      $z - Geographic subdivision (R)
+      $2 - Source of term (NR) 
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+          $8 - Field link and sequence number (R)
+         
+--Linking Entry Fields (76X-78X)--
+  760 - MAIN SERIES ENTRY (R)
+   Indicators
+      First - Note controller
+         0 - Display note
+         1 - Do not display note
+      Second - Display constant controller
+         # - Main series
+         8 - No display constant generated
+   Subfield Codes
+      $a - Main entry heading (NR)
+      $b - Edition (NR)
+      $c - Qualifying information (NR)
+      $d - Place, publisher, and date of publication (NR)
+      $g - Relationship information (R)
+      $h - Physical description (NR)
+      $i - Display text (NR)
+      $m - Material-specific details (NR)
+      $n - Note (R)
+      $o - Other item identifier (R)
+      $q - Parallel title (NR) (BK SE) [OBSOLETE]
+      $s - Uniform title (NR)
+      $t - Title (NR)
+      $w - Record control number (R)
+      $x - International Standard Serial Number (NR)
+      $y - CODEN designation (NR)
+      $6 - Linkage (NR)
+      $7 - Control subfield (NR)
+         0 - Type of main entry heading
+         1 - Form of name
+         2 - Type of record
+         3 - Bibliographic level
+      $8 - Field link and sequence number (R)
+  762 - SUBSERIES ENTRY (R)
+   Indicators
+      First - Note controller
+         0 - Display note
+         1 - Do not display note
+      Second - Display constant controller
+         # - Has subseries
+         8 - No display constant generated
+   Subfield Codes
+      $a - Main entry heading (NR)
+      $b - Edition (NR)
+      $c - Qualifying information (NR)
+      $d - Place, publisher, and date of publication (NR)
+      $g - Relationship information (R)
+      $h - Physical description (NR)
+      $i - Display text (NR)
+      $m - Material-specific details (NR)
+      $n - Note (R)
+      $o - Other item identifier (R)
+      $q - Parallel title (NR) (BK SE) [OBSOLETE]
+      $s - Uniform title (NR)
+      $t - Title (NR)
+      $w - Record control number (R)
+      $x - International Standard Serial Number (NR)
+      $y - CODEN designation (NR)
+      $6 - Linkage (NR)
+      $7 - Control subfield (NR)
+         0 - Type of main entry heading
+         1 - Form of name
+         2 - Type of record
+         3 - Bibliographic level
+      $8 - Field link and sequence number (R)   
+  765 - ORIGINAL LANGUAGE ENTRY (R)
+   Indicators
+      First - Note controller
+         0 - Display note
+         1 - Do not display note
+      Second - Display constant controller
+         # - Translation of
+         8 - No display constant generated
+   Subfield Codes
+      $a - Main entry heading (NR)
+      $b - Edition (NR)
+      $c - Qualifying information (NR)
+      $d - Place, publisher, and date of publication (NR)
+      $g - Relationship information (R)
+      $h - Physical description (NR)
+      $i - Display text (NR)
+      $k - Series data for related item (R)
+      $m - Material-specific details (NR)
+      $n - Note (R)
+      $o - Other item identifier (R)
+      $q - Parallel title (NR) (BK SE) [OBSOLETE]
+      $r - Report number (R)
+      $s - Uniform title (NR)
+      $t - Title (NR)
+      $u - Standard Technical Report Number (NR)
+      $w - Record control number (R)
+      $x - International Standard Serial Number (NR)
+      $y - CODEN designation (NR)
+      $z - International Standard Book Number (R)
+      $6 - Linkage (NR)
+      $7 - Control subfield (NR)
+         0 - Type of main entry heading
+         1 - Form of name 
+                 2 - Type of record
+         3 - Bibliographic level
+      $8 - Field link and sequence number (R)
+  767 - TRANSLATION ENTRY (R)
+   Indicators
+      First - Note controller
+         0 - Display note
+         1 - Do not display note
+      Second - Display constant controller
+         # - Translated as
+         8 - No display constant generated
+   Subfield Codes
+      $a - Main entry heading (NR)
+      $b - Edition (NR) 
+      $c - Qualifying information (NR)
+      $d - Place, publisher, and date of publication (NR)
+      $g - Relationship information (R)
+      $h - Physical description (NR)
+      $i - Display text (NR)
+      $k - Series data for related item (R)
+      $m - Material-specific details (NR)
+      $n - Note (R)
+      $o - Other item identifier (R)
+      $q - Parallel title (NR) (BK SE) [OBSOLETE]
+      $r - Report number (R)
+      $s - Uniform title (NR)
+      $t - Title (NR)
+      $u - Standard Technical Report Number (NR)
+      $w - Record control number (R)
+      $x - International Standard Serial Number (NR)
+      $y - CODEN designation (NR)
+      $z - International Standard Book Number (R)
+      $6 - Linkage (NR)
+      $7 - Control subfield (NR)
+         0 - Type of main entry heading
+         1 - Form of name
+         2 - Type of record
+         3 - Bibliographic level
+      $8 - Field link and sequence number (R)   
+  770 - SUPPLEMENT/SPECIAL ISSUE ENTRY (R)
+   Indicators
+      First - Note controller
+         0 - Display note
+         1 - Do not display note
+      Second - Display constant controller
+         # - Has supplement
+         8 - No display constant generated
+   Subfield Codes
+      $a - Main entry heading (NR)
+      $b - Edition (NR)
+      $c - Qualifying information (NR)
+      $d - Place, publisher, and date of publication (NR)
+      $g - Relationship information (R)
+      $h - Physical description (NR) 
+      $i - Display text (NR)
+      $k - Series data for related item (R)
+      $m - Material-specific details (NR)
+      $n - Note (R)
+      $o - Other item identifier (R)
+      $q - Parallel title (NR) (BK SE) [OBSOLETE]
+      $r - Report number (R)
+      $s - Uniform title (NR)
+      $t - Title (NR)
+      $u - Standard Technical Report Number (NR)
+      $w - Record control number (R)
+      $x - International Standard Serial Number (NR)
+      $y - CODEN designation (NR)
+      $z - International Standard Book Number (R)
+      $6 - Linkage (NR)
+      $7 - Control subfield (NR)
+         0 - Type of main entry heading
+         1 - Form of name
+         2 - Type of record
+         3 - Bibliographic level
+      $8 - Field link and sequence number (R)   
+  772 - SUPPLEMENT PARENT ENTRY (R)
+   Indicators
+      First - Note controller
+         0 - Display note
+         1 - Do not display note
+      Second - Display constant controller
+         # - Supplement to
+         0 - Parent
+         8 - No display constant generated
+   Subfield Codes
+      $a - Main entry heading (NR)
+      $b - Edition (NR)
+      $c - Qualifying information (NR)
+      $d - Place, publisher, and date of publication (NR)
+      $g - Relationship information (R)
+      $h - Physical description (NR)
+      $i - Display text (NR)
+      $k - Series data for related item (R)
+      $m - Material-specific details (NR)
+      $n - Note (R)
+      $o - Other item identifier (R)
+      $q - Parallel title (NR) (BK SE) [OBSOLETE]
+      $r - Report number (R)
+      $s - Uniform title (NR)
+      $t - Title (NR)
+      $u - Standard Technical Report Number (NR)
+      $w - Record control number (R)
+      $x - International Standard Serial Number (NR)
+      $y - CODEN designation (NR)
+      $z - International Stan dard Book Number (R)
+      $6 - Linkage (NR)
+      $7 - Control subfield (NR)
+         0 - Type of main entry heading
+         1 - Form of name
+         2 - Type of record
+         3 - Bibliographic level
+      $8 - Field link and sequence number (R)   
+  773 - HOST ITEM ENTRY (R)
+   Indicators
+      First - Note controller
+         0 - Display note
+         1 - Do not display note
+      Second - Display constant controller
+         # - In
+         8 - No display constant generated
+   Subfield Codes
+      $a - Main entry heading (NR)
+      $b - Edition (NR)
+      $d - Place, publisher, and date of publication (NR)
+      $g - Relationship information (R)
+      $h - Physical description (NR)
+      $i - Display text (NR)
+      $k - Series data for related item (R)
+      $m - Material-specific details (NR)
+      $n - Note (R)
+      $o - Other item identifier (R)
+      $p - Abbreviated title (NR)
+      $r - Report number (R)
+      $s - Uniform title (NR)
+      $t - Title (NR)
+      $u - Standard Technical Report Number (NR)
+      $w - Record control number (R)
+      $x - International Standard Serial Number (NR)
+      $y - CODEN designation (NR)
+      $z - International Standard Book Number (R)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $7 - Control subfield (NR)
+         0 - Type of main entry heading
+         1 - Form of name
+         2 - Type of record
+         3 - Bibliographic level
+      $8 - Field link and sequence number (R)   
+  774 - CONSTITUENT UNIT ENTRY (R)
+   Indicators
+      First - Note controller
+         0 - Display note
+         1 - Do not display note
+      Second - Display constant controller
+         # - Constituent unit
+         8 - No display constant generated
+   Subfield Codes
+      $a - Main entry heading (NR)
+      $b - Edition (NR)
+      $c - Qualifying information (NR)
+      $d - Place, publisher, and date of publication (NR)
+      $g - Relationship information (R)
+      $h - Physical description (NR)
+      $i - Display text (NR)
+      $k - Series data for related item (R)
+      $m - Material-specific details (NR)
+      $n - Note (R)
+      $o - Other item identifier (R)
+      $r - Report number (R)
+      $s - Uniform title (NR)
+      $t - Title (NR)
+      $u - Standard Technical Report Number (NR)
+      $w - Record control number (R)
+      $x - International Standard Serial Number (NR)
+      $y - CODEN designation (NR)
+      $z - International Standard Book Number (R)
+      $6 - Linkage (NR)
+      $7 - Control subfield (NR)
+         0 - Type of main entry heading
+         1 - Form of name
+         2 - Type of record
+         3 - Bibliographic level
+      $8 - Field link and sequence number (R)   
+  775 - OTHER EDITION ENTRY (R)
+   Indicators
+      First - Note controller
+         0 - Display note
+         1 - Do not display note
+      Second - Display constant controller
+         # - Other edition available
+         8 - No display constant generated
+      Second - Edition entry same as main entry or title (SE) [OBSOLETE]
+         0 - Entry not the same
+         1 - Entry is the same as title
+         2 - Entry is the same as main entry and title
+   Subfield Codes
+      $a - Main entry heading (NR)
+      $b - Edition (NR)
+      $c - Qualifying information (NR)
+      $d - Place, publisher, and date of publication (NR)
+      $e - Language code (NR)
+      $f - Country code (NR)
+      $g - Relationship information (R)
+      $h - Physical description (NR)
+      $i - Display text (NR)
+      $k - Series data for related item (R)
+      $m - Material-specific details (NR)
+      $n - Note (R)
+      $o - Other item identifier (R)
+      $q - Parallel title (NR) (BK SE) [OBSOLETE]
+      $r - Report number (R)
+      $s - Uniform title (NR)
+      $t - Title (NR)
+      $u - Standard Technical Report Number (NR)
+      $w - Record control number (R)
+      $x - International Standard Serial Number (NR)
+      $y - CODEN designation (NR)
+      $z - International Standard Book Number (R)
+      $6 - Linkage (NR)
+      $7 - Control subfield (NR)
+         0 - Type of main entry heading
+         1 - Form of name
+         2 - Type of record
+         3 - Bibliographic level
+      $8 - Field link and sequence number (R)   
+  776 - ADDITIONAL PHYSICAL FORM ENTRY (R)
+   Indicators
+      First - Note controller
+         0 - Display note
+         1 - Do not display note
+      Second - Display constant controller
+         # - Available in another form
+         8 - No display constant generated
+   Subfield Codes
+      $a - Main entry heading (NR)
+      $b - Edition (NR)
+      $c - Qualifying information (NR)
+      $d - Place, publisher, and date of publication (NR)
+      $g - Relationship information (R)
+      $h - Physical description (NR)
+      $i - Display text (NR)
+      $k - Series data for related item (R)
+      $m - Material-specific details (NR)
+      $n - Note (R)
+      $o - Other item identifier (R)
+      $q - Parallel title (NR) (BK SE) [OBSOLETE]
+      $r - Report number (R)
+      $s - Uniform title (NR)
+      $t - Title (NR)
+      $u - Standard Technical Report Number (NR)
+      $w - Record control number (R)
+      $x - International Standard Serial Number (NR)
+      $y - CODEN designation (NR)
+      $z - International Standard Book Number (R)
+      $6 - Linkage (NR)
+      $7 - Control subfield (NR)
+         0 - Type of main entry heading
+         1 - Form of name 
+         2 - Type of record
+         3 - Bibliographic level
+      $8 - Field link and sequence number (R)  
+  777 - ISSUED WITH ENTRY (R)
+   Indicators
+      First - Note controller
+         0 - Display note
+         1 - Do not display note
+      Second - Display constant controller
+         # - Issued with
+         8 - No display constant generated
+   Subfield Codes
+      $a - Main entry heading (NR)
+      $b - Edition (NR)
+      $c - Qualifying information (NR)
+      $d - Place, publisher, and date of publication (NR)
+      $g - Relationship information (R)
+      $h - Physical description (NR)
+      $i - Display text (NR)
+      $k - Series data for related item (R)
+      $m - Material-specific details (NR)
+      $n - Note (R)
+      $o - Other item identifier (R)
+      $q - Parallel title (NR) (BK SE) [OBSOLETE]
+      $s - Uniform title (NR)
+      $t - Title (NR)
+      $w - Record control number (R)
+      $x - International Standard Serial Number (NR)
+      $y - CODEN designation (NR)
+      $6 - Linkage (NR)
+      $7 - Control subfield (NR)
+         0 - Type of main entry heading
+         1 - Form of name
+         2 - Type of record
+         3 - Bibliographic level
+      $8 - Field link and sequence number (R)  
+  780 - PRECEDING ENTRY (R)
+   Indicators
+      First - Note controller
+         0 - Display note
+         1 - Do not display note
+      Second - Type of relationship
+         0 - Continues
+         1 - Continues in part
+         2 - Supersedes
+         3 - Supersedes in part
+         4 - Formed by the union of ... and ...
+         5 - Absorbed
+         6 - Absorbed in part
+         7 - Separated from
+   Subfield Codes
+      $a - Main entry heading (NR)
+      $b - Edition (NR)
+      $c - Qualifying information (NR)
+      $d - Place, publisher, and date of publication (NR)
+      $g - Relationship information (R)
+      $h - Physical description (NR)
+      $i - Display text (NR)
+      $k - Series data for related item (R)
+      $m - Material-specific details (NR)
+      $n - Note (R)
+      $o - Other item identifier (R)
+      $q - Parallel title (NR) (BK SE) [OBSOLETE]
+      $r - Report number (R)
+      $s - Uniform title (NR)
+      $t - Title (NR)
+      $u - Standard Technical Report Number (NR)
+      $w - Record control number (R)
+      $x - International Standard Serial Number (NR)
+      $y - CODEN designation (NR)
+      $z - International Standard Book Number (R)
+      $6 - Linkage (NR)
+      $7 - Control subfield (NR)
+         0 - Type of main entry heading
+         1 - Form of name 
+                 2 - Type of record
+         3 - Bibliographic level
+      $8 - Field link and sequence number (R)
+  785 - SUCCEEDING ENTRY (R)
+   Indicators
+      First - Note controller
+         0 - Display note
+         1 - Do not display note
+      Second - Type of relationship
+         0 - Continued by
+         1 - Continued in part by
+         2 - Superseded by
+         3 - Superseded in part by
+         4 - Absorbed by
+         5 - Absorbed in part by
+         6 - Split into ... and ...
+         7 - Merged with ... to form ...
+         8 - Changed back to
+   Subfield Codes
+      $a - Main entry heading (NR)
+      $b - Edition (NR)
+      $c - Qualifying information (NR)
+      $d - Place, publisher, and date of publication (NR)
+      $g - Relationship information (R)
+      $h - Physical description (NR)
+      $i - Display text (NR)
+      $k - Series data for related item (R)
+      $m - Material-specific details (NR)
+      $n - Note (R)
+      $o - Other item identifier (R)
+      $q - Parallel title (NR) (BK SE) [OBSOLETE]
+      $r - Report number (R)
+      $s - Uniform title (NR)
+      $t - Title (NR)
+      $u - Standa rd Technical Report Number (NR)
+      $w - Record control number (R)
+      $x - International Standard Serial Number (NR)
+      $y - CODEN designation (NR)
+      $z - International Standard Book Number (R)
+      $6 - Linkage (NR)
+      $7 - Control subfield (NR)
+         0 - Type of main entry heading
+         1 - Form of name
+         2 - Type of record
+         3 - Bibliographic level
+      $8 - Field link and sequence number (R)
+  786 - DATA SOURCE ENTRY (R)
+   Indicators
+      First - Note controller
+         0 - Display note
+         1 - Do not display note
+      Second - Display constant controller
+         # - Data source
+         8 - No display constant generated
+   Subfield Codes
+      $a - Main entry heading (NR)
+      $b - Edition (NR)
+      $c - Qualifying information (NR)
+      $d - Place, publisher, and date of publication (NR)
+      $g - Relationship information (R)
+      $h - Physical description (NR)
+      $i - Display text (NR)
+      $j - Period of content (NR)
+      $k - Series data for related item (R)
+      $m - Material-specific details (NR)
+      $n - Note (R)
+      $o - Other item identifier (R)
+      $p - Abbreviated title (NR)
+      $r - Report number (R)
+      $s - Uniform title (NR)
+      $t - Title (NR)
+      $u - Standard Technical Report Number (NR)
+      $v - Source Contribution (NR)
+      $w - Record control number (R)
+      $x - International Standard Serial Number (NR)
+      $y - CODEN designation (NR)
+      $z - International Standard Book Number (R)
+      $6 - Linkage (NR)
+      $7 - Control subfield (NR)
+         0 - Type of main entry heading
+         1 - Form of name
+         2 - Type of record
+         3 - Bibliographic level
+      $8 - Field link and sequence number (R)
+  787 - NONSPECIFIC RELATIONSHIP ENTRY (R)
+   Indicators
+      First - Note controller
+         0 - Display note
+         1 - Do not display note
+      Second - Display constant controller
+         # - Related item
+         8 - No display constant generated
+   Subfield Codes
+      $a - Main entry heading (NR)
+      $b - Edition (NR)
+      $c - Qualifying information (NR)
+      $d - Place, publisher, and date of publication (NR)
+      $g - Relationship information (R)
+      $h - Physical description (NR)
+      $i - Display text (NR)
+      $k - Series data for related item (R)
+      $m - Material-specific details (NR)
+      $n - Note (R)
+      $o - Other item identifier (R)
+      $r - Report number (R)
+      $s - Uniform title (NR)
+      $t - Title (NR)
+      $u - Standard Technical Report Number (NR)
+      $w - Record control number (R)
+      $x - International Standard Serial Number (NR)
+      $y - CODEN designation (NR)
+      $z - International Standard Book Number (R)
+      $6 - Linkage (NR)
+      $7 - Control subfield (NR)
+         0 - Type of main entry heading
+         1 - Form of name
+         2 - Type of record
+         3 - Bibliographic level
+      $8 - Field link and sequence number (R)
+   
+--Series Added Entry Fields (80X-830)--
+  800 - SERIES ADDED ENTRY--PERSONAL NAME (R)
+   Indicators
+      First - Type of personal name entry element
+         0 - Forename
+         1 - Surname
+         3 - Family name
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Personal name (NR)
+      $b - Numeration (NR)
+      $c - Titles and other words associated with a name (R)
+      $d - Dates associated with a name (NR)
+      $e - Relator term (R)
+      $f - Date of a work (NR)
+      $g - Miscellaneous information (NR)
+      $h - Medium (NR)
+      $j - Attribution qualifier (R)
+      $k - Form subheading (R)
+      $l - Language of a work (NR)
+      $m - Medium of performance for music (R)
+      $n - Number of part/section of a work  (R)
+      $o - Arranged statement for music (NR)
+      $p - Name of part/section of a work (R)
+      $q - Fuller form of name (NR)
+      $r - Key for music (NR)
+      $s - Version (NR)
+      $t - Title of a work (NR)
+      $u - Affiliation (NR)
+      $v - Volume/sequential designation  (NR)
+      $4 - Relator code (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  810 - SERIES ADDED ENTRY--CORPORATE NAME (R)
+   Indicators
+      First - Type of corporate name entry element
+         0 - Inverted name
+         1 - Jurisdiction name
+         2 - Name in direct order
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Corporate name or jurisdiction name as entry element (NR)
+      $b - Subordinate unit (R)
+      $c - Location of meeting (NR)
+      $d - Date of meeting or treaty signing (R)
+      $e - Relator term (R)
+      $f - Date of a work (NR)
+      $g - Miscellaneous information (NR)
+      $h - Medium (NR)
+      $k - Form subheading (R)
+      $l - Language of a work (NR)
+      $m - Medium of performance for music (R)
+      $n - Number of part/section/meeting (R)
+      $o - Arranged statement for music (NR)
+      $p - Name of part/section of a work (R)
+      $r - Key for music (NR)
+      $s - Version (NR)
+      $t - Title of a work (NR)
+      $u - Affiliation (NR)
+      $v - Volume/sequential designation (NR)
+      $4 - Relator code (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R) 
+  811 - SERIES ADDED ENTRY--MEETING NAME (R)
+   Indicators
+      First - Type of meeting name entry element
+         0 - Inverted name
+         1 - Jurisdiction name
+         2 - Name in direct order
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Meeting name or jurisdiction name as entry element (NR)
+      $c - Location of meeting (NR)
+      $d - Date of meeting (NR)
+      $e - Subordinate unit (R)
+      $f - Date of a work (NR)
+      $g - Miscellaneous information (NR)
+      $h - Medium (NR)
+      $k - Form subheading (R)
+      $l - Language of a work (NR)
+      $n - Number of part/section/meeting (R)
+      $p - Name of part/section of a work (R)
+      $q - Name of meeting following jurisdiction name entry element (NR)
+      $s - Version (NR)
+      $t - Title of a work (NR)
+      $u - Affiliation (NR)
+      $v - Volume/sequential designation (NR)
+      $4 - Relator code (R)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)
+  830 - SERIES ADDED ENTRY--UNIFORM TITLE (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Nonfiling characters
+         0-9 - Number of nonfiling characters 
+   Subfield Codes
+      $a - Uniform title (NR)
+      $d - Date of treaty signing (R)
+      $f - Date of a work (NR)
+      $g - Miscellaneous information (NR)
+      $h - Medium (NR)
+      $k - Form subheading (R)
+      $l - Language of a work (NR)
+      $m - Medium of performance for music (R)
+      $n - Number of part/section of a work (R)
+      $o - Arranged statement for music (NR)
+      $p - Name of part/section of a work (R)
+      $r - Key for music (NR)
+      $s - Version (NR)
+      $t - Title of a work (NR) 
+      $v - Volume/sequential designation (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)   
+  840 - SERIES ADDED ENTRY--TITLE (R) [OBSOLETE]
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Nonfiling characters
+         0-9 - Number of nonfiling characters 
+   Subfield Codes
+      $a - Title (NR)
+      $h - Medium (NR)
+      $v - Volume/sequential designation (NR)
+        
+--Holdings, Location, Alternate Graphics, etc. Fields (841-88X)--
+  841 - HOLDINGS CODED DATA VALUES (NR)
+  842 - TEXTUAL PHYSICAL FORM DESIGNATOR (NR)
+  843 - REPRODUCTION NOTE (R)
+  844 - NAME OF UNIT (NR)
+  845 - TERMS GOVERNING USE AND REPRODUCTION NOTE (R)
+  850 - HOLDING INSTITUTION (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Holding institution (R)
+      $b - Holdings (NR) (MU VM SE) [OBSOLETE]
+      $d - Inclusive dates (NR) (MU VM SE) [OBSOLETE]
+      $e - Retention statement (NR) (CF MU VM SE) [OBSOLETE]
+      $8 - Field link and sequence number (R)
+  851 - LOCATION (R) [OBSOLETE]
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Name (custodian or owner) (NR)
+      $b - Institutional division (NR)
+      $c - Street address (NR)
+      $d - Country (NR)
+      $e - Location of units (NR)
+      $f - Item number (NR)
+      $g - Repository location code (NR)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+  852 - LOCATION (R)
+   Indicators
+      First - Shelving scheme
+         # - No information provided
+         0 - Library of Congress classification
+         1 - Dewey Decimal classification
+         2 - National Library of Medicine classification
+         3 - Superintendent of Documents classification
+         4 - Shelving control number
+         5 - Title
+         6 - Shelved separately
+         7 - Source specified in subfield $2
+         8 - Other scheme
+      Second - Shelving order
+         # - No information provided
+         0 - Not enumeration
+         1 - Primary enumeration
+         2 - Alternative enumeration
+   Subfield Codes
+      $a - Location (NR)
+      $b - Sublocation or collection (R)
+      $c - Shelving location (R)
+      $e - Address (R)
+      $f - Coded location qualifier (R)
+      $g - Non-coded location qualifier (R)
+      $h - Classification part (NR)
+      $i - Item part (R)
+      $j - Shelving control number (NR)
+      $k - Call number prefix (R)
+      $l - Shelving form of title (NR)
+      $m - Call number suffix (R)
+      $n - Country code (NR)
+      $p - Piece designation (NR)
+      $q - Piece physical condition (NR)
+      $s - Copyright article-fee code (R)
+      $t - Copy number (NR)
+      $x - Nonpublic note (R)
+      $z - Public note (R)
+      $2 - Source of classification or shelving scheme (NR)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Sequence number (NR)
+  853 - CAPTIONS AND PATTERN--BASIC BIBLIOGRAPHIC UNIT (R)
+  854 - CAPTIONS AND PATTERN--SUPPLEMENTARY MATERIAL (R)
+  855 - CAPTIONS AND PATTERN--INDEXES (R)
+  856 - ELECTRONIC LOCATION AND ACCESS (R)
+   Indicators
+      First - Access method
+         # - No information provided
+         0 - Email
+         1 - FTP
+         2 - Remote login (Telnet)
+         3 - Dial-up
+         4 - HTTP
+         7 - Method specified in subfield $2
+      Second - Relationship
+         # - No information provided
+         0 - Resource
+         1 - Version of resource
+         2 - Related resource
+         8 - No display constant generated
+   Subfield Codes
+      $a - Host name (R)
+      $b - Access number (R)
+      $c - Compression information (R)
+      $d - Path (R)
+      $f - Electronic name (R)
+      $g - Uniform Resource Name (R) [OBSOLETE]
+      $h - Processor of request (NR)
+      $i - Instruction (R)
+      $j - Bits per second (NR)
+      $k - Password (NR)
+      $l - Logon (NR)
+      $m - Contact for access assistance (R)
+      $n - Name of location of host (NR)
+      $o - Operating system (NR)
+      $p - Port (NR)
+      $q - Electronic format type (NR)
+      $r - Settings (NR)
+      $s - File size (R)
+      $t - Terminal emulation (R)
+      $u - Uniform Resource Identifier (R)
+      $v - Hours access method available (R)
+      $w - Record control number (R)
+      $x - Nonpublic note (R)
+      $y - Link text (R)
+      $z - Public note (R)
+      $2 - Access method (NR)
+      $3 - Materials specified (NR)
+      $6 - Linkage (NR)
+      $8 - Field link and sequence number (R)  
+  863 - ENUMERATION AND CHRONOLOGY--BASIC BIBLIOGRAPHIC UNIT (R)
+  864 - ENUMERATION AND CHRONOLOGY--SUPPLEMENTARY MATERIAL (R)
+  865 - ENUMERATION AND CHRONOLOGY--INDEXES (R)
+  866 - TEXTUAL HOLDINGS--BASIC BIBLIOGRAPHIC UNIT (R)
+  867 - TEXTUAL HOLDINGS--SUPPLEMENTARY MATERIAL (R)
+  868 - TEXTUAL HOLDINGS--INDEXES (R)
+  870 - VARIANT PERSONAL NAME (SE) [OBSOLETE]
+  871 - VARIANT CORPORATE NAME (SE)[OBSOLETE] 
+  872 - VARIANT CONFERENCE OR MEETING NAME (SE) [OBSOLETE]
+  873 - VARIANT UNIFORM TITLE HEADING (SE) [OBSOLETE] 
+  876 - ITEM INFORMATION--BASIC BIBLIOGRAPHIC UNIT (R)
+  877 - ITEM INFORMATION--SUPPLEMENTARY MATERIAL (R)
+  878 - ITEM INFORMATION--INDEXES (R)
+  880 - ALTERNATE GRAPHIC REPRESENTATION (R)
+   Indicators
+      First - Same as associated field
+      Second - Same as associated field
+   Subfield Codes
+      $6 - Linkage (NR)
+      $a-z Same as associated field
+      $0-5 Same as associated field
+      $7-9 Same as associated field
+  886 - FOREIGN MARC INFORMATION FIELD (R)
+   Indicators
+      First - Type of field
+         0 - Leader
+         1 - Variable control fields (002-009)
+         2 - Variable data fields (010-999)
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Tag of the foreign MARC field (NR)
+      $b - Content of the foreign MARC field (NR)
+      $2 - Source of data (NR)
+      $a-z - Foreign MARC subfield (R)
+      $0-9 - Foreign MARC subfield (R)
+  887 - NON-MARC INFORMATION FIELD (R)
+   Indicators
+      First - Undefined
+         # - Undefined
+      Second - Undefined
+         # - Undefined
+   Subfield Codes
+      $a - Content of non-MARC field (NR)
+      $2 - Source of data (NR)    
+</pre>
+<hr>
+<p> <b>Go to:</b> <a href="http://www.loc.gov/marc/marc.html">MARC Home Page</a> 
+  | <a href="http://www.loc.gov/">Library of Congress Home Page</a> 
+<p> 
+<hr>
+<img src="http://www.loc.gov/homepage/lc2.gif" alt="Library of Congress"> <strong>Library 
+of Congress</strong><br>
+<address> 
+<!--help desk email start -->
+<a href="http://www.loc.gov/help/help-desk.html">Library of Congress Help Desk</a> 
+<!--help desk email end -->
+( 
+<!-- #BeginDate format:Am3 -->10/03/2003<!-- #EndDate -->
+) </address>
+</body>
+
+</html>
+

Added: packages/libmarc-record-perl/branches/upstream/current/etc/specs
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/etc/specs	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/etc/specs	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,118 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+
+=head1 specs
+
+Turns http://www.loc.gov/marc/bibliographic/ecbdist.html into the format
+used by MARC::Lint.pm
+
+Takes ecbdist.html as input.  Skips fixed fields and data marked
+"[OBSOLETE]"  Also, the HTML file doesn't include the 841-88X tags,
+so those are hardcoded here.
+
+=head1 AUTHOR
+
+Originally written by Colin Campbell at Sirsi, and taken over and modified
+by Andy Lester.
+
+=cut
+
+open( my $fh, "../lib/MARC/Lint.pm" ) or die "Can't open module";
+while ( <$fh> ) {
+    print;
+    last if /^__DATA__/;
+}
+close $fh;
+
+local $/ = undef;
+my $text = <>;
+$text =~ s/(<BR>|\r|\n)+/\n/ig;
+my @lines = split( /\n/, $text );
+
+
+my $in_tag = undef;
+my $i1;
+my $i2;
+my $curr_indicator;
+my $ntags;
+my $desc1;
+my $desc2;
+
+my $started = 0;
+for ( @lines ) {
+    unless ($started) {
+	$started=1 if /Number and Code Fields/;
+	next;
+    }
+    s/^\s+//;
+    s/\s+$//;
+    next if $_ eq "";
+
+    if ( /^(\d\d\d)/ ) {
+	my $tag = $1;
+	if (/OBSOLETE/) { 
+	    $in_tag = 0;
+	    next; 
+	}
+
+	/$tag - (.+) \((N?R)\)/ or die "Tag $tag is invalid format";
+	my $desc = $1;
+	my $nr = $2;
+	++$ntags;
+	$in_tag = 1;
+	print "\n" if $ntags > 1;
+	print "$tag\t$nr\t$desc\n";
+	$i1 = $i2 = "";
+	next;
+    }
+
+    next unless $in_tag;
+    next if /OBSOLETE/;
+    
+    if (/^First - (.+)/) {
+	$curr_indicator = 1;
+	$desc1 = $1;
+    } elsif (/^Second - (.+)/) {
+	print_indicator( 1, $i1, $desc1 );
+	undef $desc1;
+	$curr_indicator = 2;
+	$desc2 = $1;
+    } elsif (/^Subfield/) {
+	print_indicator( 2, $i2, $desc2 );
+	undef $desc2;
+	$curr_indicator = 0;
+    } else {
+	if ($curr_indicator) {
+	    my $data = '';
+	    if (/^(\d-\d)/) {
+		$data = $1;
+	    } elsif (/^([#0123456789])/) {
+		$data = $1;
+	    }
+	    $data = "b" if $data eq "#";
+	    if ($curr_indicator == 1) {
+		$i1 .= $data;
+	    } elsif ($curr_indicator == 2) {
+		$i2 .= $data;
+	    }
+
+	} else {
+	    if ( /^\$(.) - (.+)\s*\((N?R)\)/ ) {
+		my ($sub,$desc,$nr) = ($1,$2,$3);
+		print "$sub\t$nr\t$desc\n";
+	    } 
+	}
+    }
+} # main while
+
+sub print_indicator {
+    my $n = shift;
+    my $val = shift;
+    my $desc = shift;
+
+    $val = "blank" if $val eq "b";
+
+    print "ind$n\t$val\t$desc\n";
+}


Property changes on: packages/libmarc-record-perl/branches/upstream/current/etc/specs
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Batch.pm
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Batch.pm	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Batch.pm	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,279 @@
+package MARC::Batch;
+
+=head1 NAME
+
+MARC::Batch - Perl module for handling files of MARC::Record objects
+
+=head1 SYNOPSIS
+
+MARC::Batch hides all the file handling of files of C<MARC::Record>s.
+C<MARC::Record> still does the file I/O, but C<MARC::Batch> handles the
+multiple-file aspects.
+
+    use MARC::Batch;
+
+    my $batch = new MARC::Batch-new( 'USMARC', @files );
+    while ( my $marc = $batch->next ) {
+        print $marc->subfield(245,"a"), "\n";
+    }
+
+=head1 EXPORT
+
+None.  Everything is a class method.
+
+=cut
+
+use strict;
+use integer;
+use Carp qw( croak );
+
+=head1 METHODS
+
+=head2 new( $type, @files )
+
+Create a C<MARC::Batch> object that will process C<@files>.
+
+C<$type> must be either "USMARC" or "MicroLIF".  If you want to specify
+"MARC::File::USMARC" or "MARC::File::MicroLIF", that's OK, too. C<new()> returns a
+new MARC::Batch object.
+
+C<@files> can be a list of filenames:
+
+    my $batch = MARC::Batch->new( 'USMARC', 'file1.marc', 'file2.marc' );
+
+Your C<@files> may also contain filehandles. So if you've got a large
+file that's gzipped you can open a pipe to F<gzip> and pass it in:
+
+    my $fh = IO::File->new( 'gunzip -c marc.dat.gz |' );
+    my $batch = MARC::Batch->new( 'USMARC', $fh );
+
+And you can mix and match if you really want to:
+
+    my $batch = MARC::Batch->new( 'USMARC', $fh, 'file1.marc' );
+
+=cut
+
+sub new {
+    my $class = shift;
+    my $type = shift;
+
+    my $marcclass = ($type =~ /^MARC::File/) ? $type : "MARC::File::$type";
+
+    eval "require $marcclass";
+    croak $@ if $@;
+
+    my @files = @_;
+
+    my $self = {
+        filestack   =>  \@files,
+        filename    =>  undef,
+        marcclass   =>  $marcclass,
+        file        =>  undef,
+        warnings    =>  [],
+        'warn'      =>  1,
+        strict      =>  1,
+    };
+
+    bless $self, $class;
+
+    return $self;
+} # new()
+
+
+=head2 next()
+
+Read the next record from that batch, and return it as a MARC::Record
+object.  If the current file is at EOF, close it and open the next
+one. C<next()> will return C<undef> when there is no more data to be
+read from any batch files.
+
+By default, C<next()> also will return C<undef> if an error is
+encountered while reading from the batch. If not checked for this can
+cause your iteration to terminate prematurely. To alter this behavior,
+see C<strict_off()>. You can retrieve warning messages using the
+C<warnings()> method.
+
+Optionally you can pass in a filter function as a subroutine reference
+if you are only interested in particular fields from the record. This
+can boost performance.
+
+=cut
+
+sub next {
+    my ( $self, $filter ) = @_;
+    if ( $filter and ref($filter) ne 'CODE' ) {
+        croak( "filter function in next() must be a subroutine reference" );
+    }
+
+    if ( $self->{file} ) {
+
+        # get the next record
+        my $rec = $self->{file}->next( $filter );
+
+        # collect warnings from MARC::File::* object
+        my @warnings = $self->{file}->warnings();
+        if ( @warnings ) {
+            $self->warnings( @warnings );
+            return if $self->{ strict };
+        }
+
+        if ($rec) {
+
+            # collect warnings from the MARC::Record object
+            my @warnings = $rec->warnings();
+
+            if (@warnings) {
+                $self->warnings( @warnings );
+                return if $self->{ strict };
+            }
+
+            # return the MARC::Record object
+            return($rec);
+
+        }
+
+    }
+
+    # Get the next file off the stack, if there is one
+    $self->{filename} = shift @{$self->{filestack}} or return;
+
+    # Instantiate a filename for it
+    my $marcclass = $self->{marcclass};
+    $self->{file} = $marcclass->in( $self->{filename} ) or return;
+
+    # call this method again now that we've got a file open
+    return( $self->next( $filter ) );
+
+}
+
+=head2 strict_off()
+
+If you would like C<MARC::Batch> to continue after it has encountered what
+it believes to be bad MARC data then use this method to turn strict B<OFF>.
+A call to C<strict_off()> always returns true (1).
+
+C<strict_off()> can be handy when you don't care about the quality of your
+MARC data, and just want to plow through it. For safety, C<MARC::Batch>
+strict is B<ON> by default.
+
+=cut
+
+sub strict_off {
+    my $self = shift;
+    $self->{ strict } = 0;
+    return(1);
+}
+
+=head2 strict_on()
+
+The opposite of C<strict_off()>, and the default state. You shouldn't
+have to use this method unless you've previously used C<strict_off()>, and
+want it back on again.  When strict is B<ON> calls to next() will return
+undef when an error is encountered while reading MARC data. strict_on()
+always returns true (1).
+
+=cut
+
+sub strict_on {
+    my $self = shift;
+    $self->{ strict } = 1;
+    return(1);
+}
+
+=head2 warnings()
+
+Returns a list of warnings that have accumulated while processing a particular
+batch file. As a side effect the warning buffer will be cleared.
+
+    my @warnings = $batch->warnings();
+
+This method is also used internally to set warnings, so you probably don't
+want to be passing in anything as this will set warnings on your batch object.
+
+C<warnings()> will return the empty list when there are no warnings.
+
+=cut
+
+sub warnings {
+    my ($self, at new) = @_;
+    if ( @new ) {
+        push( @{ $self->{warnings} }, @new );
+        print STDERR join( "\n", @new ) if $self->{'warn'};
+    } else {
+        my @old = @{ $self->{warnings} };
+        $self->{warnings} = [];
+        return(@old);
+    }
+}
+
+
+=head2 warnings_off()
+
+Turns off the default behavior of printing warnings to STDERR. However, even
+with warnings off the messages can still be retrieved using the warnings()
+method if you wish to check for them.
+
+C<warnings_off()> always returns true (1).
+
+=cut
+
+sub warnings_off {
+    my $self = shift;
+    $self->{ 'warn' } = 0;
+
+    return 1;
+}
+
+=head2 warnings_on()
+
+Turns on warnings so that diagnostic information is printed to STDERR. This
+is on by default so you shouldn't have to use it unless you've previously
+turned off warnings using warnings_off().
+
+warnings_on() always returns true (1).
+
+=cut
+
+sub warnings_on {
+    my $self = shift;
+    $self->{ 'warn' } = 1;
+}
+
+=head2 filename()
+
+Returns the currently open filename or C<undef> if there is not currently a file
+open on this batch object.
+
+=cut
+
+sub filename {
+    my $self = shift;
+
+    return $self->{filename};
+}
+
+
+1;
+
+__END__
+
+=head1 RELATED MODULES
+
+L<MARC::Record>, L<MARC::Lint>
+
+=head1 TODO
+
+None yet.  Send me your ideas and needs.
+
+=head1 LICENSE
+
+This code may be distributed under the same terms as Perl itself.
+
+Please note that these modules are not products of or supported by the
+employers of the various contributors to the code.
+
+=head1 AUTHOR
+
+Andy Lester, C<< <andy at petdance.com> >>
+
+=cut

Added: packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Doc/Tutorial.pod
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Doc/Tutorial.pod	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Doc/Tutorial.pod	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,1252 @@
+=head1 NAME
+
+MARC::Doc::Tutorial - A documentation-only module for new users of MARC::Record
+
+
+
+=head1 SYNOPSIS
+
+ perldoc MARC::Doc::Tutorial
+
+
+
+=head1 INTRODUCTION
+
+=head2 What is MARC?
+
+The MAchine Readable Cataloging format was designed by the Library of
+Congress in the late 1960s in order to allow libraries to convert their card
+catalogs into a digital format. The advantages of having computerized card
+catalogs were soon realized, and now MARC is being used by all sorts of
+libraries around the world to provide computerized access to their collections.
+MARC data in transmission format is optimized for processing by computers, so 
+it's not very readable for the normal human. For more about the MARC format,
+visit the Library of Congress at http://www.loc.gov/marc/
+
+=head2 What is this Tutorial?
+
+The document you are reading is a beginners guide to using Perl to processing
+MARC data, written in the 'cookbook' style. Inside, you will find recipes on 
+how to read, write, update and convert MARC data using the MARC::Record CPAN 
+package. As with any cookbook, you should feel free to dip in at any section
+and use the recipe you find interesting. If you are new to Perl, you may 
+want to read from the beginning.
+
+The document you are reading is distributed with the MARC::Record package, 
+however in case you are reading it somewhere else, you can find the latest 
+version at CPAN: http://www.cpan.org/modules/by-module/MARC/. You'll notice
+that some sections aren't filled in yet, which is a result of this document
+being a work in progress. If you have ideas for new sections please make a
+suggestion to perl4lib: http://www.rice.edu/perl4lib/.
+
+=head2 History of MARC on CPAN
+
+In 1999, a group of developers began working on MARC.pm to provide a Perl 
+module for working with MARC data. MARC.pm was quite successful since it 
+grew to include many new options that were requested by the Perl/library
+community.  However, in adding these features the module swiftly outgrew its
+own clothes, and maintenance and addition of new features became extremely
+difficult. In addition, as libraries began using MARC.pm to process large MARC
+data files (>1000 records) they noticed that memory consumption would skyrocket.
+Memory consumption became an issue for large batches of records because 
+MARC.pm's object model was based on the 'batch' rather than the record... so 
+each record in the file would often be read into memory. There were ways of 
+getting around this, but they were not obvious. Some effort was made to 
+reconcile the two approaches (batch and record), but with limited success.
+
+In mid 2001, Andy Lester released MARC::Record and MARC::Field which provided
+a much simpler and maintainable package for processing MARC data with Perl.
+As its name suggests, MARC::Record treats an individual MARC record as the
+primary Perl object, rather than having the object represent a given set of
+records. Instead of forking the two projects, the developers agreed to
+encourage use of the MARC::Record framework, and to work on enhancing
+MARC::Record rather than extending MARC.pm further. Soon afterwards,
+MARC::Batch was added, which allows you to read in a large data file
+without having to worry about memory consumption.
+
+=head2 Brief Overview of MARC Classes
+
+The MARC::Record package is made up of several separate packages. This
+can be somewhat confusing to people new to Perl, or Object Oriented 
+Programming. However this framework allows easy extension, and is built
+to support new input/output formats as their need arises. For a good 
+introduction to using the object oriented features of Perl, see 
+the perlboot documentation that came with your version of Perl.
+
+Here are the packages that get installed with MARC::Record:
+
+=over 4
+
+=item MARC::Batch
+
+A convenience class for accessing MARC data contained in an external file.
+
+=item MARC::Field
+
+An object for representing the indicators and subfields of a single MARC field. 
+
+=item MARC::Lint
+
+An extension to check the validity of MARC records.
+
+=item MARC::Record
+
+This primary class represents a MARC record, being a container for multiple MARC::Field objects. 
+
+=item MARC::Doc::Tutorial
+
+This document!
+
+=item MARC::File
+
+A superclass for representing files of MARC data.
+
+=item MARC::File::MicroLIF
+
+A subclass of MARC::File for working with data encoded in the MicroLIF format.
+
+=item MARC::File::USMARC
+
+A subclass of MARC::File for working with data encoded in the USMARC format.
+
+=back
+
+=head2 Help Wanted!
+
+It's already been mentioned but it's worth mentioning again:
+MARC::Doc::Tutorial is a work in progress, and you are encouraged to submit
+any suggestions for additional recipes via the perl4lib mailing list at
+http://www.rice.edu/perl4lib. Also, the development group is always looking
+for additional developers with good ideas; if you are interested you can
+sign up at SourceForge: http://sourceforge.net/projects/marcpm/.
+
+
+
+=head1 READING
+
+=head2 Reading a record from a file
+
+Let's say you have a USMARC record in 'file.dat' and
+you'd like to read in the record and print out its title.
+
+   1   ## Example R1
+   2   
+   3   ## create a MARC::Batch object.
+   4   use MARC::Batch;
+   5   my $batch = MARC::Batch('USMARC', 'file.dat');
+   6   
+   7   ## get a MARC record from the MARC::Batch object.
+   8   ## the $record will be a MARC::Record object.
+   9   my $record = $batch->next();
+  10   
+  11   ## print the title contained in the record.
+  12   print $record->title(),"\n";
+
+Using the distribution's 't/camel.usmarc', your result should be:
+
+  ActivePerl with ASP and ADO / Tobias Martinsson.
+
+=head2 Iterating through a batch file
+
+Now imagine that 'file.dat' actually contains multiple records and 
+we want to print the title for each of them. Our program doesn't have 
+to change very much at all: we just need to add a loop around our call
+to C<next()>.
+
+   1   ## Example R2
+   2   
+   3   ## create a MARC::Batch object.
+   4   use MARC::Batch;
+   5   my $batch = MARC::Batch->new('USMARC','file.dat');
+   6   
+   7   while (my $record = $batch->next()) {
+   8   
+   9     ## print the title contained in the record.
+  10     print $record->title(),"\n";
+  11   
+  12   }
+
+The call to the C<next()> method at line 7 returns the next record from the 
+file. C<next()> returns C<undef> when there are no more records left in the file,
+which causes the C<while> loop to end. This is a useful idiom for reading in 
+all the records in a file. Your results with 'camel.usmarc' should be:
+
+  ActivePerl with ASP and ADO / Tobias Martinsson.
+  Programming the Perl DBI / Alligator Descartes and Tim Bunce.
+  .
+  .
+  .
+  Cross-platform Perl / Eric F. Johnson.
+
+=head2 Checking for errors
+
+It is a good idea to get in the habit of checking for errors. MARC/Perl has 
+been designed to help you do this. Calls to C<next()> when iterating through a
+batch file will return C<undef> when there are no more records to return...
+B<AND> when an error was encountered (see the next recipe to subvert this).
+You probably want to make sure that you didn't abruptly stop reading a
+batch file because of an error.
+
+   1   ## Example R3 
+   2   
+   3   ## create a MARC::Batch object.
+   4   use MARC::Batch;
+   5   my $batch = MARC::Batch->new('USMARC','file.dat');
+   6   
+   7   ## get a marc record from the MARC::Batch object.
+   8   ## $record will be a MARC::Record object.
+   9   while ( my $record = $batch->next() ) {
+  10       print $record->title(),"\n";
+  11   }
+  12   
+  13   ## make sure there weren't any problems.
+  14   if ( my @warnings = $batch->warnings() ) {
+  15       print "\nWarnings were detected!\n", @warnings;
+  16   }
+
+The call to C<warnings()> at line 14 will retrieve any warning messages and store
+them in C<@warnings>. This allows you to detect when C<next()> has aborted
+prematurely (before the end of the file has been reached). When a warning is
+detected, an explanation is sent to C<STDERR>. By introducing an error into
+'camel.usmarc', we'll receive the following output to C<STDOUT>: 
+
+  Warnings were detected!
+  Invalid indicators "a0" forced to blanks in record 1 for tag 245
+
+=head2 Recovering from errors 
+
+You may want to keep reading a batch file even after an error has been encountered.
+If so, you will want to turn strict mode off using the C<strict_off()> method. You
+can also prevent warnings from being printed to C<STDERR> using the C<warnings_off()>
+method. By default, strict is on as a safety precaution to prevent you from using corrupt
+MARC data.  Once off, you can turn both strict and warnings back on again with the 
+C<strict_on()> and C<warnings_on()> methods. 
+
+   1   ## Example R4
+   2   
+   3   use MARC::Batch;
+   4   my $batch = MARC::Batch->new('USMARC', 'file.dat');
+   5   $batch->strict_off();
+   6   
+   7   while ( my $record = $batch->next() ) {
+   8      print $record->title(),"\n";
+   9   }
+  10
+  11   ## make sure there weren't any problems.
+  12   if ( my @warnings = $batch->warnings() ) {
+  13       print "\nWarnings were detected!\n", @warnings;
+  14   }
+
+Introducing a second error to the 'camel.usmarc' file gives the following:
+
+   ActivePerl with ASP and ADO / Tobias Martinsson.
+   Programming the Perl DBI / Alligator Descartes and Tim Bunce.
+   .
+   .
+   .
+   Cross-platform Perl / Eric F. Johnson.
+
+   Warnings were detected!
+   Invalid indicators "a0" forced to blanks in record 1 for tag 245
+   Invalid indicators "a0" forced to blanks in record 5 for tag 245
+
+=head2 Looking at a field 
+
+Our previous examples use MARC::Record's C<title()> method to easily access
+the 245 field, but you will probably want programs that access lots of other
+MARC fields. MARC::Record's C<field()> method gives you complete access to the
+data found in any MARC field. The C<field()> method returns a MARC::Field
+object which can be used to access the data, indicators, and even the
+individual subfields. Our next example shows how this is done.
+
+   1   ## Example R5
+   2   
+   3   ## open a file.
+   4   use MARC::Batch;
+   5   my $batch = MARC::Batch->new('USMARC','file.dat');
+   6   
+   7   ## read a record.
+   8   my $record = $batch->next();
+   9   
+  10   ## get the 100 field as a MARC::Field object.
+  11   my $field = $record->field('100'); 
+  12   print "The 100 field contains: ",$field->as_string(),"\n"; 
+  13   print "The 1st indicator is ",$field->indicator(1),"\n";
+  14   print "The 2nd indicator is ",$field->indicator(2),"\n";
+  15   print "Subfield d contains: ",$field->subfield('d'),"\n";
+
+Which results in something like:
+
+  The 100 field contains: Martinsson, Tobias, 1976-
+  The 1st indicator is 1
+  The 2nd indicator is  
+  Subfield d contains: 1976-
+
+As before, use a C<while> loop to iterate through all the records in a batch.
+
+=head2 Looking at repeatable fields
+
+So how do you retrieve data from repeatable fields? The C<field()> method
+can help you with this as well.  In our previous example's line 11, the 
+C<field()> method was used in a I<scalar> context, since the result was being 
+assigned to the variable C<$field>. However in a I<list> context, C<field()>
+will return all the fields in the record of that particular type. For example:
+
+   1   ## Example R6
+   2   
+   3   use MARC::Batch;
+   4   my $file = MARC::Batch->new('USMARC','file.dat');
+   5   my $record = $batch->next();
+   6   
+   7   ## get all the 650 fields (list context).
+   8   my @fields = $record->field('650');
+   9   
+  10   ## examine each 650 field and print it out.
+  11   foreach my $field (@fields) {
+  12     print $field->as_string(),"\n";
+  13   }
+
+Which prints out the following for the first record of 't/camel.usmarc':
+
+  Active server pages.
+  ActiveX.
+
+=head2 Looking at a set of related fields
+
+C<field()> also allows you to retrieve similar fields using '.' as a wildcard.
+
+   1   ## Example R7
+   2   
+   3   use MARC::Batch;
+   4   my $batch = MARC::Batch->new('USMARC','file.dat');
+   5   my $record = $batch->next();
+   6   
+   7   # retrieve all title fields in one shot.
+   8   foreach my $field ($record->field('2..')) {
+   9     print $field->tag(),' contains ',$field->as_string(),"\n";
+  10   }
+
+Notice the shorthand in line 8 which compacts lines 7-13 of our previous example.
+Instead of storing the fields in an array, the C<field()> still returns a list
+in the C<for> loop. Line 9 uses the C<tag()> method which returns the tag number
+for a particular MARC field, which is useful when you aren't certain what
+tag you are currently dealing with. Sample output from this recipe:
+
+   245 contains ActivePerl with ASP and ADO / Tobias Martinsson.
+   260 contains New York : John Wiley & Sons, 2000.
+
+You  can also return all tags for a specific record by using '...'
+in C<field> (though, see the next recipe).
+
+=head2 Looking at all the fields in a record
+
+The last example in this section illustrates how to retrieve I<all> the fields
+in a record using the C<fields()> method. This method is similar to passing
+'...' as a wildcard (see our previous recipe for alternative access).
+
+   1   ## Example R8
+   2   
+   3   use MARC::Batch;
+   4   my $file = MARC::Batch->new('USMARC','file.dat');
+   5   my $record = $batch->next();
+   6   
+   7   ## get all of the fields using the fields() method.
+   8   my @fields = $record->fields();
+   9   
+  10   ## print out the tag, the indicators and the field contents.
+  11   foreach my $field (@fields) {
+  12     print 
+  13       $field->tag(), " ", 
+  14       defined $field->indicator(1) ? $field->indicator(1) : "",
+  15       defined $field->indicator(2) ? $field->indicator(2) : "",
+  16       " ", $field->as_string, " \n";
+  17   }
+
+The above code would print the following for the first record of 't/camel.usmarc':
+
+  001  fol05731351  
+  003  IMchF 
+  .
+  .
+  .
+  300    xxi, 289 p. : ill. ; 23 cm. + 1 computer  laser disc (4 3/4 in.) 
+  500    "Wiley Computer Publishing." 
+  650  0 Perl (Computer program language) 
+  630 00 Active server pages. 
+  630 00 ActiveX. 
+
+
+
+=head1 CREATING
+
+The examples in the Section 1 covered how to read in existing USMARC data
+in a file. Section 2 will show you how to create a MARC record from scratch.
+The techniques in this section would allow you to write programs which
+create MARC records that could then be loaded into an online catalog, or
+sent to a third party.
+
+=head2 Creating a record 
+
+To create a new MARC record, you'll need to first create a MARC::Record object,
+add a leader (though MARC::Record can create leaders automatically if you don't
+specifically define one), and then create and add MARC::Field objects to your
+MARC::Record object. For example:
+
+   1   ## Example C1 
+   2   
+   3   ## create a MARC::Record object.
+   4   use MARC::Record;
+   5   my $record = MARC::Record->new();
+   6   
+   7   ## add the leader to the record. optional.
+   8   $record->leader('00903pam   2200265 a 4500');
+   9   
+  10   ## create an author field.
+  11   my $author = MARC::Field->new(
+  12     '100',1,'',
+  13       a => 'Logan, Robert K.',
+  14       d => '1939-'
+  15     );
+  16   $record->append_fields($author);
+  17   
+  18   ## create a title field.
+  19   my $title = MARC::Field->new(
+  20     '245','1','4',
+  21       a => 'The alphabet effect /',
+  22       c => 'Robert K. Logan.'
+  23     );
+  24   $record->append_fields($title);
+
+The key to creating records from scratch is to use C<append_fields()>, which adds
+a field to the end of the record. Since each field gets added at the end, it's up
+to you to order the fields the way you want. C<insert_fields_before()> and
+C<insert_fields_after()> are similar methods that allow you to define where
+the field gets added. These methods are covered in more detail below.
+
+
+
+=head1 WRITING
+
+Sections 1 and 2 showed how to read and create USMARC data. Once you know how 
+to read and create, it becomes important to know how to write the USMARC data 
+to disk in order to save your work. In these examples, we will create a new record
+and save it to a file called 'record.dat'. 
+
+=head2 Writing records to a file
+
+   1   ## Example W1
+   2   
+   3   ## create a MARC::Record object.
+   4   use MARC::Record;
+   5   my $record = MARC::Record->new();
+   6   
+   7   ## add the leader to the record. optional.
+   8   $record->leader('00903pam   2200265 a 4500');
+   9   
+  10   ## create an author field.
+  11   my $author = MARC::Field->new(
+  12     '100',1,'',
+  13       a => 'Logan, Robert K.',
+  14       d => '1939-'
+  15     );
+  16   
+  17   ## create a title field.
+  18   my $title = MARC::Field->new(
+  19     '245','1','4',
+  20       a => 'The alphabet effect /',
+  21       c => 'Robert K. Logan.'
+  22     );
+  23
+  24   $record->append_fields($author, $title);
+  25   
+  26   ## open a filehandle to write to 'record.dat'.
+  27   open(OUTPUT, '> record.dat') or die $!;
+  28   print OUTPUT $record->as_usmarc();
+  29   close(OUTPUT);
+
+
+The C<as_usmarc()> method call at line 28 returns a scalar value which is
+the raw USMARC data for C<$record>. The raw data is then promptly printed to
+the C<OUTPUT> file handle. If you want to output multiple records to a file,
+simply repeat the process at line 28 for the additional records. Also of
+note is the C<append_fields> method: unlike recipe C1 which called the
+method once for each field added, this recipe demonstrates that
+C<append_fields> can accept multiple arguments.
+
+Note to the curious: the C<as_usmarc()> method is actually an alias to the
+MARC::File::USMARC C<encode()> method. Having separate C<encode()> methods is
+a design feature of the MARC class hierarchy, since it allows extensions to
+be built that translate MARC::Record objects into different data formats.
+
+=head2 Debugging with C<as_formatted()>
+
+Since raw USMARC data isn't very easy for humans to read, it is often useful 
+to be able to see the contents of your MARC::Record object represented in a 
+'pretty' way for debugging purposes. If you have a MARC::Record object you'd
+like to pretty-print, use the C<as_formatted()> method.
+
+   1   ## Example W2
+   2   
+   3   ## create a MARC::Record object.
+   4   use MARC::Record;
+   5   my $record = MARC::Record->new();
+   6
+   7   $record->leader('00903pam  2200265 a 4500');
+   8
+   9   $record->append_fields(
+  10    MARC::Field->new('100','1','', a=>'Logan, Robert K.', d=>'1939-'),
+  11    MARC::Field->new('245','1','4', a=>'The alphabet effect /', c=>'Robert K. Logan.')
+  12   );
+  13   
+  14   ## pretty print the record.
+  15   print $record->as_formatted(), "\n";
+
+This code will pretty print the contents of the newly created record:
+
+  LDR 00903pam  2200265 a 4500
+  100 1  _aLogan, Robert K.
+         _d1939-
+  245 14 _aThe alphabet effect /
+         _cRobert K. Logan.
+
+Notice on lines 9-12 how you can add a list of new fields by creating
+MARC::Field objects within a call to C<append_fields()>. This is yet
+another shorthand method to those shown in recipes C1 and W1. For more
+pretty-printing capabilities, try C<marcdump()> in our next recipe.
+
+=head2 Debugging with marcdump()
+
+If you have written USMARC data to a file (as in recipe W2) and you would
+like to verify that the data is stored correctly you can use the C<marcdump>
+command line utility that was installed with the MARC::Record package:
+
+ % marcdump record.dat
+ record.dat
+ LDR 00122pam  2200049 a 4500
+ 100 1  _aLogan, Robert K.
+        _d1939-
+ 245 14 _aThe alphabet effect /
+        _cRobert K. Logan.
+
+  Recs  Errs Filename
+ ----- ----- --------
+     1     0 record.dat
+
+As you can see, this command results in the record being pretty printed to
+your screen (C<STDOUT>) similarly to the C<as_formatted> method from recipe
+W2. It is useful for verifying your USMARC data after it has been stored on
+disk. More details about debugging are found later in VALIDATING.
+
+
+
+=head1 UPDATING
+
+Now that you know how to read, write and create MARC data, you have the
+tools you need to update or edit exiting MARC data. Updating MARC 
+data is a common task for library catalogers. Sometimes there are huge
+amounts of records that need to be touched up... and while the touch ups are
+very detail oriented, they are also highly repetitive. Luckily, computers
+are tireless, and not very prone to error (assuming the programmer isn't).
+
+When libraries receive large batches of MARC records for electronic text 
+collections such as NetLibrary, Making of America, or microfiche sets like 
+Early American Imprints, the records are often loaded into an online system
+and then the system is used to update the records. Unfortunately, not all 
+these systems are created equal, and catalogers have to spend a great deal
+of time touching up each individual record. An alternative would be to 
+process the records prior to import and then, once in the system, the records 
+would not need editing. This scenario would save a great deal of time for 
+the cataloger who would be liberated to spend their time doing original 
+cataloging... which computers are notably bad at!
+
+=head2 Adding a field
+
+Imagine a batch of records in 'file.dat' that you'd like to add local notes (590)
+to, then saving your changes:
+
+   1   ## Example U1 
+   2   
+   3   ## create our MARC::Batch object.
+   4   use MARC::Batch;
+   5   my $batch = MARC::Batch->new('USMARC','file.dat');
+   6   
+   7   ## open a file handle to write to.
+   8   open(OUT,'>new.dat') or die $!;
+   9   
+  10   ## read each record, modify, then print.
+  11   while ( my $record = $batch->next() ) {
+  12   
+  13       ## add a 590 field.
+  14       $record->append_fields(
+  15          MARC::Field->new('590','','',a=>'Access provided by Enron.')
+  16       );
+  17  
+  18       print OUT $record->as_usmarc();
+  19   
+  20   }
+  21   
+  22   close(OUT);
+
+=head2 Preserving field order
+
+As its name suggests, C<append_fields()> will add the 590 field in recipe U1
+to the end of the record. If you want to preserve a particular order, you can
+use the C<insert_fields_before()> and C<insert_fields_after()> methods. In order
+to use these, you need to locate the field you want to insert before or after.
+Here is an example (C<insert_fields_after()> works similarly):
+
+   1   ## Example U2
+   2   
+   3   use MARC::Batch;
+   4   my $batch = MARC::Batch->new('USMARC','file.dat');
+   5   open(OUT,'>new.dat') or die $!;
+   6   
+   7   ## read in each record.
+   8   while ( my $record = $batch->next() ) {
+   9   
+  10       ## find the tag after 590.
+  11       my $before;
+  12       foreach ($record->fields()) {
+  13           $before = $_;
+  14           last if $_->tag() > 590;
+  15       } 
+  16   
+  17       ## create the 590 field.
+  18       my $new = MARC::Field->new('590','','',a=>'Access provided by Enron.');
+  19   
+  20       ## insert our 590 field after the $before.
+  21       $record->insert_fields_before($before,$new);
+  22   
+  23       ## and print out the new record.
+  24       print OUT $record->as_usmarc();
+  25   
+  26   }
+
+=head2 Deleting a field
+
+You can also delete fields that you don't want. But you will probably want
+to check that the field contains what you expect before deleting it. Let's
+say Enron has gone out of business and the 590 field needs to be deleted:
+
+   1   ## Example U3
+   2   
+   3   use MARC::Batch;
+   4   my $batch = MARC::Batch->new('USMARC','new.dat');
+   5   open(OUT,'>newer.dat') or die $1;
+   6   
+   7   while ( my $record = $batch->next() ) {
+   8   
+   9     ## get the 590 record.
+  10     my $field = $record->field('590');
+  11   
+  12     ## if there is a 590 AND it has the word "Enron"...
+  13     if ($field and $field->as_string() =~ /Enron/i) {
+  14   
+  15       ## delete it!
+  16       $record->delete_field($field);
+  17   
+  18     }
+  19   
+  20     ## output possibly modified record.
+  21     print OUT $record->as_usmarc(); 
+  22   
+  23   }
+
+The 590 field is retrieved on line 10, but notice how we check that we 
+actually received a valid C<$field>, and that it then contains the word
+'Enron' before we delete it. You need to pass C<delete_field()> a MARC::Field
+object that can be retrieved with the C<field()> method.
+
+=head2 Changing existing fields
+
+Perhaps rather than adding or deleting a field, you need to modify an 
+existing field. This is achieved in several steps: first, read in the
+MARC record you want to update, and then the field you're interested in.
+From there, call the field's C<update> or C<replace_with> methods to modify
+its contents, and then resave the record. Below is an example of updating existing
+590 field's containing the word 'Enron' to indicate that access is now
+provided through Arthur Andersen:
+
+   1   ## Example U4
+   2   
+   3   use MARC::Batch;
+   4   my $batch = MARC::Batch->new('USMARC','new.dat');
+   5   open(OUT,'>newer.dat') or die $1;
+   6   
+   7   while ( my $record = $batch->next() ) {
+   8   
+   9     ## look for a 590 containing "Enron"...
+  10     my $field = $record->field('590');
+  11     if ($field and $field->as_string =~ /Enron/i) {
+  12   
+  13       ## create a new 590 field.
+  14       my $new_field = MARC::Field->new(
+  15         '590','','', a => 'Access provided by Arthur Andersen.' );
+  16   
+  17       ## replace existing with our new one.
+  18       $field->replace_with($new_field);
+  19   
+  20     }
+  21   
+  22     ## output possibly modified record.
+  23     print OUT $record->as_usmarc();
+  24   
+  25   }
+
+In this example, we used MARC::Field's method C<replace_with()> to replace
+an existing field in the record with a new field that we created. To use 
+C<replace_with()>, you need to retrieve the field you want to replace from
+a MARC::Record object (line 10), create a new field to replace the existing
+one with (lines 13-15), and then call the existing field's C<replace_with()>
+method passing the new field as an argument (lines 18). You must pass
+C<replace_with()> a valid MARC::Field object.
+
+=head2 Updating subfields and indicators 
+
+If you'd rather not replace an existing field with a new one, you can also 
+edit the contents of the field itself using the C<update()> method. Let's say 
+you've got a batch of records and want to make sure that the 2nd indicator 
+for the 245 field is properly set for titles that begin with 'The' (where
+the indicator should be '4').
+
+   1   ## Example U5
+   2   
+   3   use MARC::Batch;
+   4   my $batch = MARC::Batch->new('USMARC','file.dat');
+   5   open(OUT,'>new.dat') or die $!;
+   6   
+   7   while (my $record = $batch->next()) {
+   8   
+   9     ## retrieve the 245 record.
+  10     my $field_245 = $record->field('245');
+  11   
+  12     ## if we got 245 and it starts with 'The'...
+  13     if ($field_245 and $field_245->as_string() =~ /^The /) {
+  14   
+  15       ## if the 2nd indicator isn't 4, update
+  16       if ($field_245->indicator(2) != 4) { 
+  17         $field_245->update( ind2 => 4 );
+  18       }
+  19   
+  20     }
+  21   
+  22     print OUT $record->as_usmarc();
+  23   
+  24   }
+
+In a similar fashion, you can update individual or multiple subfields:
+
+  $field_245->update( a => 'History of the World :', b => 'part 1' );
+
+But beware, you can only update the first occurrence of a subfield using
+C<update()>. If you need to do more finer grained updates, you are advised to
+build a new field and replace the existing field with C<replace_with()>.
+
+=head2 Changing a record's leader
+
+The above procedure works for fields, but editing the leader requires that you 
+use the C<leader()> method. When called with no arguments, C<leader()> will return
+the current leader, and when you pass a scalar value as an argument, the
+leader will be set to this value. This example shows how you might want
+to update position 6 of a records leader to reflect a computer file.
+
+   1   ## Example U6
+   2   
+   3   use MARC::Batch;
+   4   my $batch = MARC::Batch->new('USMARC','file.dat');
+   5   open(OUT,'>new.dat') or die $!;
+   6   my $record = $batch->next();
+   7   
+   8   ## get the current leader.
+   9   my $leader = $record->leader();
+  10   
+  11   ## replace position 6 with 'm'
+  12   substr($leader,6,1) = 'm'; 
+  13   
+  14   ## update the leader
+  15   $record->leader($leader);
+  16   
+  17   ## save the record to a file
+  18   print OUT $record->as_usmarc();
+
+=head2 Modifying fields without indicators
+
+MARC::Record and MARC::Field are smart and know that you don't have field
+indicators with tags less than 010. Here's an example of updating/adding
+an 005 field to indicate a new transaction time. For a little pizzazz, we
+use Perl's C<localtime()> to generate the data we need for this field.
+
+   1   ## Example U7
+   2   
+   3   use MARC::Batch;
+   4   my $batch = MARC::Batch->new('USMARC','file.dat');
+   5   open(OUT,'>new.dat') or die $!;
+   6   
+   7   while (my $record = $batch->next() ) {
+   8   
+   9     ## see if there is a 005 field. 
+  10     my $field_005 = $record->field('005');
+  11   
+  12     ## delete it if we find one.
+  13     $record->delete_field($field_005) if $field_005;
+  14   
+  15     ## figure out the contents of our new 005 field.
+  16     my ($sec,$min,$hour,$mday,$mon,$year) = localtime();
+  17     $year += 1900; $mon += 1; # catering to offsets.
+  18     my $datetime = sprintf("%4d%02d%02d%02d%02d%02d.0",
+  19                             $year,$mon,$mday,$hour,$min,$sec); 
+  20     
+  21     ## create a new 005 field using our new datetime.
+  22     $record->append_fields( MARC::Field->new('005',$datetime) );
+  23   
+  24     ## save record to a file.
+  25     print OUT $record->as_usmarc();
+  26   
+  27   }
+
+=head2 Reordering subfields
+
+You may find yourself in the situation where you would like to
+programmatically reorder, and possibly modify, subfields in a particular
+field. For example, imagine that you have a batch of records that have
+856 fields which contain subfields z, u, and possibly 3... in any order!
+Now imagine that you'd like to standardize the subfield z, and reorder them
+so that subfield 3 precedes subfield z, which precedes subfield u. This is
+tricky but can be done in the following manner: read in a record, extract
+the existing 856 field, build a new 856 field based on the existing one,
+replace the existing field with your newly created version.
+
+   1   ## Example U8
+   2   
+   3   use MARC::Batch;
+   4   my $batch = MARC::Batch->new('USMARC','856.dat');
+   5   open(OUT,'>856_new.dat') or die $!;
+   6   
+   7   while (my $record = $batch->next()) {
+   8   
+   9     my $existing = $record->field('856');
+  10   
+  11     ## make sure 856 exists.
+  12     if ($existing) { 
+  13       
+  14       ## our ordered subfields.
+  15       my @subfields = ();
+  16       
+  17       ## if we have a subfield 3, add it.
+  18       if (defined($existing->subfield('3'))) {
+  19         push(@subfields,'3',$existing->subfield('3'));
+  20       }
+  21       
+  22       ## now add subfields z and u.
+  23       push(@subfields,'z','Access restricted',
+  24         'u',$existing->subfield('u'));
+  25       
+  26       ## create a new 856.
+  27       my $new = MARC::Field->new( 
+  28          856', $existing->indicator(1),
+  29          $existing->indicator(2), @subfields
+  30       );
+  31       
+  32       ## replace the existing subfield.
+  33       $existing->replace_with($new);
+  34       
+  35     }
+  36     
+  37     ## write out the record
+  38     print OUT $record->as_usmarc();
+  39   
+  40   }
+
+=head2 Updating subject subfield x to subfield v
+
+As a somewhat more complicated example, you may find yourself wanting to
+update the last subfield x in a 650 field to be a subfield v instead. With
+the  MARC::Field C<subfields()> and C<replace_with()> methods along with
+some  fancy footwork this can be done relatively easily.
+
+   1  ## Example U9
+   2
+   3  use MARC::Batch;
+   4
+   5  my $file = shift;
+   6
+   7  my $batch = MARC::Batch->new('USMARC', $file);
+   8  while ( my $record = $batch->next() ) {
+   9
+  10    # go through all 6XX fields in the record.
+  11    foreach my $subject ( $record->field( '6..' ) ) {
+  12  
+  13      # extract subfields as an array of array refs.
+  14      my @subfields = $subject->subfields();
+  15  
+  16      # setup an array to store our new field.
+  17      my @newSubfields = ();
+  18  
+  19      # a flag to indicate that we found an subfield x.
+  20      my $foundX = 0;
+  21  
+  22      # use pop() to read the subfields backwards.
+  23      while ( my $subfield = pop( @subfields ) ) {
+  24  
+  25        # for convenience, pull out the subfield
+  26        # code and data from  the array ref.
+  27        my ($code,$data) = @$subfield;
+  28  
+  29        # if the subfield code is 'x' and
+  30        # we haven't already found one...
+  31        if ( $code eq 'x' and ! $foundX ) { 
+  32  
+  33          # change to a v.
+  34          $code = 'v';
+  35  
+  36          # set flag so we know not to
+  37          # translate any more subfield x.
+  38          $foundX = 1;
+  39  
+  40        } 
+  41  
+  42        # add our (potentially changed) subfield
+  43        # data to our new subfield data array.
+  44        unshift( @newSubfields, $code, $data );
+  45  
+  46      }
+  47  
+  48      # if we did find a subfield x, then create a new field using our
+  49      # new subfield data, and replace the old one with the new one.
+  50      if ( $foundX ) {
+  51        my $newSubject = MARC::Field->new( 
+  52          $subject->tag(),
+  53          $subject->indicator(1),
+  54          $subject->indicator(2),
+  55          @newSubfields
+  56        );
+  57        $subject->replace_with( $newSubject );
+  58      }
+  59  
+  60    }
+  61  
+  62    # output the potentially changed record as MARC.
+  63    print $record->as_usmarc();
+  64
+  65  }
+
+
+
+=head1 VALIDATING
+
+The MARC::Record package has some extra goodies to allow you to validate 
+records: MARC::Lint. MARC::Lint provides an extensive battery of tests,
+and it also provides a framework for adding more. 
+
+=head2 Using MARC::Lint
+
+Here is an example of using MARC::Lint to generate a list of errors
+present in a batch of records in a file named 'file.dat':
+
+   1   ## Example V1
+   2   
+   3   use MARC::Batch;
+   4   use MARC::Lint;
+   5   
+   6   my $batch = MARC::Batch->new('USMARC','file.dat');
+   7   my $linter = MARC::Lint->new();
+   8   my $counter = 0;
+   9   
+  10   while (my $record = $batch->next() ) {
+  11   
+  12     $counter++;
+  13    
+  14     ## feed the record to our linter object.
+  15     $linter->check_record($record); 
+  16   
+  17     ## get the warnings...
+  18     my @warnings = $linter->warnings();
+  19   
+  20     ## output any warnings. 
+  21     if (@warnings) {
+  22   
+  23       print "RECORD $counter\n";
+  24       print join("\n", at warnings),"\n";
+  25   
+  26     }
+  27   
+  28   }
+
+MARC::Lint is quite thorough, and will check the following when validating:
+presence of a 245 field, repeatability of fields and subfields, valid use of
+subfield within particular fields, presence of indicators and their values.
+
+=head2 Customizing MARC::Lint
+
+MARC::Lint makes no claim to check B<everything> that might be wrong with 
+a MARC record. In practice, individual libraries may have their own idea
+about what is valid or invalid. For example, a library may mandate that 
+all MARC records with an 856 field should have a subfield z that reads
+"Connect to this resource".
+
+MARC::Lint does provide a framework for adding rules. It can be done using
+the object oriented programming technique of inheritance. In short, you
+can create your own subclass of MARC::Lint, and then use it to validate your
+records. Here's an example:
+
+   1   ## Example V2
+   2   
+   3   ## first, create our own subclass of MARC::Lint.
+   4   ## should be saved in a file called MyLint.pm.
+   5   
+   6   package MyLint;
+   7   use base qw(MARC::Lint);
+   8   
+   9   ## add a method to check that the 856
+  10   ## fields contain a correct subfield z.
+  11   sub check_856 {
+  12   
+  13     ## your method is passed the MARC::Lint
+  14     ## and MARC::Field objects for the record.
+  15     my ($self,$field) = @_;
+  16   
+  17     if ($field->subfield('z') ne 'Connect to this resource') {
+  18   
+  19       ## add a warning to our lint object.
+  20       $self->warn("856 subfield z must read 'Connect to this resource'.");
+  21   
+  22     }
+  23   
+  24   }
+
+Then create a separate program that uses your subclass to validate your MARC
+records. You'll need to make sure your program is able to find your module
+(in this case, MyLint.pm)... this can be achieved by putting both MyLint.pm
+and the following program in the same directory:
+
+   1   ## Example V3
+   2   
+   3   use MARC::Batch;
+   4   use MyLint;
+   5   
+   6   my $linter = MyLint->new();
+   7   my $batch = MARC::Batch->new('USMARC','file.marc');
+   8   my $counter = 0;
+   9   
+  10   while (my $record = $batch->next()) {
+  11   
+  12     $counter++;
+  13   
+  14     ## check the record
+  15     $linter->check_record($record);
+  16   
+  17     ## get the warnings, and print them out 
+  18     my @warnings = $linter->warnings();
+  19     if (@warnings) {
+  20       print "RECORD $counter\n";
+  21       print join("\n", at warnings),"\n";
+  22     }
+  23   
+  24   }
+
+Notice how the call to C<check_record()>  at line 15 automatically calls the
+C<check_record> in MARC::Lint. The property of inheritance is what makes
+this happen. C<$linter> is an instance of the MyLint class, and MyLint
+inherits from the MARC::Lint class, which allows C<$linter> to inherit all
+the functionality of a normal MARC::Lint object B<plus> the new
+functionality found in the C<check_856> method.
+
+Notice also that we don't have to call C<check_856()> directly. The call to 
+C<check_record()> automatically looks for any C<check_XXX> methods that it can
+call to verify the record. Pretty neat stuff. If you've added validation
+checks that you think could be of use to the general public, please share them
+on the perl4lib mailing list, or become a developer and add them to the source!
+
+=head1 SWOLLEN APPENDICES 
+
+Brian Eno fans might catch this reference to his autobiography which was 
+comprised of a years worth of diary entries plus extra topics at the end, and 
+was entitled "A Year With Swollen Appendices". The following section is a grab 
+bag group of appendices. Many of them are not filled in yet; this is because
+they are just ideas... so perhaps the appendices aren't that swollen yet.
+Feel free to suggest new ones, or to fill these in. 
+
+=head2 Comparing Collections
+
+=head2 Authority Records
+
+=head2 URLs
+
+=head2 ISBN/ISSNs
+
+=head2 Call numbers
+
+=head2 Subject headings
+
+Suppose you have a batch of MARC records and you want to extract all the
+subject headings, generating a report of how many times each subject
+heading appeared in the batch: 
+
+   1   use MARC::File::USMARC;
+   2   use constant MAX => 20;
+   3   
+   4   my %counts;
+   5   
+   6   my $filename = shift or die "Must specify filename\n";
+   7   my $file = MARC::File::USMARC->in( $filename );
+   8   
+   9   while ( my $marc = $file->next() ) {
+  10       for my $field ( $marc->field("6..") ) {
+  11           my $heading = $field->subfield('a');
+  12   
+  13           # trailing whitespace / punctuation.
+  14           $heading =~ s/[.,]?\s*$//;
+  15   
+  16           # Now count it.
+  17           ++$counts{$heading};
+  18       }
+  19   }
+  20   $file->close();
+  21   
+  22   # Sort the list of headings based on the count of each.
+  23   my @headings = reverse sort { $counts{$a} <=> $counts{$b} } keys %counts;
+  24   
+  25   # Take the top N hits...
+  26   @headings = @headings[0..MAX-1];
+  27   
+  28   # And print out the results.
+  29   for my $heading ( @headings ) {
+  30       printf( "%5d %s\n", $counts{$heading}, $heading );
+  31   }
+
+Which will generate results like this:
+
+  600 United States
+  140 World War, 1939-1945
+   78 Great Britain
+   63 Afro-Americans
+   61 Indians of North America
+   58 American poetry
+   55 France
+   53 West (U.S.)
+   53 Science fiction
+   53 American literature
+   50 Shakespeare, William
+   48 Soviet Union
+   46 Mystery and detective stories
+   45 Presidents
+   43 China
+   40 Frontier and pioneer life
+   38 English poetry
+   37 Authors, American
+   37 English language
+   35 Japan
+
+=head2 HTML
+
+=head2 XML
+
+=head2 Excel
+
+=head2 Databases
+
+=head2 Z39.50
+
+Chris Biemesderfer was kind enough to contribute a short example of how
+to use MARC::Record in tandem with Net::Z3950.  Net::Z3950 is a CPAN
+module which provides an easy to use interface to the Z39.50 protocol so that 
+you can write programs that retrieve records from bibliographic database
+around the world. 
+
+Chris' program is a command line utility which you run like so:
+
+  ./zm.pl 0596000278
+
+where 0596000278 is an ISBN (for the 3rd edition of the Camel incidentally).
+The program will query the Library of Congress Z39.50 server for the ISBN, 
+and dump out the retrieved MARC record on the screen. The program is designed
+to lookup multiple ISBNs if you separate them with a space.  This is just an 
+example showing what is possible.
+
+   1   #!/usr/bin/perl -w
+   2  
+   3   # GET-MARC-ISBN -- Get MARC records by ISBN from a Z39.50 server
+   4  
+   5   use strict;
+   6   use Carp;
+   7   use Net::Z3950;
+   8   use MARC::Record;
+   9  
+  10   exit if ($#ARGV < 0);
+  11  
+  12   # We handle multiple ISBNs in the same query by assembling a
+  13   # (potentially very large) search string with Prefix Query Notation
+  14   # that ORs the ISBN-bearing attributes.
+  15   #
+  16   # For purposes of automation, we want to request batches of many MARC
+  17   # records.  I am not a Z39.50 weenie, though, and I don't know
+  18   # offhand if there is a limit on how big a PQN query can be...
+  19  
+  20   my $zq = "\@attr 1=7 ". pop();
+  21   while (@ARGV) { $zq = '@or @attr 1=7 '. pop() ." $zq" }
+  22  
+  23   ## HERE IS THE CODE FOR Z3950 REC RETRIEVAL
+  24   # Set up connection management structures, connect
+  25   # to the server, and submit the Z39.50 query.
+  26  
+  27   my $mgr = Net::Z3950::Manager->new( databaseName => 'voyager' );
+  28   $mgr->option( elementSetName => "f" );
+  29   $mgr->option( preferredRecordSyntax => Net::Z3950::RecordSyntax::USMARC );
+  30  
+  31   my $conn = $mgr->connect('z3950.loc.gov', '7090');
+  32   croak "Unable to connect to server" if !defined($conn);
+  33  
+  34   my $rs = $conn->search($zq);
+  35  
+  36   my $numrec = $rs->size();
+  37   print STDERR "$numrec record(s) found\n";
+  38  
+  39   for (my $ii = 1; $ii <= $numrec; $ii++) {
+  40  
+  41       # Extract MARC records from Z3950
+  42       # result set, and load MARC::Record.
+  43       my $zrec = $rs->record($ii);
+  44       my $mrec = MARC::Record->new_from_usmarc($zrec->rawdata());
+  45       print $mrec->as_formatted, "\n\n";
+  46  
+  47   }
+
+=head2 Procite/Endnote
+
+=head1 CONTRIBUTORS
+
+Many thanks to all the contributors who have made this document possible.
+
+=over 4
+
+=item *
+
+Chris Biemesderfer <chris at seagoat.com>
+
+=item * 
+
+Morbus Iff <morbus at disobey.com>
+
+=item * 
+
+Andy Lester <andy at petdance.com>
+
+=item *
+
+Christopher Morgan <morgan at acm.org>
+
+=item *
+
+Shashi Pinheiro <SPinheiro at utsa.edu>
+
+=item *
+
+Jackie Shieh <jshieh at umich.edu>
+
+=item * 
+
+Ed Summers <ehs at pobox.com>
+
+=back
+
+

Added: packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Field.pm
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Field.pm	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Field.pm	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,561 @@
+package MARC::Field;
+
+use strict;
+use integer;
+use Carp;
+
+use constant SUBFIELD_INDICATOR => "\x1F";
+use constant END_OF_FIELD       => "\x1E";
+
+use vars qw( $ERROR );
+
+=head1 NAME
+
+MARC::Field - Perl extension for handling MARC fields
+
+=head1 SYNOPSIS
+
+  use MARC::Field;
+
+  my $field = MARC::Field->new( 245, '1', '0',
+       'a' => 'Raccoons and ripe corn / ',
+       'c' => 'Jim Arnosky.'
+  );
+  $field->add_subfields( "a", "1st ed." );
+
+=head1 DESCRIPTION
+
+Defines MARC fields for use in the MARC::Record module.  I suppose
+you could use them on their own, but that wouldn't be very interesting.
+
+=head1 EXPORT
+
+None by default.  Any errors are stored in C<$MARC::Field::ERROR>, which
+C<$MARC::Record> usually bubbles up to C<$MARC::Record::ERROR>.
+
+=head1 METHODS
+
+=head2 new()
+
+The constructor, which will return a MARC::Field object. Typically you will
+pass in the tag number, indicator 1, indicator 2, and then a list of any
+subfield/data pairs. For example:
+
+  my $field = MARC::Field->new(
+       245, '1', '0',
+       'a' => 'Raccoons and ripe corn / ',
+       'c' => 'Jim Arnosky.'
+  );
+
+Or if you want to add a field < 010 that does not have indicators.
+
+  my $field = MARC::Field->new( '001', ' 14919759' );
+
+=cut
+
+sub new($) {
+    my $class = shift;
+    $class = ref($class) || $class;
+
+    ## MARC spec indicates that tags can have alphabetical
+    ## characters in them! If they do appear we assume that
+    ## they have indicators like tags > 010
+    my $tagno = shift;
+    ($tagno =~ /^[0-9A-Za-z]{3}$/)
+        or croak( "Tag \"$tagno\" is not a valid tag." );
+    my $is_control = (($tagno =~ /^\d+$/) && ($tagno < 10));
+
+    my $self = bless {
+        _tag => $tagno,
+        _warnings => [],
+        _is_control_field => $is_control,
+    }, $class;
+
+    if ( $is_control ) {
+        $self->{_data} = shift;
+    } else {
+        for my $indcode ( qw( _ind1 _ind2 ) ) {
+            my $indicator = shift;
+            if ( $indicator !~ /^[0-9A-Za-z ]$/ ) {
+                $self->_warn( "Invalid indicator \"$indicator\" forced to blank" ) unless ($indicator eq "");
+                $indicator = " ";
+            }
+            $self->{$indcode} = $indicator;
+        } # for
+
+        (@_ >= 2)
+            or croak( "Field $tagno must have at least one subfield" );
+
+        # Normally, we go thru add_subfields(), but internally we can cheat
+        $self->{_subfields} = [@_];
+    }
+
+    return $self;
+} # new()
+
+
+=head2 tag()
+
+Returns the three digit tag for the field.
+
+=cut
+
+sub tag {
+    my $self = shift;
+    return $self->{_tag};
+}
+
+=head2 indicator(indno)
+
+Returns the specified indicator.  Returns C<undef> and sets
+C<$MARC::Field::ERROR> if the I<indno> is not 1 or 2, or if
+the tag doesn't have indicators.
+
+=cut
+
+sub indicator($) {
+    my $self = shift;
+    my $indno = shift;
+
+    $self->_warn( "Fields below 010 do not have indicators" )
+        if $self->is_control_field;
+
+    if ( $indno == 1 ) {
+        return $self->{_ind1};
+    } elsif ( $indno == 2 ) {
+        return $self->{_ind2};
+    } else {
+        croak( "Indicator number must be 1 or 2" );
+    }
+}
+
+=head2 is_control_field()
+
+Tells whether this field is one of the control tags from 001-009.
+
+=cut
+
+sub is_control_field {
+    my $self = shift;
+    return $self->{_is_control_field};
+}
+
+=head2 subfield(code)
+
+When called in a scalar context returns the text from the first subfield
+matching the subfield code.
+
+    my $subfield = $field->subfield( 'a' );
+
+Or if you think there might be more than one you can get all of them by
+calling in a list context:
+
+    my @subfields = $field->subfield( 'a' );
+
+If no matching subfields are found, C<undef> is returned in a scalar context
+and an empty list in a list context.
+
+If the tag is less than an 010, C<undef> is returned and
+C<$MARC::Field::ERROR> is set.
+
+=cut
+
+sub subfield {
+    my $self = shift;
+    my $code_wanted = shift;
+
+    croak( "Fields below 010 do not have subfields, use data()" )
+        if $self->is_control_field;
+
+    my @data = @{$self->{_subfields}};
+    my @found;
+    while ( defined( my $code = shift @data ) ) {
+        if ( $code eq $code_wanted ) {
+            push( @found, shift @data );
+        } else {
+            shift @data;
+        }
+    }
+    if ( wantarray() ) { return @found; }
+    return( $found[0] );
+}
+
+=head2 subfields()
+
+Returns all the subfields in the field.  What's returned is a list of
+lists, where the inner list is a subfield code and the subfield data.
+
+For example, this might be the subfields from a 245 field:
+
+        [
+          [ 'a', 'Perl in a nutshell :' ],
+          [ 'b', 'A desktop quick reference.' ],
+        ]
+
+=cut
+
+sub subfields {
+    my $self = shift;
+
+    $self->_warn( "Fields below 010 do not have subfields" )
+        if $self->is_control_field;
+
+    my @list;
+    my @data = @{$self->{_subfields}};
+    while ( defined( my $code = shift @data ) ) {
+        push( @list, [$code, shift @data] );
+    }
+    return @list;
+}
+
+=head2 data()
+
+Returns the data part of the field, if the tag number is less than 10.
+
+=cut
+
+sub data($) {
+    my $self = shift;
+
+    croak( "data() is only for tags less than 010, use subfield()" )
+        unless $self->is_control_field;
+
+    $self->{_data} = $_[0] if @_;
+
+    return $self->{_data};
+}
+
+=head2 add_subfields(code,text[,code,text ...])
+
+Adds subfields to the end of the subfield list.
+
+    $field->add_subfields( 'c' => '1985' );
+
+Returns the number of subfields added, or C<undef> if there was an error.
+
+=cut
+
+sub add_subfields(@) {
+    my $self = shift;
+
+    croak( "Subfields are only for tags >= 10" )
+        if $self->is_control_field;
+
+    push( @{$self->{_subfields}}, @_ );
+    return @_/2;
+}
+
+
+
+=head2 update()
+
+Allows you to change the values of the field. You can update indicators
+and subfields like this:
+
+  $field->update( ind2 => '4', a => 'The ballad of Abe Lincoln');
+
+If you attempt to update a subfield which does not currently exist in the field,
+then a new subfield will be appended to the field. If you don't like this
+auto-vivification you must check for the existence of the subfield prior to
+update.
+
+  if ( $field->subfield( 'a' ) ) {
+    $field->update( 'a' => 'Cryptonomicon' );
+  }
+
+If you want to update a field that has no indicators or subfields (000-009)
+just call update() with one argument, the string that you would like to
+set the field to.
+
+  $field = $record->field( '003' );
+  $field->update('IMchF');
+
+Note: when doing subfield updates be aware that C<update()> will only
+update the first occurrence. If you need to do anything more complicated
+you will probably need to create a new field and use C<replace_with()>.
+
+Returns the number of items modified.
+
+=cut
+
+sub update {
+    my $self = shift;
+
+    ## tags 000 - 009 don't have indicators or subfields
+    if ( $self->is_control_field ) {
+	$self->{_data} = shift;
+	return(1);
+    }
+
+    ## otherwise we need to update subfields and indicators
+    my @data = @{$self->{_subfields}};
+    my $changes = 0;
+
+    while ( @_ ) {
+
+	my $arg = shift;
+	my $val = shift;
+
+	## indicator update
+	if ($arg =~ /^ind[12]$/) {
+	    $self->{"_$arg"} = $val;
+	    $changes++;
+	}
+
+	## subfield update
+	else {
+	    my $found = 0;
+	    ## update existing subfield
+	    for ( my $i=0; $i<@data; $i+=2 ) {
+		if ($data[$i] eq $arg) {
+		    $data[$i+1] = $val;
+		    $found = 1;
+		    $changes++;
+		    last;
+		}
+	    } # for
+
+	    ## append new subfield
+	    if ( !$found ) {
+		push( @data, $arg, $val );
+		$changes++;
+	    }
+	}
+
+    } # while
+
+    ## synchronize our subfields
+    $self->{_subfields} = \@data;
+    return($changes);
+
+}
+
+=head2 replace_with()
+
+Allows you to replace an existing field with a new one. You need to pass
+C<replace()> a MARC::Field object to replace the existing field with. For
+example:
+
+  $field = $record->field('245');
+  my $new_field = new MARC::Field('245','0','4','The ballad of Abe Lincoln.');
+  $field->replace_with($new_field);
+
+Doesn't return a meaningful or reliable value.
+
+=cut
+
+sub replace_with {
+
+  my ($self,$new) = @_;
+  ref($new) =~ /^MARC::Field$/
+    or croak("Must pass a MARC::Field object");
+
+  %$self = %$new;
+
+}
+
+
+=head2 as_string( [$subfields] )
+
+Returns a string of all subfields run together.  A space is added to
+the result between each subfield.  The tag number and subfield
+character are not included.
+
+Subfields appear in the output string in the order in which they
+occur in the field.
+
+If C<$subfields> is specified, then only those subfields will be included.
+
+  my $field = MARC::Field->new(
+                245, '1', '0',
+                        'a' => 'Abraham Lincoln',
+                        'h' => '[videorecording] :',
+                        'b' => 'preserving the union /',
+                        'c' => 'A&E Home Video.'
+                );
+  print $field->as_string( 'abh' ); # Only those three subfields
+  # prints 'Abraham Lincoln [videorecording] : preserving the union /'.
+
+Note that subfield h comes before subfield b in the output.
+
+=cut
+
+sub as_string() {
+    my $self = shift;
+    my $subfields = shift;
+
+    if ( $self->is_control_field ) {
+        return $self->{_data};
+    }
+
+    my @subs;
+
+    my $subs = $self->{_subfields};
+    my $nfields = @$subs / 2;
+    for my $i ( 1..$nfields ) {
+	my $offset = ($i-1)*2;
+        my $code = $subs->[$offset];
+        my $text = $subs->[$offset+1];
+        push( @subs, $text ) if !$subfields || $code =~ /^[$subfields]$/;
+    } # for
+
+    return join( " ", @subs );
+}
+
+
+=head2 as_formatted()
+
+Returns a pretty string for printing in a MARC dump.
+
+=cut
+
+sub as_formatted() {
+    my $self = shift;
+
+    my @lines;
+
+    if ( $self->is_control_field ) {
+        push( @lines, sprintf( "%03s     %s", $self->{_tag}, $self->{_data} ) );
+    } else {
+        my $hanger = sprintf( "%03s %1.1s%1.1s", $self->{_tag}, $self->{_ind1}, $self->{_ind2} );
+
+	my $subs = $self->{_subfields};
+	my $nfields = @$subs / 2;
+	my $offset = 0;
+	for my $i ( 1..$nfields ) {
+            push( @lines, sprintf( "%-6.6s _%1.1s%s", $hanger, $subs->[$offset++], $subs->[$offset++] ) );
+            $hanger = "";
+        } # for
+    }
+
+    return join( "\n", @lines );
+}
+
+
+=head2 as_usmarc()
+
+Returns a string for putting into a USMARC file.  It's really only
+useful by C<MARC::Record::as_usmarc()>.
+
+=cut
+
+sub as_usmarc() {
+    my $self = shift;
+
+    # Tags < 010 are pretty easy
+    if ( $self->is_control_field ) {
+        return $self->data . END_OF_FIELD;
+    } else {
+        my @subs;
+        my @subdata = @{$self->{_subfields}};
+        while ( @subdata ) {
+            push( @subs, join( "", SUBFIELD_INDICATOR, shift @subdata, shift @subdata ) );
+        } # while
+
+        return
+	    join( "",
+		$self->indicator(1),
+                $self->indicator(2),
+                @subs,
+                END_OF_FIELD,
+                );
+    }
+}
+
+=head2 clone()
+
+Makes a copy of the field.  Note that this is not just the same as saying
+
+    my $newfield = $field;
+
+since that just makes a copy of the reference.  To get a new object, you must
+
+    my $newfield = $field->clone;
+
+Returns a MARC::Field record.
+
+=cut
+
+sub clone {
+    my $self = shift;
+
+    my $tagno = $self->{_tag};
+    my $is_control = (($tagno =~ /^\d+$/) && ($tagno < 10));
+
+    my $clone =
+        bless {
+            _tag => $tagno,
+            _warnings => [],
+            _is_control_field => $is_control,
+        }, ref($self);
+
+    if ( $is_control ) {
+        $clone->{_data} = $self->{_data};
+    } else {
+        $clone->{_ind1} = $self->{_ind1};
+        $clone->{_ind2} = $self->{_ind2};
+        $clone->{_subfields} = [@{$self->{_subfields}}];
+    }
+
+    return $clone;
+}
+
+=head2 warnings()
+
+Returns the warnings that were created when the record was read.
+These are things like "Invalid indicators converted to blanks".
+
+The warnings are items that you might be interested in, or might
+not.  It depends on how stringently you're checking data.  If
+you're doing some grunt data analysis, you probably don't care.
+
+=cut
+
+sub warnings() {
+    my $self = shift;
+
+    return @{$self->{_warnings}};
+}
+
+# NOTE: _warn is an object method
+sub _warn($) {
+    my $self = shift;
+
+    push( @{$self->{_warnings}}, join( "", @_ ) );
+}
+
+sub _gripe(@) {
+    $ERROR = join( "", @_ );
+
+    warn $ERROR;
+
+    return;
+}
+
+
+1;
+
+__END__
+
+=head1 SEE ALSO
+
+See the "SEE ALSO" section for L<MARC::Record>.
+
+=head1 TODO
+
+See the "TODO" section for L<MARC::Record>.
+
+=cut
+
+=head1 LICENSE
+
+This code may be distributed under the same terms as Perl itself.
+
+Please note that these modules are not products of or supported by the
+employers of the various contributors to the code.
+
+=head1 AUTHOR
+
+Andy Lester, C<< <andy at petdance.com> >>
+
+=cut


Property changes on: packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Field.pm
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File/MicroLIF.pm
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File/MicroLIF.pm	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File/MicroLIF.pm	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,303 @@
+package MARC::File::MicroLIF;
+
+=head1 NAME
+
+MARC::File::MicroLIF - MicroLIF-specific file handling
+
+=cut
+
+use strict;
+use integer;
+use vars qw( $ERROR );
+
+use MARC::File;
+use vars qw( @ISA ); @ISA = qw( MARC::File );
+
+use MARC::Record qw( LEADER_LEN );
+
+=head1 SYNOPSIS
+
+    use MARC::File::MicroLIF;
+
+    my $file = MARC::File::MicroLIF->in( $filename );
+
+    while ( my $marc = $file->next() ) {
+        # Do something
+    }
+    $file->close();
+    undef $file;
+
+=head1 EXPORT
+
+None.
+
+=cut
+
+
+=for internal
+
+The buffer must be large enough to handle any valid record because
+we don't check for cases like a CR/LF pair or an end-of-record/CR/LF
+trio being only partially in the buffer.
+
+The max valid record is the max MARC record size (99999) plus one
+or two characters per tag (CR, LF, or CR/LF).  It's hard to say
+what the max number of tags is, so here we use 6000.  (6000 tags
+can be squeezed into a MARC record only if every tag has only one
+subfield containing a maximum of one character, or if data from
+multiple tags overlaps in the MARC record body.  We're pretty safe.)
+
+=cut
+
+use constant BUFFER_MIN => (99999 + 6000 * 2);
+
+=head1 METHODS
+
+=head2 in()
+
+Opens a MicroLIF file for reading.
+
+=cut
+
+sub in {
+    my $class = shift;
+    my $self = $class->SUPER::in( @_ );
+
+    if ( $self ) {
+        bless $self, $class;
+
+        $self->{exhaustedfh} = 0;
+        $self->{inputbuf} = '';
+        $self->{header} = undef;
+
+        # get the MicroLIF header, but handle the case in
+        # which it's missing.
+        my $header = $self->_get_chunk( 1 );
+        if ( defined $header ) {
+            if ( $header =~ /^LDR/ ) {
+                # header missing, put this back
+                $self->_unget_chunk( $header . "\n" );
+
+                # XXX should we warn of a missing header?
+            }
+            else {
+                $self->{header} = $header;
+            }
+        }
+        else {
+            # can't read from the file
+            undef $self;
+        }
+    }
+
+    return $self;
+} # new
+
+
+# fill the buffer if we need to
+sub _fill_buffer {
+    my $self = shift;
+    my $ok = 1;
+
+    if ( !$self->{exhaustedfh} && length( $self->{inputbuf} ) < BUFFER_MIN ) {
+        # append the next chunk of bytes to the buffer
+        my $read = read $self->{fh}, $self->{inputbuf}, BUFFER_MIN, length($self->{inputbuf});
+        if ( !defined $read ) {
+            # error!
+            $ok = undef;
+            $MARC::File::ERROR = "error reading from file " . $self->{filename};
+        }
+        elsif ( $read < 1 ) {
+            $self->{exhaustedfh} = 1;
+        }
+    }
+
+    return $ok;
+}
+
+
+=for internal
+
+Gets the next chunk of data.  If C<$want_line> is true then you get
+the next chunk ending with any combination of \r and \n of any length.
+If it is false or not passed then you get the next chunk ending with
+\x60 followed by any combination of \r and \n of any length.
+
+All trailing \r and \n are stripped.
+
+=cut
+
+sub _get_chunk {
+    my $self = shift;
+    my $want_line = shift || 0;
+
+    my $chunk = undef;
+
+    if ( $self->_fill_buffer() && length($self->{inputbuf}) > 0 ) {
+
+        # the buffer always has at least one full line in it, so we're
+        # guaranteed that if there are no line endings then we're
+        # on the last line.
+
+        if ( $want_line ) {
+            if ( $self->{inputbuf} =~ /^([^\x0d\x0a]*)([\x0d\x0a]+)/ ) {
+                $chunk = $1;
+                $self->{inputbuf} = substr( $self->{inputbuf}, length($1)+length($2) );
+            }
+        }
+        else {
+            # couldn't figure out how to make this work as a regex
+            my $pos = -1;
+            while ( !$chunk ) {
+                $pos = index( $self->{inputbuf}, '`', $pos+1 );
+                last if $pos < 0;
+                if ( substr($self->{inputbuf}, $pos+1, 1) eq "\x0d" or substr($self->{inputbuf}, $pos+1, 1) eq "\x0a" ) {
+                    $chunk = substr( $self->{inputbuf}, 0, $pos+1 ); # include the '`' but not the newlines
+                    while ( substr($self->{inputbuf}, $pos+1, 1) eq "\x0d" or substr($self->{inputbuf}, $pos+1, 1) eq "\x0a" ) {
+                        ++$pos;
+                    }
+                    # $pos now pointing at last newline char
+                    $self->{inputbuf} = substr( $self->{inputbuf}, $pos+1 );
+                }
+            }
+        }
+
+        if ( !$chunk ) {
+            $chunk = $self->{inputbuf};
+            $self->{inputbuf} = '';
+            $self->{exhaustedfh} = 1;
+        }
+    }
+
+    return $chunk;
+}
+
+
+# $chunk is put at the beginning of the buffer exactly as
+# passed in.  No line endings are added.
+sub _unget_chunk {
+    my $self = shift;
+    my $chunk = shift;
+    $self->{inputbuf} = $chunk . $self->{inputbuf};
+    return;
+}
+
+
+sub _next {
+    my $self = shift;
+
+    my $lifrec = $self->_get_chunk();
+
+    # for ease, make the newlines match this platform
+    $lifrec =~ s/[\x0a\x0d]+/\n/g if defined $lifrec;
+
+    return $lifrec;
+}
+
+
+=head2 header()
+
+If the MicroLIF file has a file header then the header is returned.
+If the file has no header or the file has not yet been opened then
+C<undef> is returned.
+
+=cut
+
+sub header {
+    my $self = shift;
+    return $self->{header};
+}
+
+=head2 decode()
+
+Decodes a MicroLIF record and returns a USMARC record.
+
+Can be called in one of three different ways:
+
+    $object->decode( $lif )
+    MARC::File::MicroLIF->decode( $lif )
+    MARC::File::MicroLIF::decode( $lif )
+
+=cut
+
+sub decode {
+    my $self = shift;
+    my $location = '';
+    my $text = '';
+
+    ## decode can be called in a variety of ways
+    ## this bit of code covers all three
+
+    if ( ref($self) =~ /^MARC::File/ ) {
+        $location = 'in record '.$self->{recnum};
+        $text = shift;
+    } else {
+        $location = 'in record 1';
+        $text = $self=~/MARC::File/ ? shift : $self;
+    }
+
+    my $marc = MARC::Record->new();
+
+    my @lines = split( /\n/, $text );
+    for my $line ( @lines ) {
+
+        ($line =~ s/^([0-9A-Za-z]{3})//) or
+            $marc->_warn( "Invalid tag number: ".substr( $line, 0, 3 )." $location" );
+        my $tagno = $1;
+
+        ($line =~ s/\^`?$//)
+            or $marc->_warn( "Tag $tagno $location is missing a trailing caret." );
+
+        if ( $tagno eq "LDR" ) {
+            $marc->leader( substr( $line, 0, LEADER_LEN ) );
+        } elsif ( $tagno =~ /^\d+$/ and $tagno < 10 ) {
+            $marc->add_fields( $tagno, $line );
+        } else {
+            $line =~ s/^(.)(.)//;
+            my ($ind1,$ind2) = ($1,$2);
+            my @subfields;
+            my @subfield_data_pairs = split( /_(?=[a-z0-9])/, $line );
+            if ( scalar @subfield_data_pairs < 2 ) {
+                $marc->_warn( "Tag $tagno $location has no subfields--discarded." );
+            }
+            else {
+                shift @subfield_data_pairs; # Leading _ makes an empty pair
+                for my $pair ( @subfield_data_pairs ) {
+                    my ($subfield,$data) = (substr( $pair, 0, 1 ), substr( $pair, 1 ));
+                    push( @subfields, $subfield, $data );
+                }
+                $marc->add_fields( $tagno, $ind1, $ind2, @subfields );
+            }
+        }
+    } # for
+
+    return $marc;
+}
+
+1;
+
+__END__
+
+=head1 TODO
+
+=over 4
+
+=back
+
+=head1 RELATED MODULES
+
+L<MARC::File>
+
+=head1 LICENSE
+
+This code may be distributed under the same terms as Perl itself.
+
+Please note that these modules are not products of or supported by the
+employers of the various contributors to the code.
+
+=head1 AUTHOR
+
+Andy Lester, C<< <andy at petdance.com> >>
+
+=cut
+

Added: packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File/USMARC.pm
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File/USMARC.pm	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File/USMARC.pm	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,356 @@
+package MARC::File::USMARC;
+
+=head1 NAME
+
+MARC::File::USMARC - USMARC-specific file handling
+
+=cut
+
+use strict;
+use integer;
+
+use vars qw( $ERROR );
+
+use MARC::File;
+use vars qw( @ISA ); @ISA = qw( MARC::File );
+
+use MARC::Record qw( LEADER_LEN );
+use constant SUBFIELD_INDICATOR     => "\x1F";
+use constant END_OF_FIELD           => "\x1E";
+use constant END_OF_RECORD          => "\x1D";
+use constant DIRECTORY_ENTRY_LEN    => 12;
+
+=head1 SYNOPSIS
+
+    use MARC::File::USMARC;
+
+    my $file = MARC::File::USMARC->in( $filename );
+
+    while ( my $marc = $file->next() ) {
+        # Do something
+    }
+    $file->close();
+    undef $file;
+
+=head1 EXPORT
+
+None.
+
+=head1 METHODS
+
+=cut
+
+sub _next {
+    my $self = shift;
+    my $fh = $self->{fh};
+
+    my $reclen;
+    return if eof($fh);
+
+    local $/ = END_OF_RECORD;
+    my $usmarc = <$fh>;
+
+    # remove illegal garbage that sometimes occurs between records
+    $usmarc =~ s/^[ \x00\x0a\x0d]+//;
+
+    return unless $usmarc;
+
+    if ( length($usmarc) < 5 ) {
+        $self->_warn( "Couldn't find record length" );
+    }
+
+    $reclen = substr($usmarc,0,5);
+
+    if ( $reclen !~ /^\d{5}$/ or $reclen != length($usmarc) ) {
+        $self->_warn( "Invalid record length \"$reclen\"" );
+    }
+
+    return $usmarc;
+}
+
+=head2 decode( $string [, \&filter_func ] )
+
+Constructor for handling data from a USMARC file.  This function takes care of
+all the tag directory parsing & mangling.
+
+Any warnings or coercions can be checked in the C<warnings()> function.
+
+The C<$filter_func> is an optional reference to a user-supplied function
+that determines on a tag-by-tag basis if you want the tag passed to it
+to be put into the MARC record.  The function is passed the tag number
+and the raw tag data, and must return a boolean.  The return of a true
+value tells MARC::File::USMARC::decode that the tag should get put into
+the resulting MARC record.
+
+For example, if you only want title and subject tags in your MARC record,
+try this:
+
+    sub filter {
+        my ($tagno,$tagdata) = @_;
+
+        return ($tagno == 245) || ($tagno >= 600 && $tagno <= 699);
+    }
+
+    my $marc = MARC::File::USMARC->decode( $string, \&filter );
+
+Why would you want to do such a thing?  The big reason is that creating
+fields is processor-intensive, and if your program is doing read-only
+data analysis and needs to be as fast as possible, you can save time by
+not creating fields that you'll be ignoring anyway.
+
+Another possible use is if you're only interested in printing certain
+tags from the record, then you can filter them when you read from disc
+and not have to delete unwanted tags yourself.
+
+=cut
+
+sub decode {
+
+    my $text;
+    my $location = '';
+
+    ## decode can be called in a variety of ways
+    ## $object->decode( $string )
+    ## MARC::File::USMARC->decode( $string )
+    ## MARC::File::USMARC::decode( $string )
+    ## this bit of code covers all three
+
+    my $self = shift;
+    if ( ref($self) =~ /^MARC::File/ ) {
+        $location = 'in record '.$self->{recnum};
+        $text = shift;
+    } else {
+        $location = 'in record 1';
+        $text = $self=~/MARC::File/ ? shift : $self;
+    }
+
+    my $filter_func = shift;
+
+    my $marc = MARC::Record->new();
+
+    # Check for an all-numeric record length
+    ($text =~ /^(\d{5})/)
+        or return $marc->_warn( "Record length \"", substr( $text, 0, 5 ), "\" is not numeric $location" );
+
+    my $reclen = $1;
+    ($reclen == length($text))
+        or $marc->_warn( "Invalid record length $location: Leader says $reclen bytes, but it's actually ", length( $text ) );
+
+    (substr($text, -1, 1) eq END_OF_RECORD)
+        or $marc->_warn( "Invalid record terminator $location" );
+
+    $marc->leader( substr( $text, 0, LEADER_LEN ) );
+
+    # bytes 12 - 16 of leader give offset to the body of the record
+    my $data_start = 0 + substr( $text, 12, 5 );
+
+
+    # immediately after the leader comes the directory (no separator)
+    my $dir = substr( $text, LEADER_LEN, $data_start - LEADER_LEN - 1 );  # -1 to allow for \x1e at end of directory
+
+    # character after the directory must be \x1e
+    (substr($text, $data_start-1, 1) eq END_OF_FIELD)
+        or $marc->_warn( "No directory found $location" );
+
+    # all directory entries 12 bytes long, so length % 12 must be 0
+    (length($dir) % DIRECTORY_ENTRY_LEN == 0)
+        or $marc->_warn( "Invalid directory length $location" );
+
+
+    # go through all the fields
+    my $nfields = length($dir)/DIRECTORY_ENTRY_LEN;
+    for ( my $n = 0; $n < $nfields; $n++ ) {
+        my ( $tagno, $len, $offset ) = unpack( "A3 A4 A5", substr($dir, $n*DIRECTORY_ENTRY_LEN, DIRECTORY_ENTRY_LEN) );
+
+        # Check directory validity
+        ($tagno =~ /^[0-9A-Za-z]{3}$/)
+            or $marc->_warn( "Invalid tag in directory $location: \"$tagno\"" );
+
+        ($len =~ /^\d{4}$/)
+            or $marc->_warn( "Invalid length in directory $location tag $tagno: \"$len\"" );
+
+        ($offset =~ /^\d{5}$/)
+            or $marc->_warn( "Invalid offset in directory $location tag $tagno: \"$offset\"" );
+
+        ($offset + $len <= $reclen)
+            or $marc->_warn( "Directory entry $location runs off the end of the record tag $tagno" );
+
+        my $tagdata = substr( $text, $data_start + $offset, $len );
+
+        ($len == length($tagdata))
+            or $marc->_warn( "Invalid length in directory for tag $tagno $location" );
+
+        if ( substr($tagdata, -1, 1) eq END_OF_FIELD ) {
+            # get rid of the end-of-tag character
+            chop $tagdata;
+            --$len;
+        } else {
+            $marc->_warn( "field does not end in end of field character in tag $tagno $location" );
+        }
+
+        warn "Specs: ", join( "|", $tagno, $len, $offset, $tagdata ), "\n" if $MARC::Record::DEBUG;
+
+
+        if ( $filter_func ) {
+            next unless $filter_func->( $tagno, $tagdata );
+        }
+
+
+        if ( ($tagno =~ /^\d+$/) && ($tagno < 10) ) {
+            $marc->append_fields( MARC::Field->new( $tagno, $tagdata ) );
+        } else {
+            my @subfields = split( SUBFIELD_INDICATOR, $tagdata );
+            my $indicators = shift @subfields;
+            my ($ind1, $ind2);
+
+            if ( length( $indicators ) > 2 or length( $indicators ) == 0 ) {
+                $marc->_warn( "Invalid indicators \"$indicators\" forced to blanks $location for tag $tagno\n" );
+                ($ind1,$ind2) = (" ", " ");
+            } else {
+                $ind1 = substr( $indicators,0, 1 );
+                $ind2 = substr( $indicators,1, 1 );
+            }
+
+            # Split the subfield data into subfield name and data pairs
+            my @subfield_data;
+            for ( @subfields ) {
+                if ( length > 0 ) {
+                    push( @subfield_data, substr($_,0,1),substr($_,1) );
+                } else {
+                    $marc->_warn( "Entirely empty subfield found in tag $tagno" );
+                }
+            }
+
+            if ( !@subfield_data ) {
+                $marc->_warn( "no subfield data found $location for tag $tagno" );
+                next;
+            }
+
+            my $field = MARC::Field->new($tagno, $ind1, $ind2, @subfield_data );
+            if ( $field->warnings() ) {
+                $marc->_warn( $field->warnings() );
+            }
+            $marc->append_fields( $field );
+        }
+    } # looping through all the fields
+
+
+    return $marc;
+}
+
+=head2 update_leader()
+
+If any changes get made to the MARC record, the first 5 bytes of the
+leader (the length) will be invalid.  This function updates the
+leader with the correct length of the record as it would be if
+written out to a file.
+
+=cut
+
+sub update_leader() {
+        my $self = shift;
+
+        my (undef,undef,$reclen,$baseaddress) = $self->_build_tag_directory();
+
+        $self->_set_leader_lengths( $reclen, $baseaddress );
+}
+
+=head2 _build_tag_directory()
+
+Function for internal use only: Builds the tag directory that gets
+put in front of the data in a MARC record.
+
+Returns two array references, and two lengths: The tag directory, and the data fields themselves,
+the length of all data (including the Leader that we expect will be added),
+and the size of the Leader and tag directory.
+
+=cut
+
+sub _build_tag_directory {
+        my $marc = shift;
+        $marc = shift if (ref($marc)||$marc) =~ /^MARC::File/;
+        die "Wanted a MARC::Record but got a ", ref($marc) unless ref($marc) eq "MARC::Record";
+
+        my @fields;
+        my @directory;
+
+        my $dataend = 0;
+        for my $field ( $marc->fields() ) {
+                # Dump data into proper format
+                my $str = $field->as_usmarc;
+                push( @fields, $str );
+
+                # Create directory entry
+                my $len = length $str;
+                my $direntry = sprintf( "%03s%04d%05d", $field->tag, $len, $dataend );
+                push( @directory, $direntry );
+                $dataend += $len;
+        }
+
+        my $baseaddress =
+                LEADER_LEN +    # better be 24
+                ( @directory * DIRECTORY_ENTRY_LEN ) +
+                                # all the directory entries
+                1;              # end-of-field marker
+
+
+        my $total =
+                $baseaddress +  # stuff before first field
+                $dataend +      # Length of the fields
+                1;              # End-of-record marker
+
+
+
+        return (\@fields, \@directory, $total, $baseaddress);
+}
+
+=head2 encode()
+
+Returns a string of characters suitable for writing out to a USMARC file,
+including the leader, directory and all the fields.
+
+=cut
+
+sub encode() {
+    my $marc = shift;
+    $marc = shift if (ref($marc)||$marc) =~ /^MARC::File/;
+
+    my ($fields,$directory,$reclen,$baseaddress) = _build_tag_directory($marc);
+    $marc->set_leader_lengths( $reclen, $baseaddress );
+
+    # Glomp it all together
+    return join("",$marc->leader, @$directory, END_OF_FIELD, @$fields, END_OF_RECORD);
+}
+
+1;
+
+__END__
+
+=head1 RELATED MODULES
+
+L<MARC::Record>
+
+=head1 TODO
+
+Make some sort of autodispatch so that you don't have to explicitly
+specify the MARC::File::X subclass, sort of like how DBI knows to
+use DBD::Oracle or DBD::Mysql.
+
+Create a toggle-able option to check inside the field data for
+end of field characters.  Presumably it would be good to have
+it turned on all the time, but it's nice to be able to opt out
+if you don't want to take the performance hit.
+
+=head1 LICENSE
+
+This code may be distributed under the same terms as Perl itself.
+
+Please note that these modules are not products of or supported by the
+employers of the various contributors to the code.
+
+=head1 AUTHOR
+
+Andy Lester, C<< <andy at petdance.com> >>
+
+=cut
+

Added: packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File.pm
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File.pm	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File.pm	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,237 @@
+package MARC::File;
+
+=head1 NAME
+
+MARC::File - Base class for files of MARC records
+
+=cut
+
+use strict;
+use integer;
+
+use vars qw( $ERROR );
+
+=head1 SYNOPSIS
+
+    use MARC::File::USMARC;
+
+    my $file = MARC::File::USMARC->in( $filename );
+
+    while ( my $marc = $file->next() ) {
+        # Do something
+    }
+    $file->close();
+    undef $file;
+
+=head1 EXPORT
+
+None.
+
+=head1 METHODS
+
+=head2 in()
+
+Opens a file for import. Ordinarily you will use C<MARC::File::USMARC>
+or C<MARC::File::MicroLIF> to do this.
+
+    my $file = MARC::File::USMARC->in( 'file.marc' );
+
+Returns a C<MARC::File> object, or C<undef> on failure. If you
+encountered an error the error message will be stored in
+C<$MARC::File::ERROR>.
+
+Optionally you can also pass in a filehandle, and C<MARC::File>.
+will "do the right thing".
+
+    my $handle = IO::File->new( 'gunzip -c file.marc.gz |' );
+    my $file = MARC::File::USMARC->in( $handle );
+
+=cut
+
+sub in {
+    my $class = shift;
+    my $arg = shift;
+    my ( $filename, $fh );
+
+    ## if a valid filehandle was passed in
+    my $ishandle = do { no strict; defined fileno($arg); };
+    if ( $ishandle ) {
+        $filename = scalar( $arg );
+        $fh = $arg;
+    }
+
+    ## otherwise check if it's a filename, and
+    ## return undef if we weren't able to open it
+    else {
+        $filename = $arg;
+        $fh = eval { local *FH; open( FH, $arg ) or die; *FH{IO}; };
+        if ( $@ ) {
+            $MARC::File::ERROR = "Couldn't open $filename: $@";
+            return;
+        }
+    }
+
+    binmode( $fh );
+    my $self = {
+        filename    => $filename,
+        fh          => $fh,
+        recnum      => 0,
+        warnings    => [],
+    };
+
+    return( bless $self, $class );
+
+} # new()
+
+sub out {
+    die "Not yet written";
+}
+
+=head2 next( [\&filter_func] )
+
+Reads the next record from the file handle passed in.
+
+The C<$filter_func> is a reference to a filtering function.  Currently,
+only USMARC records support this.  See L<MARC::File::USMARC>'s C<decode()>
+function for details.
+
+Returns a MARC::Record reference, or C<undef> on error.
+
+=cut
+
+sub next {
+    my $self = shift;
+    $self->{recnum}++;
+    my $rec = $self->_next() or return;
+    return $self->decode($rec, @_);
+}
+
+=head2 skip()
+
+Skips over the next record in the file.  Same as C<next()>,
+without the overhead of parsing a record you're going to throw away
+anyway.
+
+Returns 1 or undef.
+
+=cut
+
+sub skip {
+    my $self = shift;
+    my $rec = $self->_next() or return;
+    return 1;
+}
+
+=head2 warnings()
+
+Simlilar to the methods in L<MARC::Record> and L<MARC::Batch>,
+C<warnings()> will return any warnings that have accumulated while
+processing this file; and as a side-effect will clear the warnings buffer.
+
+=cut
+
+sub warnings {
+    my $self = shift;
+    my @warnings = @{ $self->{warnings} };
+    $self->{warnings} = [];
+    return(@warnings);
+}
+
+=head2 close()
+
+Closes the file, both from the object's point of view, and the actual file.
+
+=cut
+
+sub close {
+    my $self = shift;
+    close( $self->{fh} );
+    delete $self->{fh};
+    delete $self->{filename};
+    return;
+}
+
+sub _unimplemented() {
+    my $self = shift;
+    my $method = shift;
+    warn "Method $method must be overridden";
+}
+
+=head2 write()
+
+Writes a record to the output file.  This method must be overridden
+in your subclass.
+
+=head2 decode()
+
+Decodes a record into a USMARC format.  This method must be overridden
+in your subclass.
+
+=cut
+
+sub write   { $_[0]->_unimplemented("write"); }
+sub decode  { $_[0]->_unimplemented("decode"); }
+
+# NOTE: _warn must be called as an object method
+
+sub _warn {
+    my ($self,$warning) = @_;
+    push( @{ $self->{warnings} }, "$warning in record ".$self->{recnum} );
+    return( $self );
+}
+
+# NOTE: _gripe can be called as an object method, or not.  Your choice.
+# NOTE: it's use is now depracated use _warn instead
+sub _gripe(@) {
+    my @parms = @_;
+    if ( @parms ) {
+        my $self = shift @parms;
+
+        if ( ref($self) =~ /^MARC::File/ ) {
+            push( @parms, " at byte ", tell($self->{fh}) )
+                if $self->{fh};
+            push( @parms, " in file ", $self->{filename} ) if $self->{filename};
+        } else {
+            unshift( @parms, $self );
+        }
+
+        $ERROR = join( "", @parms );
+        warn $ERROR;
+    }
+
+    return;
+}
+
+1;
+
+__END__
+
+=head1 RELATED MODULES
+
+L<MARC::Record>
+
+=head1 TODO
+
+=over 4
+
+=item * C<out()> method
+
+We only handle files for input right now.
+
+=back
+
+=cut
+
+=head1 LICENSE
+
+This code may be distributed under the same terms as Perl itself.
+
+Please note that these modules are not products of or supported by the
+employers of the various contributors to the code.
+
+=head1 AUTHOR
+
+Andy Lester, C<< <andy at petdance.com> >>
+
+=cut
+

Added: packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Lint.pm
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Lint.pm	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Lint.pm	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,2829 @@
+package MARC::Lint;
+
+use strict;
+use integer;
+
+use MARC::Record;
+use MARC::Field;
+
+=head1 NAME
+
+MARC::Lint - Perl extension for checking validity of MARC records
+
+=head1 SYNOPSIS
+
+    use MARC::File::USMARC;
+    use MARC::Lint;
+
+    my $lint = new MARC::Lint;
+    my $filename = shift;
+
+    my $file = MARC::File::USMARC->in( $filename );
+    while ( my $marc = $file->next() ) {
+        $lint->check_record( $marc );
+
+        # Print the title tag
+        print $marc->title, "\n";
+
+        # Print the errors that were found
+        print join( "\n", $lint->warnings ), "\n";
+    } # while
+
+Given the following MARC record:
+
+        LDR 00000nam  22002538a 4500
+        100 14 _aWall, Larry.
+        110 1  _aO'Reilly & Associates.
+        245 90 _aProgramming Perl /
+               _aBig Book of Perl /
+               _cLarry Wall, Tom Christiansen & Jon Orwant.
+        250    _a3rd ed.
+        250    _a3rd ed.
+        260    _aCambridge, Mass. :
+               _bO'Reilly,
+               _r2000.
+        590 4  _aPersonally signed by Larry.
+        856 43 _uhttp://www.perl.com/
+
+the following errors are generated:
+
+        1XX: Only one 1XX tag is allowed, but I found 2 of them.
+        100: Indicator 2 must be blank
+        245: Indicator 1 must be 0 or 1
+        245: Subfield _a is not repeatable.
+        250: Field is not repeatable.
+        260: Subfield _r is not valid.
+        856: Indicator 2 must be blank, 0, 1, 2 or 8
+
+=head1 DESCRIPTION
+
+Module for checking validity of MARC records.  99% of the users will want to do
+something like is shown in the synopsis.  The other intrepid 1% will overload the
+C<MARC::Lint> module's methods and provide their own special field-level checking.
+
+What this means is that if you have certain requirements, such as making sure that
+all 952 tags have a certain call number in them, you can write a function that
+checks for that, and still get all the benefits of the MARC::Lint framework.
+
+=head1 EXPORT
+
+None.  Everything is done through objects.
+
+=head1 METHODS
+
+=head2 new()
+
+No parms needed.  The C<MARC::Lint> object is little more than a list of warnings
+and a bunch of rules.
+
+=cut
+
+sub new {
+        my $class = shift;
+        $class = ref($class) || $class;
+
+        my $self = {
+                _warnings => [],
+        };
+        bless $self, $class;
+
+        $self->_read_rules();
+
+        return $self;
+}
+
+=head2 warnings()
+
+Returns a list of warnings found by C<check_record()> and its brethren.
+
+=cut
+
+sub warnings {
+        my $self = shift;
+
+        return wantarray ? @{$self->{_warnings}} : scalar @{$self->{_warnings}};
+}
+
+=head2 clear_warnings()
+
+Clear the list of warnings for this linter object.  It's automatically called
+when you call C<check_record()>.
+
+=cut
+
+sub clear_warnings {
+        my $self = shift;
+
+        $self->{_warnings} = [];
+}
+
+=head2 warn( $str [, $str...] )
+
+Create a warning message, built from strings passed, like a C<print> statement.
+
+Typically, you'll leave this to C<check_record()>, but industrious programmers
+may want to do their own checking as well.
+
+=cut
+
+sub warn {
+        my $self = shift;
+
+        push( @{$self->{_warnings}}, join( "", @_ ) );
+
+        return;
+}
+
+=head2 check_record( $marc )
+
+Does all sorts of lint-like checks on the MARC record I<$marc>, both on the record as a whole,
+and on the individual fields & subfields.
+
+=cut
+
+sub check_record {
+        my $self = shift;
+        my $marc = shift;
+
+        $self->clear_warnings();
+
+        (ref($marc) eq "MARC::Record")
+                or return $self->warn( "Must pass a MARC::Record object to check_record" );
+
+        my @_1xx = $marc->field( "1.." );
+        my $n1xx = scalar @_1xx;
+        if ( $n1xx > 1 ) {
+                $self->warn( "1XX: Only one 1XX tag is allowed, but I found $n1xx of them." );
+        }
+
+        if ( not $marc->field( 245 ) ) {
+                $self->warn( "245: No 245 tag." );
+        }
+
+
+        my %field_seen;
+        my $rules = $self->{_rules};
+        for my $field ( $marc->fields ) {
+                my $tagno = $field->tag;
+                my $tagrules = $rules->{$tagno} or next;
+
+                if ( $tagrules->{NR} && $field_seen{$tagno} ) {
+                        $self->warn( "$tagno: Field is not repeatable." );
+                }
+
+                if ( $tagno >= 10 ) {
+                        for my $ind ( 1..2 ) {
+                                my $indvalue = $field->indicator($ind);
+                                if ( not ($indvalue =~ $tagrules->{"ind$ind" . "_regex"}) ) {
+                                        $self->warn(
+                                                "$tagno: Indicator $ind must be ",
+                                                $tagrules->{"ind$ind" . "_desc"},
+                                                " but it's \"$indvalue\""
+                                        );
+                                }
+                        }
+
+                        my %sub_seen;
+                        for my $subfield ( $field->subfields ) {
+                                my ($code,$data) = @$subfield;
+
+                                my $rule = $tagrules->{$code};
+                                if ( not defined $rule ) {
+                                        $self->warn( "$tagno: Subfield _$code is not allowed." );
+                                } elsif ( ($rule eq "NR") && $sub_seen{$code} ) {
+                                        $self->warn( "$tagno: Subfield _$code is not repeatable." );
+                                }
+
+                                if ( $data =~ /[\t\r\n]/ ) {
+                                        $self->warn( "$tagno: Subfield _$code has an invalid control character" );
+                                }
+
+                                ++$sub_seen{$code};
+                        }
+                }
+
+                # Check to see if a check_xxx() function exists, and call it on the field if it does
+                my $checker = "check_$tagno";
+                if ( $self->can( $checker ) ) {
+                        $self->$checker( $field );
+                }
+
+                ++$field_seen{$tagno};
+        } # for
+
+        return;
+}
+
+=head2 check_I<xxx>( $field )
+
+Various functions to check the different fields.  If the function doesn't exist,
+then it doesn't get checked.
+
+=head2 check_245( $field )
+
+Makes sure that the 245 has an _a subfield.
+
+=cut
+
+sub check_245 {
+        my $self = shift;
+        my $field = shift;
+
+        if ( not $field->subfield( "a" ) ) {
+                $self->warn( "245: Must have a subfield _a." );
+        }
+}
+
+=head1 SEE ALSO
+
+Check the docs for L<MARC::Record>.  All software links are there.
+
+=head1 TODO
+
+=over 4
+
+=item * ISBN and ISSN checking
+
+We can check the 020 and 022 fields with the C<Business::ISBN> and
+C<Business::ISSN> modules, respectively.
+
+=back
+
+=head1 LICENSE
+
+This code may be distributed under the same terms as Perl itself.
+
+Please note that these modules are not products of or supported by the
+employers of the various contributors to the code.
+
+=head1 AUTHOR
+
+Andy Lester, C<< <andy at petdance.com> >>
+
+=cut
+
+# Used only to read the stuff from __DATA__
+sub _read_rules() {
+    my $self = shift;
+
+    my $tell = tell(DATA);  # Stash the position so we can reset it for next time
+
+    local $/ = "";
+    while ( my $tagblock = <DATA> ) {
+        my @lines = split( /\n/, $tagblock );
+        s/\s+$// for @lines;
+
+        next unless @lines >= 4; # Some of our entries are tag-only
+
+        my $tagline = shift @lines;
+        my @keyvals = split( /\s+/, $tagline, 3 );
+        my $tagno = shift @keyvals;
+        my $repeatable = shift @keyvals;
+
+        $self->_parse_tag_rules( $tagno, $repeatable, @lines );
+    } # while
+
+    # Set the pointer back to where it was, in case we do this again
+    seek( DATA, $tell, 0 );
+}
+
+sub _parse_tag_rules {
+        my $self = shift;
+        my $tagno = shift;
+        my $repeatable = shift;
+        my @lines = @_;
+
+        my $rules = ($self->{_rules}->{$tagno} ||= {});
+        $rules->{$repeatable} = $repeatable;
+
+        for ( @lines ) {
+                my @keyvals = split( /\s+/, $_, 3 );
+                my $key = shift @keyvals;
+                my $val = shift @keyvals;
+
+                $rules->{$key} = $val;
+
+                # Do magic for indicators
+                if ( $key =~ /^ind/ ) {
+                        my $desc;
+                        my $regex;
+
+                        if ( $val eq "blank" ) {
+                                $desc = "blank";
+                                $regex = qr/^ $/;
+                        } else {
+                                $desc = _nice_list($val);
+                                $val =~ s/^b/ /;
+                                $regex = qr/^[$val]$/;
+                        }
+
+                $rules->{$key."_desc"} = $desc;
+                $rules->{$key."_regex"} = $regex;
+                } # if indicator
+        } # while
+}
+
+
+sub _nice_list($) {
+        my $str = shift;
+
+        if ( $str =~ s/(\d)-(\d)/$1 thru $2/ ) {
+                return $str;
+        }
+
+        my @digits = split( //, $str );
+        $digits[0] = "blank" if $digits[0] eq "b";
+        my $last = pop @digits;
+        return join( ", ", @digits ) . " or $last";
+}
+
+sub _ind_regex($) {
+        my $str = shift;
+
+        return qr/^ $/ if $str eq "blank";
+
+        return qr/^[$str]$/;
+}
+
+
+1;
+
+__DATA__
+010     NR      LIBRARY OF CONGRESS CONTROL NUMBER
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      LC control number
+b       R       NUCMC control number
+z       R       Canceled/invalid LC control number
+8       R       Field link and sequence number
+
+013     R       PATENT CONTROL INFORMATION
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Number
+b       NR      Country
+c       NR      Type of number
+d       R       Date
+e       R       Status
+f       R       Party to document
+6       NR      Linkage
+8       R       Field link and sequence number
+
+015     R       NATIONAL BIBLIOGRAPHY NUMBER
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       R       National bibliography number
+2       NR      Source
+6       NR      Linkage
+8       R       Field link and sequence number
+
+016     R       NATIONAL BIBLIOGRAPHIC AGENCY CONTROL NUMBER
+ind1    b7      National bibliographic agency
+ind2    blank   Undefined
+a       NR      Record control number
+z       R       Canceled or invalid record control number
+2       NR      Source
+8       R       Field link and sequence number
+
+017     R       COPYRIGHT OR LEGAL DEPOSIT NUMBER
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       R       Copyright registration number
+b       NR      Assigning agency
+2       NR      Source
+6       NR      Linkage
+8       R       Field link and sequence number
+
+018     NR      COPYRIGHT ARTICLE-FEE CODE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Copyright article-fee code
+6       NR      Linkage
+8       R       Field link and sequence number
+
+020     R       INTERNATIONAL STANDARD BOOK NUMBER
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      International Standard Book Number
+c       NR      Terms of availability
+z       R       Canceled/invalid ISBN
+6       NR      Linkage
+8       R       Field link and sequence number
+
+022     R       INTERNATIONAL STANDARD SERIAL NUMBER
+ind1    b01     Level of international interest
+ind2    blank   Undefined
+a       NR      International Standard Serial Number
+y       R       Incorrect ISSN
+z       R       Canceled ISSN
+6       NR      Linkage
+8       R       Field link and sequence number
+
+024     R       OTHER STANDARD IDENTIFIER
+ind1    0123478 Type of standard number or code
+ind2    b01     Difference indicator
+a       NR      Standard number or code
+c       NR      Terms of availability
+d       NR      Additional codes following the standard number or code
+z       R       Canceled/invalid standard number or code
+2       NR      Source of number or code
+6       NR      Linkage
+8       R       Field link and sequence number
+
+025     R       OVERSEAS ACQUISITION NUMBER
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       R       Overseas acquisition number
+8       R       Field link and sequence number
+
+026     R       FINGERPRINT IDENTIFIER
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       R       First and second groups of characters
+b       R       Third and fourth groups of characters
+c       NR      Date
+d       R       Number of volume or part
+e       NR      Unparsed fingerprint
+2       NR      Source
+5       R       Institution to which field applies
+6       NR      Linkage
+8       R       Field link and sequence number
+
+027     R       STANDARD TECHNICAL REPORT NUMBER
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Standard technical report number
+z       R       Canceled/invalid number
+6       NR      Linkage
+8       R       Field link and sequence number
+
+028     R       PUBLISHER NUMBER
+ind1    012345  Type of publisher number
+ind2    0123    Note/added entry controller
+a       NR      Publisher number
+b       NR      Source
+6       NR      Linkage
+8       R       Field link and sequence number
+
+030     R       CODEN DESIGNATION
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      CODEN
+z       R       Canceled/invalid CODEN
+6       NR      Linkage
+8       R       Field link and sequence number
+
+032     R       POSTAL REGISTRATION NUMBER
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Postal registration number
+b       NR      Source (agency assigning number)
+6       NR      Linkage
+8       R       Field link and sequence number
+
+033     R       DATE/TIME AND PLACE OF AN EVENT
+ind1    b012    Type of date in subfield $a
+ind2    b012    Type of event
+a       R       Formatted date/time
+b       R       Geographic classification area code
+c       R       Geographic classification subarea code
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+034     R       CODED CARTOGRAPHIC MATHEMATICAL DATA
+ind1    013     Type of scale
+ind2    b01     Type of ring
+a       NR      Category of scale
+b       R       Constant ratio linear horizontal scale
+c       R       Constant ratio linear vertical scale
+d       NR      Coordinates--westernmost longitude
+e       NR      Coordinates--easternmost longitude
+f       NR      Coordinates--northernmost latitude
+g       NR      Coordinates--southernmost latitude
+h       R       Angular scale
+j       NR      Declination--northern limit
+k       NR      Declination--southern limit
+m       NR      Right ascension--eastern limit
+n       NR      Right ascension--western limit
+p       NR      Equinox
+s       R       G-ring latitude
+t       R       G-ring longitude
+6       NR      Linkage
+8       R       Field link and sequence number
+
+035     R       SYSTEM CONTROL NUMBER
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      System control number
+z       R       Canceled/invalid control number
+6       NR      Linkage
+8       R       Field link and sequence number
+
+036     NR      ORIGINAL STUDY NUMBER FOR COMPUTER DATA FILES
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Original study number
+b       NR      Source (agency assigning number)
+6       NR      Linkage
+8       R       Field link and sequence number
+
+037     R       SOURCE OF ACQUISITION
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Stock number
+b       NR      Source of stock number/acquisition
+c       R       Terms of availability
+f       R       Form of issue
+g       R       Additional format characteristics
+n       R       Note
+6       NR      Linkage
+8       R       Field link and sequence number
+
+038     NR      RECORD CONTENT LICENSOR
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Record content licensor
+6       NR      Linkage
+8       R       Field link and sequence number
+
+040     NR      CATALOGING SOURCE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Original cataloging agency
+b       NR      Language of cataloging
+c       NR      Transcribing agency
+d       R       Modifying agency
+e       NR      Description conventions
+6       NR      Linkage
+8       R       Field link and sequence number
+
+041     R       LANGUAGE CODE
+ind1    01      Translation indication
+ind2    b7      Source of code
+a       R       Language code of text/sound track or separate title
+b       R       Language code of summary or abstract/overprinted title or subtitle
+d       R       Language code of sung or spoken text
+e       R       Language code of librettos
+f       R       Language code of table of contents
+g       R       Language code of accompanying material other than librettos
+h       R       Language code of original and/or intermediate translations of text
+2       NR      Source of code
+6       NR      Linkage
+8       R       Field link and sequence number
+
+042     NR      AUTHENTICATION CODE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       R       Authentication code
+
+043     NR      GEOGRAPHIC AREA CODE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       R       Geographic area code
+b       R       Local GAC code
+c       R       ISO code
+2       R       Source of local code
+6       NR      Linkage
+8       R       Field link and sequence number
+
+044     NR      COUNTRY OF PUBLISHING/PRODUCING ENTITY CODE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       R       Country of publishing/producing entity code
+b       R       Local subentity code
+c       R       ISO code
+2       R       Source of local subentity code
+6       NR      Linkage
+8       R       Field link and sequence number
+
+045     NR      TIME PERIOD OF CONTENT
+ind1    b012    Type of time period in subfield $b or $c
+ind2    blank   Undefined
+a       R       Time period code
+b       R       Formatted 9999 B.C. through C.E. time period
+c       R       Formatted pre-9999 B.C. time period
+6       NR      Linkage
+8       R       Field link and sequence number
+
+046     R       SPECIAL CODED DATES
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Type of date code
+b       NR      Date 1 (B.C. date)
+c       NR      Date 1 (C.E. date)
+d       NR      Date 2 (B.C. date)
+e       NR      Date 2 (C.E. date)
+j       NR      Date resource modified
+k       NR      Beginning or single date created
+l       NR      Ending date created
+m       NR      Beginning of date valid
+n       NR      End of date valid
+2       NR      Source of date
+6       NR      Linkage
+8       R       Field link and sequence number
+
+047     NR      FORM OF MUSICAL COMPOSITION CODE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       R       Form of musical composition code
+8       R       Field link and sequence number
+
+048     R       NUMBER OF MUSICAL INSTRUMENTS OR VOICES CODE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       R       Performer or ensemble
+b       R       Soloist
+8       R       Field link and sequence number
+
+050     R       LIBRARY OF CONGRESS CALL NUMBER
+ind1    b01     Existence in LC collection
+ind2    040123  Source of call number
+a       R       Classification number
+b       NR      Item number
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+051     R       LIBRARY OF CONGRESS COPY, ISSUE, OFFPRINT STATEMENT
+ind1    blank   Undefined
+ind2    b0123   Undefined
+a       NR      Classification number
+b       NR      Item number
+c       NR      Copy information
+8       R       Field link and sequence number
+
+052     R       GEOGRAPHIC CLASSIFICATION
+ind1    b17     Code source
+ind2    blank   Undefined
+a       NR      Geographic classification area code
+b       R       Geographic classification subarea code
+d       R       Populated place name
+2       NR      Code source
+6       NR      Linkage
+8       R       Field link and sequence number
+
+055     R       CLASSIFICATION NUMBERS ASSIGNED IN CANADA
+ind1    b01     Existence in NLC collection
+ind2    0123456789      Type, completeness, source of class/call number
+a       NR      Classification number
+b       NR      Item number
+2       NR      Source of call/class number
+8       R       Field link and sequence number
+
+060     R       NATIONAL LIBRARY OF MEDICINE CALL NUMBER
+ind1    b01     Existence in NLM collection
+ind2    040123  Source of call number
+a       R       Classification number
+b       NR      Item number
+8       R       Field link and sequence number
+
+061     R       NATIONAL LIBRARY OF MEDICINE COPY STATEMENT
+ind1    blank   Undefined
+ind2    b0123   Undefined
+a       R       Classification number
+b       NR      Item number
+c       NR      Copy information
+8       R       Field link and sequence number
+
+066     NR      CHARACTER SETS PRESENT
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Primary G0 character set
+b       NR      Primary G1 character set
+c       R       Alternate G0 or G1 character set
+
+070     R       NATIONAL AGRICULTURAL LIBRARY CALL NUMBER
+ind1    01      Existence in NAL collection
+ind2    b0123   Undefined
+a       R       Classification number
+b       NR      Item number
+8       R       Field link and sequence number
+
+071     R       NATIONAL AGRICULTURAL LIBRARY COPY STATEMENT
+ind1    blank   Undefined
+ind2    b0123   Undefined
+a       R       Classification number
+b       NR      Item number
+c       NR      Copy information
+8       R       Field link and sequence number
+
+072     R       SUBJECT CATEGORY CODE
+ind1    blank   Undefined
+ind2    07      Code source
+a       NR      Subject category code
+x       R       Subject category code subdivision
+2       NR      Code source
+6       NR      Linkage
+8       R       Field link and sequence number
+
+074     R       GPO ITEM NUMBER
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      GPO item number
+z       R       Canceled/invalid GPO item number
+8       R       Field link and sequence number
+
+080     R       UNIVERSAL DECIMAL CLASSIFICATION NUMBER
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Universal Decimal Classification number
+b       NR      Item number
+x       R       Common auxiliary subdivision
+2       NR      Edition identifier
+6       NR      Linkage
+8       R       Field link and sequence number
+
+082     R       DEWEY DECIMAL CLASSIFICATION NUMBER
+ind1    01      Type of edition
+ind2    b04     Source of classification number
+a       R       Classification number
+b       NR      Item number
+2       NR      Edition number
+6       NR      Linkage
+8       R       Field link and sequence number
+
+084     R       OTHER CLASSIFICATION NUMBER
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       R       Classification number
+b       NR      Item number
+2       NR      Source of number
+6       NR      Linkage
+8       R       Field link and sequence number
+
+086     R       GOVERNMENT DOCUMENT CLASSIFICATION NUMBER
+ind1    b01     Number source
+ind2    blank   Undefined
+a       NR      Classification number
+z       R       Canceled/invalid classification number
+2       NR      Number source
+6       NR      Linkage
+8       R       Field link and sequence number
+
+088     R       REPORT NUMBER
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Report number
+z       R       Canceled/invalid report number
+6       NR      Linkage
+8       R       Field link and sequence number
+
+100     NR      MAIN ENTRY--PERSONAL NAME
+ind1    013     Type of personal name entry element
+ind2    blank   Undefined
+a       NR      Personal name
+b       NR      Numeration
+c       R       Titles and other words associated with a name
+d       NR      Dates associated with a name
+e       R       Relator term
+f       NR      Date of a work
+g       NR      Miscellaneous information
+j       R       Attribution qualifier
+k       R       Form subheading
+l       NR      Language of a work
+n       R       Number of part/section of a work
+p       R       Name of part/section of a work
+q       NR      Fuller form of name
+t       NR      Title of a work
+u       NR      Affiliation
+4       R       Relator code
+6       NR      Linkage
+8       R       Field link and sequence number
+
+110     NR      MAIN ENTRY--CORPORATE NAME
+ind1    012     Type of corporate name entry element
+ind2    blank   Undefined
+a       NR      Corporate name or jurisdiction name as entry element
+b       R       Subordinate unit
+c       NR      Location of meeting
+d       R       Date of meeting or treaty signing
+e       R       Relator term
+f       NR      Date of a work
+g       NR      Miscellaneous information
+k       R       Form subheading
+l       NR      Language of a work
+n       R       Number of part/section/meeting
+p       R       Name of part/section of a work
+t       NR      Title of a work
+u       NR      Affiliation
+4       R       Relator code
+6       NR      Linkage
+8       R       Field link and sequence number
+
+111     NR      MAIN ENTRY--MEETING NAME
+ind1    012     Type of meeting name entry element
+ind2    blank   Undefined
+a       NR      Meeting name or jurisdiction name as entry element
+c       NR      Location of meeting
+d       NR      Date of meeting
+e       R       Subordinate unit
+f       NR      Date of a work
+g       NR      Miscellaneous information
+k       R       Form subheading
+l       NR      Language of a work
+n       R       Number of part/section/meeting
+p       R       Name of part/section of a work
+q       NR      Name of meeting following jurisdiction name entry element
+t       NR      Title of a work
+u       NR      Affiliation
+4       R       Relator code
+6       NR      Linkage
+8       R       Field link and sequence number
+
+130     NR      MAIN ENTRY--UNIFORM TITLE
+ind1    0-9     Nonfiling characters
+ind2    blank   Undefined
+a       NR      Uniform title
+d       R       Date of treaty signing
+f       NR      Date of a work
+g       NR      Miscellaneous information
+h       NR      Medium
+k       R       Form subheading
+l       NR      Language of a work
+m       R       Medium of performance for music
+n       R       Number of part/section of a work
+o       NR      Arranged statement for music
+p       R       Name of part/section of a work
+r       NR      Key for music
+s       NR      Version
+t       NR      Title of a work
+6       NR      Linkage
+8       R       Field link and sequence number
+
+210     R       ABBREVIATED TITLE
+ind1    01      Title added entry
+ind2    b0      Type
+a       NR      Abbreviated title
+b       NR      Qualifying information
+2       R       Source
+6       NR      Linkage
+8       R       Field link and sequence number
+
+222     R       KEY TITLE
+ind1    b0123   Specifies whether variant title and/or added entry is required
+ind2    0-9     Nonfiling characters
+a       NR      Key title
+b       NR      Qualifying information
+6       NR      Linkage
+8       R       Field link and sequence number
+
+240     NR      UNIFORM TITLE
+ind1    01      Uniform title printed or displayed
+ind2    0-9     Nonfiling characters
+a       NR      Uniform title
+d       R       Date of treaty signing
+f       NR      Date of a work
+g       NR      Miscellaneous information
+h       NR      Medium
+k       R       Form subheading
+l       NR      Language of a work
+m       R       Medium of performance for music
+n       R       Number of part/section of a work
+o       NR      Arranged statement for music
+p       R       Name of part/section of a work
+r       NR      Key for music
+s       NR      Version
+6       NR      Linkage
+8       R       Field link and sequence number
+
+242     R       TRANSLATION OF TITLE BY CATALOGING AGENCY
+ind1    01      Title added entry
+ind2    0-9     Nonfiling characters
+a       NR      Title
+b       NR      Remainder of title
+c       NR      Statement of responsibility, etc.
+h       NR      Medium
+n       R       Number of part/section of a work
+p       R       Name of part/section of a work
+y       NR      Language code of translated title
+6       NR      Linkage
+8       R       Field link and sequence number
+
+243     NR      COLLECTIVE UNIFORM TITLE
+ind1    01      Uniform title printed or displayed
+ind2    0-9     Nonfiling characters
+a       NR      Uniform title
+d       R       Date of treaty signing
+f       NR      Date of a work
+g       NR      Miscellaneous information
+h       NR      Medium
+k       R       Form subheading
+l       NR      Language of a work
+m       R       Medium of performance for music
+n       R       Number of part/section of a work
+o       NR      Arranged statement for music
+p       R       Name of part/section of a work
+r       NR      Key for music
+s       NR      Version
+6       NR      Linkage
+8       R       Field link and sequence number
+
+245     NR      TITLE STATEMENT
+ind1    01      Title added entry
+ind2    0-9     Nonfiling characters
+a       NR      Title
+b       NR      Remainder of title
+c       NR      Statement of responsibility, etc.
+f       NR      Inclusive dates
+g       NR      Bulk dates
+h       NR      Medium
+k       R       Form
+n       R       Number of part/section of a work
+p       R       Name of part/section of a work
+s       NR      Version
+6       NR      Linkage
+8       R       Field link and sequence number
+
+246     R       VARYING FORM OF TITLE
+ind1    0123    Note/added entry controller
+ind2    b012345678      Type of title
+a       NR      Title proper/short title
+b       NR      Remainder of title
+f       NR      Date or sequential designation
+g       NR      Miscellaneous information
+h       NR      Medium
+i       NR      Display text
+n       R       Number of part/section of a work
+p       R       Name of part/section of a work
+5       NR      Institution to which field applies
+6       NR      Linkage
+8       R       Field link and sequence number
+
+247     R       FORMER TITLE
+ind1    01      Title added entry
+ind2    01      Note controller
+a       NR      Title
+b       NR      Remainder of title
+f       NR      Date or sequential designation
+g       NR      Miscellaneous information
+h       NR      Medium
+n       R       Number of part/section of a work
+p       R       Name of part/section of a work
+x       NR      International Standard Serial Number
+6       NR      Linkage
+8       R       Field link and sequence number
+
+250     NR      EDITION STATEMENT
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Edition statement
+b       NR      Remainder of edition statement
+6       NR      Linkage
+8       R       Field link and sequence number
+
+254     NR      MUSICAL PRESENTATION STATEMENT
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Musical presentation statement
+6       NR      Linkage
+8       R       Field link and sequence number
+
+255     R       CARTOGRAPHIC MATHEMATICAL DATA
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Statement of scale
+b       NR      Statement of projection
+c       NR      Statement of coordinates
+d       NR      Statement of zone
+e       NR      Statement of equinox
+f       NR      Outer G-ring coordinate pairs
+g       NR      Exclusion G-ring coordinate pairs
+6       NR      Linkage
+8       R       Field link and sequence number
+
+256     NR      COMPUTER FILE CHARACTERISTICS
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Computer file characteristics
+6       NR      Linkage
+8       R       Field link and sequence number
+
+257     NR      COUNTRY OF PRODUCING ENTITY FOR ARCHIVAL FILMS
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Country of producing entity
+6       NR      Linkage
+8       R       Field link and sequence number
+
+260     R       PUBLICATION, DISTRIBUTION, ETC. (IMPRINT)
+ind1    b23     Sequence of publishing statements
+ind2    b0101   Undefined
+a       R       Place of publication, distribution, etc.
+b       R       Name of publisher, distributor, etc.
+c       R       Date of publication, distribution, etc.
+d       NR      Plate or publisher's number for music (Pre-AACR 2)
+e       NR      Place of manufacture
+f       NR      Manufacturer
+g       NR      Date of manufacture
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+261     NR      IMPRINT STATEMENT FOR FILMS (Pre-AACR 1 Revised)
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       R       Producing company
+b       R       Releasing company (primary distributor)
+d       R       Date of production, release, etc.
+e       R       Contractual producer
+f       R       Place of production, release, etc.
+6       NR      Linkage
+8       R       Field link and sequence number
+
+262     NR      IMPRINT STATEMENT FOR SOUND RECORDINGS (Pre-AACR 2)
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Place of production, release, etc.
+b       NR      Publisher or trade name
+c       NR      Date of production, release, etc.
+k       NR      Serial identification
+l       NR      Matrix and/or take number
+6       NR      Linkage
+8       R       Field link and sequence number
+
+263     NR      PROJECTED PUBLICATION DATE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Projected publication date
+6       NR      Linkage
+8       R       Field link and sequence number
+
+270     R       ADDRESS
+ind1    b12     Level
+ind2    b07     Type of address
+a       R       Address
+b       NR      City
+c       NR      State or province
+d       NR      Country
+e       NR      Postal code
+f       NR      Terms preceding attention name
+g       NR      Attention name
+h       NR      Attention position
+i       NR      Type of address
+j       R       Specialized telephone number
+k       R       Telephone number
+l       R       Fax number
+m       R       Electronic mail address
+n       R       TDD or TTY number
+p       R       Contact person
+q       R       Title of contact person
+r       R       Hours
+z       R       Public note
+4       R       Relator code
+6       NR      Linkage
+8       R       Field link and sequence number
+
+300     R       PHYSICAL DESCRIPTION
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       R       Extent
+b       NR      Other physical details
+c       R       Dimensions
+e       NR      Accompanying material
+f       R       Type of unit
+g       R       Size of unit
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+306     NR      PLAYING TIME
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       R       Playing time
+6       NR      Linkage
+8       R       Field link and sequence number
+
+307     R       HOURS, ETC.
+ind1    b8      Display constant controller
+ind2    blank   Undefined
+a       NR      Hours
+b       NR      Additional information
+6       NR      Linkage
+8       R       Field link and sequence number
+
+310     NR      CURRENT PUBLICATION FREQUENCY
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Current publication frequency
+b       NR      Date of current publication frequency
+6       NR      Linkage
+8       R       Field link and sequence number
+
+321     R       FORMER PUBLICATION FREQUENCY
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Former publication frequency
+b       NR      Dates of former publication frequency
+6       NR      Linkage
+8       R       Field link and sequence number
+
+340     R       PHYSICAL MEDIUM
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       R       Material base and configuration
+b       R       Dimensions
+c       R       Materials applied to surface
+d       R       Information recording technique
+e       R       Support
+f       R       Production rate/ratio
+h       R       Location within medium
+i       R       Technical specifications of medium
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+342     R       GEOSPATIAL REFERENCE DATA
+ind1    01      Geospatial reference dimension
+ind2    012345678       Geospatial reference method
+a       NR      Name
+b       NR      Coordinate or distance units
+c       NR      Latitude resolution
+d       NR      Longitude resolution
+e       R       Standard parallel or oblique line latitude
+f       R       Oblique line longitude
+g       NR      Longitude of central meridian or projection center
+h       NR      Latitude of projection origin or projection center
+i       NR      False easting
+j       NR      False northing
+k       NR      Scale factor
+l       NR      Height of perspective point above surface
+m       NR      Azimuthal angle
+o       NR      Landsat number and path number
+p       NR      Zone identifier
+q       NR      Ellipsoid name
+r       NR      Semi-major axis
+s       NR      Denominator of flattening ratio
+t       NR      Vertical resolution
+u       NR      Vertical encoding method
+v       NR      Local planar, local, or other projection or grid description
+w       NR      Local planar or local georeference information
+2       NR      Reference method used
+6       NR      Linkage
+8       R       Field link and sequence number
+
+343     R       PLANAR COORDINATE DATA
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Planar coordinate encoding method
+b       NR      Planar distance units
+c       NR      Abscissa resolution
+d       NR      Ordinate resolution
+e       NR      Distance resolution
+f       NR      Bearing resolution
+g       NR      Bearing units
+h       NR      Bearing reference direction
+i       NR      Bearing reference meridian
+6       NR      Linkage
+8       R       Field link and sequence number
+
+351     R       ORGANIZATION AND ARRANGEMENT OF MATERIALS
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       R       Organization
+b       R       Arrangement
+c       NR      Hierarchical level
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+352     R       DIGITAL GRAPHIC REPRESENTATION
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Direct reference method
+b       R       Object type
+c       R       Object count
+d       NR      Row count
+e       NR      Column count
+f       NR      Vertical count
+g       NR      VPF topology level
+i       NR      Indirect reference description
+6       NR      Linkage
+8       R       Field link and sequence number
+
+355     R       SECURITY CLASSIFICATION CONTROL
+ind1    0123458 Controlled element
+ind2    blank   Undefined
+a       NR      Security classification
+b       R       Handling instructions
+c       R       External dissemination information
+d       NR      Downgrading or declassification event
+e       NR      Classification system
+f       NR      Country of origin code
+g       NR      Downgrading date
+h       NR      Declassification date
+j       R       Authorization
+6       NR      Linkage
+8       R       Field link and sequence number
+
+357     NR      ORIGINATOR DISSEMINATION CONTROL
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Originator control term
+b       R       Originating agency
+c       R       Authorized recipients of material
+g       R       Other restrictions
+6       NR      Linkage
+8       R       Field link and sequence number
+
+362     R       DATES OF PUBLICATION AND/OR SEQUENTIAL DESIGNATION
+ind1    01      Format of date
+ind2    blank   Undefined
+a       NR      Dates of publication and/or sequential designation
+z       NR      Source of information
+6       NR      Linkage
+8       R       Field link and sequence number
+
+400     R       SERIES STATEMENT/ADDED ENTRY--PERSONAL NAME
+ind1    013     Type of personal name entry element
+ind2    01      Pronoun represents main entry
+a       NR      Personal name
+b       NR      Numeration
+c       R       Titles and other words associated with a name
+d       NR      Dates associated with a name
+e       R       Relator term
+f       NR      Date of a work
+g       NR      Miscellaneous information
+k       R       Form subheading
+l       NR      Language of a work
+n       R       Number of part/section of a work
+p       R       Name of part/section of a work
+t       NR      Title of a work
+u       NR      Affiliation
+v       NR      Volume number/sequential designation
+x       NR      International Standard Serial Number
+4       R       Relator code
+6       NR      Linkage
+8       R       Field link and sequence number
+
+410     R       SERIES STATEMENT/ADDED ENTRY--CORPORATE NAME
+ind1    012     Type of corporate name entry element
+ind2    01      Pronoun represents main entry
+a       NR      Corporate name or jurisdiction name as entry element
+b       R       Subordinate unit
+c       NR      Location of meeting
+d       R       Date of meeting or treaty signing
+e       R       Relator term
+f       NR      Date of a work
+g       NR      Miscellaneous information
+k       R       Form subheading
+l       NR      Language of a work
+n       R       Number of part/section/meeting
+p       R       Name of part/section of a work
+t       NR      Title of a work
+u       NR      Affiliation
+v       NR      Volume number/sequential designation
+x       NR      International Standard Serial Number
+4       R       Relator code
+6       NR      Linkage
+8       R       Field link and sequence number
+
+411     R       SERIES STATEMENT/ADDED ENTRY--MEETING NAME
+ind1    012     Type of meeting name entry element
+ind2    01      Pronoun represents main entry
+a       NR      Meeting name or jurisdiction name as entry element
+c       NR      Location of meeting
+d       NR      Date of meeting
+e       R       Subordinate unit
+f       NR      Date of a work
+g       NR      Miscellaneous information
+k       R       Form subheading
+l       NR      Language of a work
+n       R       Number of part/section/meeting
+p       R       Name of part/section of a work
+q       NR      Name of meeting following jurisdiction name entry element
+t       NR      Title of a work
+u       NR      Affiliation
+v       NR      Volume number/sequential designation
+x       NR      International Standard Serial Number
+4       R       Relator code
+6       NR      Linkage
+8       R       Field link and sequence number
+
+440     R       SERIES STATEMENT/ADDED ENTRY--TITLE
+ind1    blank   Undefined
+ind2    0-9     Nonfiling characters
+a       NR      Title
+n       R       Number of part/section of a work
+p       R       Name of part/section of a work
+v       NR      Volume number/sequential designation
+x       NR      International Standard Serial Number
+6       NR      Linkage
+8       R       Field link and sequence number
+
+490     R       SERIES STATEMENT
+ind1    01      Specifies whether series is traced
+ind2    blank   Undefined
+a       R       Series statement
+l       NR      Library of Congress call number
+v       R       Volume number/sequential designation
+x       NR      International Standard Serial Number
+6       NR      Linkage
+8       R       Field link and sequence number
+
+500     R       GENERAL NOTE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      General note
+3       NR      Materials specified
+5       NR      Institution to which field applies
+6       NR      Linkage
+8       R       Field link and sequence number
+
+501     R       WITH NOTE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      With note
+5       NR      Institution to which field applies
+6       NR      Linkage
+8       R       Field link and sequence number
+
+502     R       DISSERTATION NOTE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Dissertation note
+6       NR      Linkage
+8       R       Field link and sequence number
+
+504     R       BIBLIOGRAPHY, ETC. NOTE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Bibliography, etc. note
+b       NR      Number of references
+6       NR      Linkage
+8       R       Field link and sequence number
+
+505     R       FORMATTED CONTENTS NOTE
+ind1    0128    Display constant controller
+ind2    b0      Level of content designation
+a       NR      Formatted contents note
+g       R       Miscellaneous information
+r       R       Statement of responsibility
+t       R       Title
+u       R       Uniform Resource Identifier
+6       NR      Linkage
+8       R       Field link and sequence number
+
+506     R       RESTRICTIONS ON ACCESS NOTE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Terms governing access
+b       R       Jurisdiction
+c       R       Physical access provisions
+d       R       Authorized users
+e       R       Authorization
+u       R       Uniform Resource Identifier
+3       NR      Materials specified
+5       NR      Institution to which field applies
+6       NR      Linkage
+8       R       Field link and sequence number
+
+507     NR      SCALE NOTE FOR GRAPHIC MATERIAL
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Representative fraction of scale note
+b       NR      Remainder of scale note
+6       NR      Linkage
+8       R       Field link and sequence number
+
+508     R       CREATION/PRODUCTION CREDITS NOTE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Creation/production credits note
+6       NR      Linkage
+8       R       Field link and sequence number
+
+510     R       CITATION/REFERENCES NOTE
+ind1    01234   Coverage/location in source
+ind2    blank   Undefined
+a       NR      Name of source
+b       NR      Coverage of source
+c       NR      Location within source
+x       NR      International Standard Serial Number
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+511     R       PARTICIPANT OR PERFORMER NOTE
+ind1    01      Display constant controller
+ind2    blank   Undefined
+a       NR      Participant or performer note
+6       NR      Linkage
+8       R       Field link and sequence number
+
+513     R       TYPE OF REPORT AND PERIOD COVERED NOTE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Type of report
+b       NR      Period covered
+6       NR      Linkage
+8       R       Field link and sequence number
+
+514     NR      DATA QUALITY NOTE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Attribute accuracy report
+b       R       Attribute accuracy value
+c       R       Attribute accuracy explanation
+d       NR      Logical consistency report
+e       NR      Completeness report
+f       NR      Horizontal position accuracy report
+g       R       Horizontal position accuracy value
+h       R       Horizontal position accuracy explanation
+i       NR      Vertical positional accuracy report
+j       R       Vertical positional accuracy value
+k       R       Vertical positional accuracy explanation
+m       NR      Cloud cover
+u       R       Uniform Resource Identifier
+z       R       Display note
+6       NR      Linkage
+8       R       Field link and sequence number
+
+515     R       NUMBERING PECULIARITIES NOTE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Numbering peculiarities note
+6       NR      Linkage
+8       R       Field link and sequence number
+
+516     R       TYPE OF COMPUTER FILE OR DATA NOTE
+ind1    b8      Display constant controller
+ind2    blank   Undefined
+a       NR      Type of computer file or data note
+6       NR      Linkage
+8       R       Field link and sequence number
+
+518     R       DATE/TIME AND PLACE OF AN EVENT NOTE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Date/time and place of an event note
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+520     R       SUMMARY, ETC.
+ind1    b01238  Display constant controller
+ind2    blank   Undefined
+a       NR      Summary, etc. note
+b       NR      Expansion of summary note
+u       R       Uniform Resource Identifier
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+521     R       TARGET AUDIENCE NOTE
+ind1    b012348 Display constant controller
+ind2    blank   Undefined
+a       R       Target audience note
+b       NR      Source
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+522     R       GEOGRAPHIC COVERAGE NOTE
+ind1    b8      Display constant controller
+ind2    blank   Undefined
+a       NR      Geographic coverage note
+6       NR      Linkage
+8       R       Field link and sequence number
+
+524     R       PREFERRED CITATION OF DESCRIBED MATERIALS NOTE
+ind1    b8      Display constant controller
+ind2    blank   Undefined
+a       NR      Preferred citation of described materials note
+2       NR      Source of schema used
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+525     R       SUPPLEMENT NOTE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Supplement note
+6       NR      Linkage
+8       R       Field link and sequence number
+
+526     R       STUDY PROGRAM INFORMATION NOTE
+ind1    08      Display constant controller
+ind2    blank   Undefined
+a       NR      Program name
+b       NR      Interest level
+c       NR      Reading level
+d       NR      Title point value
+i       NR      Display text
+x       R       Nonpublic note
+z       R       Public note
+5       NR      Institution to which field applies
+6       NR      Linkage
+8       R       Field link and sequence number
+
+530     R       ADDITIONAL PHYSICAL FORM AVAILABLE NOTE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Additional physical form available note
+b       NR      Availability source
+c       NR      Availability conditions
+d       NR      Order number
+u       R       Uniform Resource Identifier
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+533     R       REPRODUCTION NOTE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Type of reproduction
+b       R       Place of reproduction
+c       R       Agency responsible for reproduction
+d       NR      Date of reproduction
+e       NR      Physical description of reproduction
+f       R       Series statement of reproduction
+m       R       Dates and/or sequential designation of issues reproduced
+n       R       Note about reproduction
+3       NR      Materials specified
+6       NR      Linkage
+7       NR      Fixed-length data elements of reproduction
+8       R       Field link and sequence number
+
+534     R       ORIGINAL VERSION NOTE
+ind1    blank   Undefined
+ind2    b01     Undefined
+a       NR      Main entry of original
+b       NR      Edition statement of original
+c       NR      Publication, distribution, etc. of original
+e       NR      Physical description, etc. of original
+f       R       Series statement of original
+k       R       Key title of original
+l       NR      Location of original
+m       NR      Material specific details
+n       R       Note about original
+p       NR      Introductory phrase
+t       NR      Title statement of original
+x       R       International Standard Serial Number
+z       R       International Standard Book Number
+6       NR      Linkage
+8       R       Field link and sequence number
+
+535     R       LOCATION OF ORIGINALS/DUPLICATES NOTE
+ind1    12      Additional information about custodian
+ind2    blank   Undefined
+a       NR      Custodian
+b       R       Postal address
+c       R       Country
+d       R       Telecommunications address
+g       NR      Repository location code
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+536     R       FUNDING INFORMATION NOTE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Text of note
+b       R       Contract number
+c       R       Grant number
+d       R       Undifferentiated number
+e       R       Program element number
+f       R       Project number
+g       R       Task number
+h       R       Work unit number
+6       NR      Linkage
+8       R       Field link and sequence number
+
+538     R       SYSTEM DETAILS NOTE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      System details note
+6       NR      Linkage
+8       R       Field link and sequence number
+
+540     R       TERMS GOVERNING USE AND REPRODUCTION NOTE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Terms governing use and reproduction
+b       NR      Jurisdiction
+c       NR      Authorization
+d       NR      Authorized users
+u       R       Uniform Resource Identifier
+3       NR      Materials specified
+5       NR      Institution to which field applies
+6       NR      Linkage
+8       R       Field link and sequence number
+
+541     R       IMMEDIATE SOURCE OF ACQUISITION NOTE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Source of acquisition
+b       NR      Address
+c       NR      Method of acquisition
+d       NR      Date of acquisition
+e       NR      Accession number
+f       NR      Owner
+h       NR      Purchase price
+n       R       Extent
+o       R       Type of unit
+3       NR      Materials specified
+5       NR      Institution to which field applies
+6       NR      Linkage
+8       R       Field link and sequence number
+
+544     R       LOCATION OF OTHER ARCHIVAL MATERIALS NOTE
+ind1    b01     Relationship
+ind2    blank   Undefined
+a       R       Custodian
+b       R       Address
+c       R       Country
+d       R       Title
+e       R       Provenance
+n       R       Note
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+545     R       BIOGRAPHICAL OR HISTORICAL DATA
+ind1    b01     Type of data
+ind2    blank   Undefined
+a       NR      Biographical or historical note
+b       NR      Expansion
+u       R       Uniform Resource Identifier
+6       NR      Linkage
+8       R       Field link and sequence number
+
+546     R       LANGUAGE NOTE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Language note
+b       R       Information code or alphabet
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+547     R       FORMER TITLE COMPLEXITY NOTE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Former title complexity note
+6       NR      Linkage
+8       R       Field link and sequence number
+
+550     R       ISSUING BODY NOTE
+ind1    blank   Undefined
+ind2    b01     Undefined
+a       NR      Issuing body note
+6       NR      Linkage
+8       R       Field link and sequence number
+
+552     R       ENTITY AND ATTRIBUTE INFORMATION NOTE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Entity type label
+b       NR      Entity type definition and source
+c       NR      Attribute label
+d       NR      Attribute definition and source
+e       R       Enumerated domain value
+f       R       Enumerated domain value definition and source
+g       NR      Range domain minimum and maximum
+h       NR      Codeset name and source
+i       NR      Unrepresentable domain
+j       NR      Attribute units of measurement and resolution
+k       NR      Beginning date and ending date of attribute values
+l       NR      Attribute value accuracy
+m       NR      Attribute value accuracy explanation
+n       NR      Attribute measurement frequency
+o       R       Entity and attribute overview
+p       R       Entity and attribute detail citation
+u       R       Uniform Resource Identifier
+z       R       Display note
+6       NR      Linkage
+8       R       Field link and sequence number
+
+555     R       CUMULATIVE INDEX/FINDING AIDS NOTE
+ind1    b08     Display constant controller
+ind2    blank   Undefined
+a       NR      Cumulative index/finding aids note
+b       R       Availability source
+c       NR      Degree of control
+d       NR      Bibliographic reference
+u       R       Uniform Resource Identifier
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+556     R       INFORMATION ABOUT DOCUMENTATION NOTE
+ind1    b8      Display constant controller
+ind2    blank   Undefined
+a       NR      Information about documentation note
+z       R       International Standard Book Number
+6       NR      Linkage
+8       R       Field link and sequence number
+
+561     R       OWNERSHIP AND CUSTODIAL HISTORY
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      History
+3       NR      Materials specified
+5       NR      Institution to which field applies
+6       NR      Linkage
+8       R       Field link and sequence number
+
+562     R       COPY AND VERSION IDENTIFICATION NOTE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       R       Identifying markings
+b       R       Copy identification
+c       R       Version identification
+d       R       Presentation format
+e       R       Number of copies
+3       NR      Materials specified
+5       NR      Institution to which field applies
+6       NR      Linkage
+8       R       Field link and sequence number
+
+563     R       BINDING INFORMATION
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Binding note
+u       R       Uniform Resource Identifier
+3       NR      Materials specified
+5       NR      Institution to which field applies
+6       NR      Linkage
+8       R       Field link and sequence number
+
+565     R       CASE FILE CHARACTERISTICS NOTE
+ind1    b08     Display constant controller
+ind2    blank   Undefined
+a       NR      Number of cases/variables
+b       R       Name of variable
+c       R       Unit of analysis
+d       R       Universe of data
+e       R       Filing scheme or code
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+567     R       METHODOLOGY NOTE
+ind1    b8      Display constant controller
+ind2    blank   Undefined
+a       NR      Methodology note
+6       NR      Linkage
+8       R       Field link and sequence number
+
+580     R       LINKING ENTRY COMPLEXITY NOTE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Linking entry complexity note
+6       NR      Linkage
+8       R       Field link and sequence number
+
+581     R       PUBLICATIONS ABOUT DESCRIBED MATERIALS NOTE
+ind1    b8      Display constant controller
+ind2    blank   Undefined
+a       NR      Publications about described materials note
+z       R       International Standard Book Number
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+583     R       ACTION NOTE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Action
+b       R       Action identification
+c       R       Time/date of action
+d       R       Action interval
+e       R       Contingency for action
+f       R       Authorization
+h       R       Jurisdiction
+i       R       Method of action
+j       R       Site of action
+k       R       Action agent
+l       R       Status
+n       R       Extent
+o       R       Type of unit
+u       R       Uniform Resource Identifier
+x       R       Nonpublic note
+z       R       Public note
+2       NR      Source of term
+3       NR      Materials specified
+5       NR      Institution to which field applies
+6       NR      Linkage
+8       R       Field link and sequence number
+
+584     R       ACCUMULATION AND FREQUENCY OF USE NOTE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       R       Accumulation
+b       R       Frequency of use
+3       NR      Materials specified
+5       NR      Institution to which field applies
+6       NR      Linkage
+8       R       Field link and sequence number
+
+585     R       EXHIBITIONS NOTE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Exhibitions note
+3       NR      Materials specified
+5       NR      Institution to which field applies
+6       NR      Linkage
+8       R       Field link and sequence number
+
+586     R       AWARDS NOTE
+ind1    b8      Display constant controller
+ind2    blank   Undefined
+a       NR      Awards note
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+600     R       SUBJECT ADDED ENTRY--PERSONAL NAME
+ind1    013     Type of personal name entry element
+ind2    01234567        Thesaurus
+a       NR      Personal name
+b       NR      Numeration
+c       R       Titles and other words associated with a name
+d       NR      Dates associated with a name
+e       R       Relator term
+f       NR      Date of a work
+g       NR      Miscellaneous information
+h       NR      Medium
+j       R       Attribution qualifier
+k       R       Form subheading
+l       NR      Language of a work
+m       R       Medium of performance for music
+n       R       Number of part/section of a work
+o       NR      Arranged statement for music
+p       R       Name of part/section of a work
+q       NR      Fuller form of name
+r       NR      Key for music
+s       NR      Version
+t       NR      Title of a work
+u       NR      Affiliation
+v       R       Form subdivision
+x       R       General subdivision
+y       R       Chronological subdivision
+z       R       Geographic subdivision
+2       NR      Source of heading or term
+3       NR      Materials specified
+4       R       Relator code
+6       NR      Linkage
+8       R       Field link and sequence number
+
+610     R       SUBJECT ADDED ENTRY--CORPORATE NAME
+ind1    012     Type of corporate name entry element
+ind2    01234567        Thesaurus
+a       NR      Corporate name or jurisdiction name as entry element
+b       R       Subordinate unit
+c       NR      Location of meeting
+d       R       Date of meeting or treaty signing
+e       R       Relator term
+f       NR      Date of a work
+g       NR      Miscellaneous information
+h       NR      Medium
+k       R       Form subheading
+l       NR      Language of a work
+m       R       Medium of performance for music
+n       R       Number of part/section/meeting
+o       NR      Arranged statement for music
+p       R       Name of part/section of a work
+r       NR      Key for music
+s       NR      Version
+t       NR      Title of a work
+u       NR      Affiliation
+v       R       Form subdivision
+x       R       General subdivision
+y       R       Chronological subdivision
+z       R       Geographic subdivision
+2       NR      Source of heading or term
+3       NR      Materials specified
+4       R       Relator code
+6       NR      Linkage
+8       R       Field link and sequence number
+
+611     R       SUBJECT ADDED ENTRY--MEETING NAME
+ind1    012     Type of meeting name entry element
+ind2    01234567        Thesaurus
+a       NR      Meeting name or jurisdiction name as entry element
+c       NR      Location of meeting
+d       NR      Date of meeting
+e       R       Subordinate unit
+f       NR      Date of a work
+g       NR      Miscellaneous information
+h       NR      Medium
+k       R       Form subheading
+l       NR      Language of a work
+n       R       Number of part/section/meeting
+p       R       Name of part/section of a work
+q       NR      Name of meeting following jurisdiction name entry element
+s       NR      Version
+t       NR      Title of a work
+u       NR      Affiliation
+v       R       Form subdivision
+x       R       General subdivision
+y       R       Chronological subdivision
+z       R       Geographic subdivision
+2       NR      Source of heading or term
+3       NR      Materials specified
+4       R       Relator code
+6       NR      Linkage
+8       R       Field link and sequence number
+
+630     R       SUBJECT ADDED ENTRY--UNIFORM TITLE
+ind1    0-9     Nonfiling characters
+ind2    01234567        Thesaurus
+a       NR      Uniform title
+d       R       Date of treaty signing
+f       NR      Date of a work
+g       NR      Miscellaneous information
+h       NR      Medium
+k       R       Form subheading
+l       NR      Language of a work
+m       R       Medium of performance for music
+n       R       Number of part/section of a work
+o       NR      Arranged statement for music
+p       R       Name of part/section of a work
+r       NR      Key for music
+s       NR      Version
+t       NR      Title of a work
+v       R       Form subdivision
+x       R       General subdivision
+y       R       Chronological subdivision
+z       R       Geographic subdivision
+2       NR      Source of heading or term
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+648     R       SUBJECT ADDED ENTRY--CHRONOLOGICAL TERM
+ind1    blank   Undefined
+ind2    01234567        Thesaurus
+a       NR      Chronological term
+v       R       Form subdivision
+x       R       General subdivision
+y       R       Chronological subdivision
+z       R       Geographic subdivision
+2       NR      Source of heading or term
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+650     R       SUBJECT ADDED ENTRY--TOPICAL TERM
+ind1    b012    Level of subject
+ind2    01234567        Thesaurus
+a       NR      Topical term or geographic name as entry element
+b       NR      Topical term following geographic name as entry element
+c       NR      Location of event
+d       NR      Active dates
+e       NR      Relator term
+v       R       Form subdivision
+x       R       General subdivision
+y       R       Chronological subdivision
+z       R       Geographic subdivision
+2       NR      Source of heading or term
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+651     R       SUBJECT ADDED ENTRY--GEOGRAPHIC NAME
+ind1    blank   Undefined
+ind2    01234567        Thesaurus
+a       NR      Geographic name
+v       R       Form subdivision
+x       R       General subdivision
+y       R       Chronological subdivision
+z       R       Geographic subdivision
+2       NR      Source of heading or term
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+653     R       INDEX TERM--UNCONTROLLED
+ind1    b012    Level of index term
+ind2    blank   Undefined
+a       R       Uncontrolled term
+6       NR      Linkage
+8       R       Field link and sequence number
+
+654     R       SUBJECT ADDED ENTRY--FACETED TOPICAL TERMS
+ind1    b012    Level of subject
+ind2    blank   Undefined
+a       R       Focus term
+b       R       Non-focus term
+c       R       Facet/hierarchy designation
+v       R       Form subdivision
+y       R       Chronological subdivision
+z       R       Geographic subdivision
+2       NR      Source of heading or term
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+655     R       INDEX TERM--GENRE/FORM
+ind1    b0      Type of heading
+ind2    01234567        Thesaurus
+a       NR      Genre/form data or focus term
+b       R       Non-focus term
+c       R       Facet/hierarchy designation
+v       R       Form subdivision
+x       R       General subdivision
+y       R       Chronological subdivision
+z       R       Geographic subdivision
+2       NR      Source of term
+3       NR      Materials specified
+5       NR      Institution to which field applies
+6       NR      Linkage
+8       R       Field link and sequence number
+
+656     R       INDEX TERM--OCCUPATION
+ind1    blank   Undefined
+ind2    7       Source of term
+a       NR      Occupation
+k       NR      Form
+v       R       Form subdivision
+x       R       General subdivision
+y       R       Chronological subdivision
+z       R       Geographic subdivision
+2       NR      Source of term
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+657     R       INDEX TERM--FUNCTION
+ind1    blank   Undefined
+ind2    7       Source of term
+a       NR      Function
+v       R       Form subdivision
+x       R       General subdivision
+y       R       Chronological subdivision
+z       R       Geographic subdivision
+2       NR      Source of term
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+658     R       INDEX TERM--CURRICULUM OBJECTIVE
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Main curriculum objective
+b       R       Subordinate curriculum objective
+c       NR      Curriculum code
+d       NR      Correlation factor
+2       NR      Source of term or code
+6       NR      Linkage
+8       R       Field link and sequence number
+
+700     R       ADDED ENTRY--PERSONAL NAME
+ind1    013     Type of personal name entry element
+ind2    b2      Type of added entry
+a       NR      Personal name
+b       NR      Numeration
+c       R       Titles and other words associated with a name
+d       NR      Dates associated with a name
+e       R       Relator term
+f       NR      Date of a work
+g       NR      Miscellaneous information
+h       NR      Medium
+j       R       Attribution qualifier
+k       R       Form subheading
+l       NR      Language of a work
+m       R       Medium of performance for music
+n       R       Number of part/section of a work
+o       NR      Arranged statement for music
+p       R       Name of part/section of a work
+q       NR      Fuller form of name
+r       NR      Key for music
+s       NR      Version
+t       NR      Title of a work
+u       NR      Affiliation
+x       NR      International Standard Serial Number
+3       NR      Materials specified
+4       R       Relator code
+5       NR      Institution to which field applies
+6       NR      Linkage
+8       R       Field link and sequence number
+
+710     R       ADDED ENTRY--CORPORATE NAME
+ind1    012     Type of corporate name entry element
+ind2    b2      Type of added entry
+a       NR      Corporate name or jurisdiction name as entry element
+b       R       Subordinate unit
+c       NR      Location of meeting
+d       R       Date of meeting or treaty signing
+e       R       Relator term
+f       NR      Date of a work
+g       NR      Miscellaneous information
+h       NR      Medium
+k       R       Form subheading
+l       NR      Language of a work
+m       R       Medium of performance for music
+n       R       Number of part/section/meeting
+o       NR      Arranged statement for music
+p       R       Name of part/section of a work
+r       NR      Key for music
+s       NR      Version
+t       NR      Title of a work
+u       NR      Affiliation
+x       NR      International Standard Serial Number
+3       NR      Materials specified
+4       R       Relator code
+5       NR      Institution to which field applies
+6       NR      Linkage
+8       R       Field link and sequence number
+
+711     R       ADDED ENTRY--MEETING NAME
+ind1    012     Type of meeting name entry element
+ind2    b2      Type of added entry
+a       NR      Meeting name or jurisdiction name as entry element
+c       NR      Location of meeting
+d       NR      Date of meeting
+e       R       Subordinate unit
+f       NR      Date of a work
+g       NR      Miscellaneous information
+h       NR      Medium
+k       R       Form subheading
+l       NR      Language of a work
+n       R       Number of part/section/meeting
+p       R       Name of part/section of a work
+q       NR      Name of meeting following jurisdiction name entry element
+s       NR      Version
+t       NR      Title of a work
+u       NR      Affiliation
+x       NR      International Standard Serial Number
+3       NR      Materials specified
+4       R       Relator code
+5       NR      Institution to which field applies
+6       NR      Linkage
+8       R       Field link and sequence number
+
+720     R       ADDED ENTRY--UNCONTROLLED NAME
+ind1    b12     Type of name
+ind2    blank   Undefined
+a       NR      Name
+e       R       Relator term
+4       R       Relator code
+6       NR      Linkage
+8       R       Field link and sequence number
+
+730     R       ADDED ENTRY--UNIFORM TITLE
+ind1    0-9     Nonfiling characters
+ind2    b2      Type of added entry
+a       NR      Uniform title
+d       R       Date of treaty signing
+f       NR      Date of a work
+g       NR      Miscellaneous information
+h       NR      Medium
+k       R       Form subheading
+l       NR      Language of a work
+m       R       Medium of performance for music
+n       R       Number of part/section of a work
+o       NR      Arranged statement for music
+p       R       Name of part/section of a work
+r       NR      Key for music
+s       NR      Version
+t       NR      Title of a work
+x       NR      International Standard Serial Number
+3       NR      Materials specified
+5       NR      Institution to which field applies
+6       NR      Linkage
+8       R       Field link and sequence number
+
+740     R       ADDED ENTRY--UNCONTROLLED RELATED/ANALYTICAL TITLE
+ind1    0-9     Nonfiling characters
+ind2    b2      Type of added entry
+a       NR      Uncontrolled related/analytical title
+h       NR      Medium
+n       R       Number of part/section of a work
+p       R       Name of part/section of a work
+5       NR      Institution to which field applies
+6       NR      Linkage
+8       R       Field link and sequence number
+
+752     R       ADDED ENTRY--HIERARCHICAL PLACE NAME
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Country
+b       NR      State, province, territory
+c       NR      County, region, islands area
+d       NR      City
+6       NR      Linkage
+8       R       Field link and sequence number
+
+753     R       SYSTEM DETAILS ACCESS TO COMPUTER FILES
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Make and model of machine
+b       NR      Programming language
+c       NR      Operating system
+6       NR      Linkage
+8       R       Field link and sequence number
+
+754     R       ADDED ENTRY--TAXONOMIC IDENTIFICATION
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       R       Taxonomic name
+c       R       Taxonomic category
+d       R       Common or alternative name
+x       R       Non-public note
+z       R       Public note
+2       NR      Source of taxonomic identification
+6       NR      Linkage
+8       R       Field link and sequence number
+
+760     R       MAIN SERIES ENTRY
+ind1    01      Note controller
+ind2    b8      Display constant controller
+a       NR      Main entry heading
+b       NR      Edition
+c       NR      Qualifying information
+d       NR      Place, publisher, and date of publication
+g       R       Relationship information
+h       NR      Physical description
+i       NR      Display text
+m       NR      Material-specific details
+n       R       Note
+o       R       Other item identifier
+s       NR      Uniform title
+t       NR      Title
+w       R       Record control number
+x       NR      International Standard Serial Number
+y       NR      CODEN designation
+6       NR      Linkage
+7       NR      Control subfield
+8       R       Field link and sequence number
+
+762     R       SUBSERIES ENTRY
+ind1    01      Note controller
+ind2    b8      Display constant controller
+a       NR      Main entry heading
+b       NR      Edition
+c       NR      Qualifying information
+d       NR      Place, publisher, and date of publication
+g       R       Relationship information
+h       NR      Physical description
+i       NR      Display text
+m       NR      Material-specific details
+n       R       Note
+o       R       Other item identifier
+s       NR      Uniform title
+t       NR      Title
+w       R       Record control number
+x       NR      International Standard Serial Number
+y       NR      CODEN designation
+6       NR      Linkage
+7       NR      Control subfield
+8       R       Field link and sequence number
+
+765     R       ORIGINAL LANGUAGE ENTRY
+ind1    01      Note controller
+ind2    b8      Display constant controller
+a       NR      Main entry heading
+b       NR      Edition
+c       NR      Qualifying information
+d       NR      Place, publisher, and date of publication
+g       R       Relationship information
+h       NR      Physical description
+i       NR      Display text
+k       R       Series data for related item
+m       NR      Material-specific details
+n       R       Note
+o       R       Other item identifier
+r       R       Report number
+s       NR      Uniform title
+t       NR      Title
+u       NR      Standard Technical Report Number
+w       R       Record control number
+x       NR      International Standard Serial Number
+y       NR      CODEN designation
+z       R       International Standard Book Number
+6       NR      Linkage
+7       NR      Control subfield
+8       R       Field link and sequence number
+
+767     R       TRANSLATION ENTRY
+ind1    01      Note controller
+ind2    b8      Display constant controller
+a       NR      Main entry heading
+b       NR      Edition
+c       NR      Qualifying information
+d       NR      Place, publisher, and date of publication
+g       R       Relationship information
+h       NR      Physical description
+i       NR      Display text
+k       R       Series data for related item
+m       NR      Material-specific details
+n       R       Note
+o       R       Other item identifier
+r       R       Report number
+s       NR      Uniform title
+t       NR      Title
+u       NR      Standard Technical Report Number
+w       R       Record control number
+x       NR      International Standard Serial Number
+y       NR      CODEN designation
+z       R       International Standard Book Number
+6       NR      Linkage
+7       NR      Control subfield
+8       R       Field link and sequence number
+
+770     R       SUPPLEMENT/SPECIAL ISSUE ENTRY
+ind1    01      Note controller
+ind2    b8      Display constant controller
+a       NR      Main entry heading
+b       NR      Edition
+c       NR      Qualifying information
+d       NR      Place, publisher, and date of publication
+g       R       Relationship information
+h       NR      Physical description
+i       NR      Display text
+k       R       Series data for related item
+m       NR      Material-specific details
+n       R       Note
+o       R       Other item identifier
+r       R       Report number
+s       NR      Uniform title
+t       NR      Title
+u       NR      Standard Technical Report Number
+w       R       Record control number
+x       NR      International Standard Serial Number
+y       NR      CODEN designation
+z       R       International Standard Book Number
+6       NR      Linkage
+7       NR      Control subfield
+8       R       Field link and sequence number
+
+772     R       SUPPLEMENT PARENT ENTRY
+ind1    01      Note controller
+ind2    b08     Display constant controller
+a       NR      Main entry heading
+b       NR      Edition
+c       NR      Qualifying information
+d       NR      Place, publisher, and date of publication
+g       R       Relationship information
+h       NR      Physical description
+i       NR      Display text
+k       R       Series data for related item
+m       NR      Material-specific details
+n       R       Note
+o       R       Other item identifier
+r       R       Report number
+s       NR      Uniform title
+t       NR      Title
+u       NR      Standard Technical Report Number
+w       R       Record control number
+x       NR      International Standard Serial Number
+y       NR      CODEN designation
+z       R       International Stan dard Book Number
+6       NR      Linkage
+7       NR      Control subfield
+8       R       Field link and sequence number
+
+773     R       HOST ITEM ENTRY
+ind1    01      Note controller
+ind2    b8      Display constant controller
+a       NR      Main entry heading
+b       NR      Edition
+d       NR      Place, publisher, and date of publication
+g       R       Relationship information
+h       NR      Physical description
+i       NR      Display text
+k       R       Series data for related item
+m       NR      Material-specific details
+n       R       Note
+o       R       Other item identifier
+p       NR      Abbreviated title
+r       R       Report number
+s       NR      Uniform title
+t       NR      Title
+u       NR      Standard Technical Report Number
+w       R       Record control number
+x       NR      International Standard Serial Number
+y       NR      CODEN designation
+z       R       International Standard Book Number
+3       NR      Materials specified
+6       NR      Linkage
+7       NR      Control subfield
+8       R       Field link and sequence number
+
+774     R       CONSTITUENT UNIT ENTRY
+ind1    01      Note controller
+ind2    b8      Display constant controller
+a       NR      Main entry heading
+b       NR      Edition
+c       NR      Qualifying information
+d       NR      Place, publisher, and date of publication
+g       R       Relationship information
+h       NR      Physical description
+i       NR      Display text
+k       R       Series data for related item
+m       NR      Material-specific details
+n       R       Note
+o       R       Other item identifier
+r       R       Report number
+s       NR      Uniform title
+t       NR      Title
+u       NR      Standard Technical Report Number
+w       R       Record control number
+x       NR      International Standard Serial Number
+y       NR      CODEN designation
+z       R       International Standard Book Number
+6       NR      Linkage
+7       NR      Control subfield
+8       R       Field link and sequence number
+
+775     R       OTHER EDITION ENTRY
+ind1    01      Note controller
+ind2    b8012   Display constant controller
+a       NR      Main entry heading
+b       NR      Edition
+c       NR      Qualifying information
+d       NR      Place, publisher, and date of publication
+e       NR      Language code
+f       NR      Country code
+g       R       Relationship information
+h       NR      Physical description
+i       NR      Display text
+k       R       Series data for related item
+m       NR      Material-specific details
+n       R       Note
+o       R       Other item identifier
+r       R       Report number
+s       NR      Uniform title
+t       NR      Title
+u       NR      Standard Technical Report Number
+w       R       Record control number
+x       NR      International Standard Serial Number
+y       NR      CODEN designation
+z       R       International Standard Book Number
+6       NR      Linkage
+7       NR      Control subfield
+8       R       Field link and sequence number
+
+776     R       ADDITIONAL PHYSICAL FORM ENTRY
+ind1    01      Note controller
+ind2    b8      Display constant controller
+a       NR      Main entry heading
+b       NR      Edition
+c       NR      Qualifying information
+d       NR      Place, publisher, and date of publication
+g       R       Relationship information
+h       NR      Physical description
+i       NR      Display text
+k       R       Series data for related item
+m       NR      Material-specific details
+n       R       Note
+o       R       Other item identifier
+r       R       Report number
+s       NR      Uniform title
+t       NR      Title
+u       NR      Standard Technical Report Number
+w       R       Record control number
+x       NR      International Standard Serial Number
+y       NR      CODEN designation
+z       R       International Standard Book Number
+6       NR      Linkage
+7       NR      Control subfield
+8       R       Field link and sequence number
+
+777     R       ISSUED WITH ENTRY
+ind1    01      Note controller
+ind2    b8      Display constant controller
+a       NR      Main entry heading
+b       NR      Edition
+c       NR      Qualifying information
+d       NR      Place, publisher, and date of publication
+g       R       Relationship information
+h       NR      Physical description
+i       NR      Display text
+k       R       Series data for related item
+m       NR      Material-specific details
+n       R       Note
+o       R       Other item identifier
+s       NR      Uniform title
+t       NR      Title
+w       R       Record control number
+x       NR      International Standard Serial Number
+y       NR      CODEN designation
+6       NR      Linkage
+7       NR      Control subfield
+8       R       Field link and sequence number
+
+780     R       PRECEDING ENTRY
+ind1    01      Note controller
+ind2    01234567        Type of relationship
+a       NR      Main entry heading
+b       NR      Edition
+c       NR      Qualifying information
+d       NR      Place, publisher, and date of publication
+g       R       Relationship information
+h       NR      Physical description
+i       NR      Display text
+k       R       Series data for related item
+m       NR      Material-specific details
+n       R       Note
+o       R       Other item identifier
+r       R       Report number
+s       NR      Uniform title
+t       NR      Title
+u       NR      Standard Technical Report Number
+w       R       Record control number
+x       NR      International Standard Serial Number
+y       NR      CODEN designation
+z       R       International Standard Book Number
+6       NR      Linkage
+7       NR      Control subfield
+8       R       Field link and sequence number
+
+785     R       SUCCEEDING ENTRY
+ind1    01      Note controller
+ind2    012345678       Type of relationship
+a       NR      Main entry heading
+b       NR      Edition
+c       NR      Qualifying information
+d       NR      Place, publisher, and date of publication
+g       R       Relationship information
+h       NR      Physical description
+i       NR      Display text
+k       R       Series data for related item
+m       NR      Material-specific details
+n       R       Note
+o       R       Other item identifier
+r       R       Report number
+s       NR      Uniform title
+t       NR      Title
+u       NR      Standa rd Technical Report Number
+w       R       Record control number
+x       NR      International Standard Serial Number
+y       NR      CODEN designation
+z       R       International Standard Book Number
+6       NR      Linkage
+7       NR      Control subfield
+8       R       Field link and sequence number
+
+786     R       DATA SOURCE ENTRY
+ind1    01      Note controller
+ind2    b8      Display constant controller
+a       NR      Main entry heading
+b       NR      Edition
+c       NR      Qualifying information
+d       NR      Place, publisher, and date of publication
+g       R       Relationship information
+h       NR      Physical description
+i       NR      Display text
+j       NR      Period of content
+k       R       Series data for related item
+m       NR      Material-specific details
+n       R       Note
+o       R       Other item identifier
+p       NR      Abbreviated title
+r       R       Report number
+s       NR      Uniform title
+t       NR      Title
+u       NR      Standard Technical Report Number
+v       NR      Source Contribution
+w       R       Record control number
+x       NR      International Standard Serial Number
+y       NR      CODEN designation
+z       R       International Standard Book Number
+6       NR      Linkage
+7       NR      Control subfield
+8       R       Field link and sequence number
+
+787     R       NONSPECIFIC RELATIONSHIP ENTRY
+ind1    01      Note controller
+ind2    b8      Display constant controller
+a       NR      Main entry heading
+b       NR      Edition
+c       NR      Qualifying information
+d       NR      Place, publisher, and date of publication
+g       R       Relationship information
+h       NR      Physical description
+i       NR      Display text
+k       R       Series data for related item
+m       NR      Material-specific details
+n       R       Note
+o       R       Other item identifier
+r       R       Report number
+s       NR      Uniform title
+t       NR      Title
+u       NR      Standard Technical Report Number
+w       R       Record control number
+x       NR      International Standard Serial Number
+y       NR      CODEN designation
+z       R       International Standard Book Number
+6       NR      Linkage
+7       NR      Control subfield
+8       R       Field link and sequence number
+
+800     R       SERIES ADDED ENTRY--PERSONAL NAME
+ind1    013     Type of personal name entry element
+ind2    blank   Undefined
+a       NR      Personal name
+b       NR      Numeration
+c       R       Titles and other words associated with a name
+d       NR      Dates associated with a name
+e       R       Relator term
+f       NR      Date of a work
+g       NR      Miscellaneous information
+h       NR      Medium
+j       R       Attribution qualifier
+k       R       Form subheading
+l       NR      Language of a work
+m       R       Medium of performance for music
+n       R       Number of part/section of a work
+o       NR      Arranged statement for music
+p       R       Name of part/section of a work
+q       NR      Fuller form of name
+r       NR      Key for music
+s       NR      Version
+t       NR      Title of a work
+u       NR      Affiliation
+v       NR      Volume/sequential designation
+4       R       Relator code
+6       NR      Linkage
+8       R       Field link and sequence number
+
+810     R       SERIES ADDED ENTRY--CORPORATE NAME
+ind1    012     Type of corporate name entry element
+ind2    blank   Undefined
+a       NR      Corporate name or jurisdiction name as entry element
+b       R       Subordinate unit
+c       NR      Location of meeting
+d       R       Date of meeting or treaty signing
+e       R       Relator term
+f       NR      Date of a work
+g       NR      Miscellaneous information
+h       NR      Medium
+k       R       Form subheading
+l       NR      Language of a work
+m       R       Medium of performance for music
+n       R       Number of part/section/meeting
+o       NR      Arranged statement for music
+p       R       Name of part/section of a work
+r       NR      Key for music
+s       NR      Version
+t       NR      Title of a work
+u       NR      Affiliation
+v       NR      Volume/sequential designation
+4       R       Relator code
+6       NR      Linkage
+8       R       Field link and sequence number
+
+811     R       SERIES ADDED ENTRY--MEETING NAME
+ind1    012     Type of meeting name entry element
+ind2    blank   Undefined
+a       NR      Meeting name or jurisdiction name as entry element
+c       NR      Location of meeting
+d       NR      Date of meeting
+e       R       Subordinate unit
+f       NR      Date of a work
+g       NR      Miscellaneous information
+h       NR      Medium
+k       R       Form subheading
+l       NR      Language of a work
+n       R       Number of part/section/meeting
+p       R       Name of part/section of a work
+q       NR      Name of meeting following jurisdiction name entry element
+s       NR      Version
+t       NR      Title of a work
+u       NR      Affiliation
+v       NR      Volume/sequential designation
+4       R       Relator code
+6       NR      Linkage
+8       R       Field link and sequence number
+
+830     R       SERIES ADDED ENTRY--UNIFORM TITLE
+ind1    blank   Undefined
+ind2    0-9     Nonfiling characters
+a       NR      Uniform title
+d       R       Date of treaty signing
+f       NR      Date of a work
+g       NR      Miscellaneous information
+h       NR      Medium
+k       R       Form subheading
+l       NR      Language of a work
+m       R       Medium of performance for music
+n       R       Number of part/section of a work
+o       NR      Arranged statement for music
+p       R       Name of part/section of a work
+r       NR      Key for music
+s       NR      Version
+t       NR      Title of a work
+v       NR      Volume/sequential designation
+6       NR      Linkage
+8       R       Field link and sequence number
+
+841     NR      HOLDINGS CODED DATA VALUES
+
+842     NR      TEXTUAL PHYSICAL FORM DESIGNATOR
+
+843     R       REPRODUCTION NOTE
+
+844     NR      NAME OF UNIT
+
+845     R       TERMS GOVERNING USE AND REPRODUCTION NOTE
+
+850     R       HOLDING INSTITUTION
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       R       Holding institution
+8       R       Field link and sequence number
+
+852     R       LOCATION
+ind1    b012345678      Shelving scheme
+ind2    b012    Shelving order
+a       NR      Location
+b       R       Sublocation or collection
+c       R       Shelving location
+e       R       Address
+f       R       Coded location qualifier
+g       R       Non-coded location qualifier
+h       NR      Classification part
+i       R       Item part
+j       NR      Shelving control number
+k       R       Call number prefix
+l       NR      Shelving form of title
+m       R       Call number suffix
+n       NR      Country code
+p       NR      Piece designation
+q       NR      Piece physical condition
+s       R       Copyright article-fee code
+t       NR      Copy number
+x       R       Nonpublic note
+z       R       Public note
+2       NR      Source of classification or shelving scheme
+3       NR      Materials specified
+6       NR      Linkage
+8       NR      Sequence number
+
+853     R       CAPTIONS AND PATTERN--BASIC BIBLIOGRAPHIC UNIT
+
+854     R       CAPTIONS AND PATTERN--SUPPLEMENTARY MATERIAL
+
+855     R       CAPTIONS AND PATTERN--INDEXES
+
+856     R       ELECTRONIC LOCATION AND ACCESS
+ind1    b012347 Access method
+ind2    b0128   Relationship
+a       R       Host name
+b       R       Access number
+c       R       Compression information
+d       R       Path
+f       R       Electronic name
+h       NR      Processor of request
+i       R       Instruction
+j       NR      Bits per second
+k       NR      Password
+l       NR      Logon
+m       R       Contact for access assistance
+n       NR      Name of location of host
+o       NR      Operating system
+p       NR      Port
+q       NR      Electronic format type
+r       NR      Settings
+s       R       File size
+t       R       Terminal emulation
+u       R       Uniform Resource Identifier
+v       R       Hours access method available
+w       R       Record control number
+x       R       Nonpublic note
+y       R       Link text
+z       R       Public note
+2       NR      Access method
+3       NR      Materials specified
+6       NR      Linkage
+8       R       Field link and sequence number
+
+863     R       ENUMERATION AND CHRONOLOGY--BASIC BIBLIOGRAPHIC UNIT
+
+864     R       ENUMERATION AND CHRONOLOGY--SUPPLEMENTARY MATERIAL
+
+865     R       ENUMERATION AND CHRONOLOGY--INDEXES
+
+866     R       TEXTUAL HOLDINGS--BASIC BIBLIOGRAPHIC UNIT
+
+867     R       TEXTUAL HOLDINGS--SUPPLEMENTARY MATERIAL
+
+868     R       TEXTUAL HOLDINGS--INDEXES
+
+876     R       ITEM INFORMATION--BASIC BIBLIOGRAPHIC UNIT
+
+877     R       ITEM INFORMATION--SUPPLEMENTARY MATERIAL
+
+878     R       ITEM INFORMATION--INDEXES
+
+880     R       ALTERNATE GRAPHIC REPRESENTATION
+ind1            Same as associated field
+ind2            Same as associated field
+6       NR      Linkage
+
+886     R       FOREIGN MARC INFORMATION FIELD
+ind1    012     Type of field
+ind2    blank   Undefined
+a       NR      Tag of the foreign MARC field
+b       NR      Content of the foreign MARC field
+2       NR      Source of data
+
+887     R       NON-MARC INFORMATION FIELD
+ind1    blank   Undefined
+ind2    blank   Undefined
+a       NR      Content of non-MARC field
+2       NR      Source of data


Property changes on: packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Lint.pm
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Record.pm
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Record.pm	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Record.pm	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,822 @@
+package MARC::Record;
+
+=head1 NAME
+
+MARC::Record - Perl extension for handling MARC records
+
+=cut
+
+use strict;
+use integer;
+
+use vars qw( $ERROR );
+
+use MARC::Field;
+use Carp qw(croak);
+
+=head1 VERSION 1.38
+
+    $Id: Record.pm,v 1.81 2004/03/16 21:52:58 petdance Exp $
+
+=cut
+
+use vars qw( $VERSION );
+$VERSION = '1.38';
+
+use Exporter;
+use vars qw( @ISA @EXPORTS @EXPORT_OK );
+ at ISA = qw( Exporter );
+ at EXPORTS = qw();
+ at EXPORT_OK = qw( LEADER_LEN );
+
+use vars qw( $DEBUG ); $DEBUG = 0;
+
+use constant LEADER_LEN => 24;
+
+=head1 DESCRIPTION
+
+Module for handling MARC records as objects.  The file-handling stuff is
+in MARC::File::*.
+
+=head1 EXPORT
+
+None.
+
+=head1 ERROR HANDLING
+
+Any errors generated are stored in C<$MARC::Record::ERROR>.
+Warnings are kept with the record and accessible in the C<warnings()> method.
+
+=head1 CONSTRUCTORS
+
+=head2 new()
+
+Base constructor for the class.  It just returns a completely empty record.
+To get real data, you'll need to populate it with fields, or use one of
+the MARC::File::* modules to read from a file.
+
+=cut
+
+sub new {
+    my $class = shift;
+    $class = ref($class) || $class; # Handle cloning
+    my $self = {
+        _leader => ' ' x 24,
+        _fields => [],
+        _warnings => [],
+    };
+    return bless $self, $class;
+} # new()
+
+=head2 new_from_usmarc( $marcblob [, \&filter_func($tagno,$tagdata)] )
+
+This is a wrapper around C<MARC::File::USMARC::decode()> for compatibility with
+older versions of MARC::Record.
+
+The C<wanted_func()> is optional.  See L<MARC::File::USMARC>::decode for details.
+
+=cut
+
+sub new_from_usmarc {
+    my $blob = shift;
+    $blob = shift if (ref($blob) || ($blob eq "MARC::Record"));
+
+    require MARC::File::USMARC;
+
+    return MARC::File::USMARC::decode( $blob, @_ );
+}
+
+=head1 COMMON FIELD RETRIEVAL METHODS
+
+Following are a number of convenience methods for commonly-retrieved
+data fields.  Please note that they each return strings, not MARC::Field
+objects.  They return empty strings if the appropriate field or subfield
+is not found.  This is as opposed to the C<field()>/C<subfield()> methods
+which return C<undef> if something's not found.  My assumption is that
+these methods are used for quick & dirty reports and you don't want to
+mess around with noting if something is undef.
+
+Also note that no punctuation cleanup is done.  If the 245a is
+"Programming Perl / ", then that's what you'll get back, rather than
+"Programming Perl".
+
+=head2 title()
+
+Returns the title from the 245 tag.
+
+=cut
+
+sub title() {
+    my $self = shift;
+
+    my $field = $self->field(245);
+    return $field ? $field->as_string : "";
+}
+
+=head2 title_proper()
+
+Returns the title proper from the 245 tag, subfields a, n and p.
+
+=cut
+
+sub title_proper() {
+    my $self = shift;
+
+    my $field = $self->field(245);
+
+    if ( $field ) {
+        return $field->as_string('anp');
+    } else {
+        return "";
+    }
+}
+
+=head2 author()
+
+Returns the author from the 100, 110 or 111 tag.
+
+=cut
+
+sub author() {
+    my $self = shift;
+
+    my $field = $self->field('100|110|111');
+    return $field ? $field->as_string : "";
+}
+
+=head2 edition()
+
+Returns the edition from the 250 tag, subfield a.
+
+=cut
+
+sub edition() {
+    my $self = shift;
+
+    my $str = $self->subfield(250,'a');
+    return defined $str ? $str : "";
+}
+
+=head2 publication_date()
+
+Returns the publication date from the 260 tag, subfield c.
+
+=cut
+
+sub publication_date() {
+    my $self = shift;
+
+    my $str = $self->subfield(260,'c');
+    return defined $str ? $str : "";
+}
+
+=head1 FIELD & SUBFIELD ACCESS METHODS
+
+=head2 fields()
+
+Returns a list of all the fields in the record. The list contains
+a MARC::Field object for each field in the record.
+
+=cut
+
+sub fields() {
+    my $self = shift;
+    return @{$self->{_fields}};
+}
+
+=head2 field( I<tagspec(s)> )
+
+Returns a list of tags that match the field specifier, or in scalar
+context, just the first matching tag.
+
+The field specifier can be a simple number (i.e. "245"), or use the "."
+notation of wildcarding (i.e. subject tags are "6..").
+
+=cut
+
+my %field_regex;
+
+sub field {
+    my $self = shift;
+    my @specs = @_;
+
+    my @list = ();
+    for my $tag ( @specs ) {
+        my $regex = $field_regex{ $tag };
+
+        # Compile & stash it if necessary
+        if ( not defined $regex ) {
+            $regex = qr/^$tag$/;
+            $field_regex{ $tag } = $regex;
+        } # not defined
+
+        for my $maybe ( $self->fields ) {
+            if ( $maybe->tag =~ $regex ) {
+                return $maybe unless wantarray;
+
+                push( @list, $maybe );
+            } # if
+        } # for $maybe
+    } # for $tag
+
+    return @list;
+}
+
+=head2 subfield( $tag, $subfield )
+
+Shortcut method for getting just a subfield for a tag.  These are equivalent:
+
+  my $title = $marc->field('245')->subfield("a");
+  my $title = $marc->subfield('245',"a");
+
+If either the field or subfield can't be found, C<undef> is returned.
+
+=cut
+
+sub subfield {
+    my $self = shift;
+    my $tag = shift;
+    my $subfield = shift;
+
+    my $field = $self->field($tag) or return;
+    return $field->subfield($subfield);
+} # subfield()
+
+=for internal
+
+=cut
+
+sub _all_parms_are_fields {
+    for ( @_ ) {
+        return 0 unless ref($_) eq 'MARC::Field';
+    }
+    return 1;
+}
+
+=head2 append_fields( @fields )
+
+Appends the field specified by C<$field> to the end of the record.
+C<@fields> need to be MARC::Field objects.
+
+    my $field = MARC::Field->new('590','','','a' => 'My local note.');
+    $record->append_fields($field);
+
+Returns the number of fields appended.
+
+=cut
+
+sub append_fields {
+    my $self = shift;
+
+    _all_parms_are_fields(@_) or croak('Arguments must be MARC::Field objects');
+
+    push(@{ $self->{_fields} }, @_);
+    return scalar @_;
+}
+
+=head2 insert_fields_before( $before_field, @new_fields )
+
+Inserts the field specified by C<$new_field> before the field C<$before_field>.
+Returns the number of fields inserted, or undef on failures.
+Both C<$before_field> and all C<@new_fields> need to be MARC::Field objects.
+If they are not an exception will be thrown.
+
+    my $before_field = $record->field('260');
+    my $new_field = MARC::Field->new('250','','','a' => '2nd ed.');
+    $record->insert_fields_before($before_field,$new_field);
+
+=cut
+
+sub insert_fields_before {
+    my $self = shift;
+
+    _all_parms_are_fields(@_)
+        or croak('All arguments must be MARC::Field objects');
+
+    my ($before, at new) = @_;
+
+    ## find position of $before
+    my $fields = $self->{_fields};
+    my $pos = 0;
+    foreach my $f (@$fields) {
+        last if ($f == $before);
+        $pos++;
+    }
+
+    ## insert before $before
+    if ($pos >= @$fields) {
+        $self->_warn("Couldn't find field to insert before");
+        return;
+    }
+    splice(@$fields,$pos,0, at new);
+    return scalar @new;
+
+}
+
+=head2 insert_fields_after( $after_field, @new_fields )
+
+Identical to C<insert_fields_before()>, but fields are added after
+C<$after_field>. Remember, C<$after_field> and any new fields must be
+valid MARC::Field objects or else an exception will be thrown.
+
+=cut
+
+sub insert_fields_after {
+    my $self = shift;
+
+    _all_parms_are_fields(@_) or croak('All arguments must be MARC::Field objects');
+    my ($after, at new) = @_;
+
+    ## find position of $after
+    my $fields = $self->{_fields};
+    my $pos = 0;
+    foreach my $f (@$fields) {
+        last if ($f == $after);
+        $pos++;
+    }
+
+    ## insert after $after
+    if ($pos+1 >= @$fields) {
+        $self->_warn("Couldn't find field to insert after");
+        return;
+    }
+    splice(@$fields,$pos+1,0, at new);
+    return scalar @new;
+}
+
+=head2 insert_fields_ordered( @new_fields )
+
+Will insert fields in strictly numerical order. So a 008 will be filed
+after a 001 field. See C<insert_grouped_field()> for an additional ordering.
+
+=cut
+
+sub insert_fields_ordered {
+    my ( $self, @new ) = @_;
+
+    _all_parms_are_fields(@new)
+        or croak('All arguments must be MARC::Field objects');
+
+    ## go through each new field
+    NEW_FIELD: foreach my $newField ( @new ) {
+
+        ## find location before which it should be inserted
+        EXISTING_FIELD: foreach my $field ( @{ $self->{_fields} } ) {
+            if ( $field->tag() >= $newField->tag() ) {
+                $self->insert_fields_before( $field, $newField );
+                next NEW_FIELD;
+            }
+        }
+
+        ## if we fell through then this new field is higher than
+        ## all the existing fields, so we append.
+        $self->append_fields( $newField );
+
+    }
+    return( scalar( @new ) );
+}
+
+=head2 insert_grouped_field( $field )
+
+Will insert the specified MARC::Field object into the record in grouped
+order and return true (1) on success, and false (undef) on failure.
+
+    my $field = MARC::Field->new( '510', 'Indexed by Google.' );
+    $record->insert_grouped_field( $field );
+
+For example, if a '650' field is inserted with C<insert_grouped_field()>
+it will be inserted at the end of the 6XX group of tags. After discussion
+most people wanted the ability to add a new field to the end of the
+hundred group where it belonged. The reason is that according to the MARC
+format, fields within a record are supposed to be grouped by block
+(hundred groups). This means that fields may not necessarily be in tag
+order.
+
+=cut
+
+sub insert_grouped_field {
+    my ($self,$new) = @_;
+    _all_parms_are_fields($new) or croak('Argument must be MARC::Field object');
+
+    ## try to find the end of the field group and insert it there
+    my $limit = int($new->tag() / 100);
+    my $found = 0;
+    foreach my $field ($self->fields()) {
+        if ( int($field->tag() / 100) > $limit ) {
+            $self->insert_fields_before($field,$new);
+            $found = 1;
+            last;
+        }
+    }
+
+    ## if we couldn't find the end of the group, then we must not have
+    ## any tags this high yet, so just append it
+    if (!$found) {
+        $self->append_fields($new);
+    }
+
+    return(1);
+
+}
+
+
+=head2 delete_field( $field )
+
+Deletes a field from the record.
+
+The field must have been retrieved from the record using the
+C<field()> method.  For example, to delete a 526 tag if it exists:
+
+    my $tag526 = $marc->field( "526" );
+    if ( $tag526 ) {
+        $marc->delete_field( $tag526 );
+    }
+
+C<delete_field()> returns the number of fields that were deleted.
+This shouldn't be 0 unless you didn't get the tag properly.
+
+=cut
+
+sub delete_field {
+    my $self = shift;
+    my $deleter = shift;
+    my $list = $self->{_fields};
+
+    my $old_count = @$list;
+    @$list = grep { $_ != $deleter } @$list;
+    return $old_count - @$list;
+}
+
+=head2 as_usmarc()
+
+This is a wrapper around C<MARC::File::USMARC::encode()> for compatibility with
+older versions of MARC::Record.
+
+=cut
+
+sub as_usmarc() {
+    my $self = shift;
+
+    require MARC::File::USMARC;
+
+    return MARC::File::USMARC::encode( $self );
+}
+
+=head2 as_formatted()
+
+Returns a pretty string for printing in a MARC dump.
+
+=cut
+
+sub as_formatted() {
+    my $self = shift;
+
+    my @lines = ( "LDR " . ($self->{_leader} || "") );
+    for my $field ( @{$self->{_fields}} ) {
+            push( @lines, $field->as_formatted() );
+    }
+
+    return join( "\n", @lines );
+} # as_formatted
+
+
+=head2 leader()
+
+Returns the leader for the record.  Sets the leader if I<text> is defined.
+No error checking is done on the validity of the leader.
+
+=cut
+
+sub leader {
+    my $self = shift;
+    my $text = shift;
+
+    if ( defined $text ) {
+        (length($text) eq 24)
+            or $self->_warn( "Leader must be 24 bytes long" );
+        $self->{_leader} = $text;
+    } # set the leader
+
+    return $self->{_leader};
+} # leader()
+
+=head2 set_leader_lengths( $reclen, $baseaddr )
+
+Internal function for updating the leader's length and base address.
+
+=cut
+
+sub set_leader_lengths {
+    my $self = shift;
+    my $reclen = shift;
+    my $baseaddr = shift;
+    substr($self->{_leader},0,5)  = sprintf("%05d",$reclen);
+    substr($self->{_leader},12,5) = sprintf("%05d",$baseaddr);
+    # MARC21 defaults: http://www.loc.gov/marc/bibliographic/ecbdldrd.html
+    substr($self->{_leader},10,2) = '22';
+    substr($self->{_leader},20,4) = '4500';
+}
+
+=head2 clone()
+
+The C<clone()> method makes a copy of an existing MARC record and returns
+the new version.  Note that you cannot just say:
+
+    my $newmarc = $oldmarc;
+
+This just makes a copy of the reference, not a new object.  You must use
+the C<clone()> method like so:
+
+    my $newmarc = $oldmarc->clone;
+
+You can also specify field specs to filter down only a
+certain subset of fields.  For instance, if you only wanted the
+title and ISBN tags from a record, you could do this:
+
+    my $small_marc = $marc->clone( 245, '020' );
+
+The order of the fields is preserved as it was in the original record.
+
+=cut
+
+sub clone {
+    my $self = shift;
+    my @keeper_tags = @_;
+
+    my $clone = $self->new();
+    $clone->{_leader} = $self->{_leader};
+
+    my $filtered = @keeper_tags ? [$self->field( @keeper_tags )] : undef;
+
+    for my $field ( $self->fields() ) {
+        if ( !$filtered || (grep {$field eq $_} @$filtered ) ) {
+            $clone->add_fields( $field->clone );
+        }
+    }
+
+    # XXX FIX THIS $clone->update_leader();
+
+    return $clone;
+}
+
+=head2 warnings()
+
+Returns the warnings (as a list) that were created when the record was read.
+These are things like "Invalid indicators converted to blanks".
+
+    my @warnings = $record->warnings();
+
+The warnings are items that you might be interested in, or might
+not.  It depends on how stringently you're checking data.  If
+you're doing some grunt data analysis, you probably don't care.
+
+A side effect of calling warnings() is that the warning buffer will
+be cleared.
+
+=cut
+
+sub warnings() {
+    my $self = shift;
+    my @warnings = @{$self->{_warnings}};
+    $self->{_warnings} = [];
+    return @warnings;
+}
+
+=head2 add_fields()
+
+C<add_fields()> is now deprecated, and users are encouraged to use
+C<append_fields()>, C<insert_fields_after()>, and C<insert_fields_before()>
+since they do what you want probably. It is still here though, for backwards
+compatability.
+
+C<add_fields()> adds MARC::Field objects to the end of the list.  Returns the
+number of fields added, or C<undef> if there was an error.
+
+There are three ways of calling C<add_fields()> to add data to the record.
+
+=over 4
+
+=item 1 Create a MARC::Field object and add it
+
+  my $author = MARC::Field->new(
+                100, "1", " ", a => "Arnosky, Jim."
+                );
+  $marc->add_fields( $author );
+
+=item 2 Add the data fields directly, and let C<add_fields()> take care of the objectifying.
+
+  $marc->add_fields(
+        245, "1", "0",
+                a => "Raccoons and ripe corn /",
+                c => "Jim Arnosky.",
+                );
+
+=item 3 Same as #2 above, but pass multiple fields of data in anonymous lists
+
+  $marc->add_fields(
+        [ 250, " ", " ", a => "1st ed." ],
+        [ 650, "1", " ", a => "Raccoons." ],
+        );
+
+=back
+
+=cut
+
+sub add_fields {
+    my $self = shift;
+
+    my $nfields = 0;
+    my $fields = $self->{_fields};
+
+    while ( my $parm = shift ) {
+        # User handed us a list of data (most common possibility)
+        if ( ref($parm) eq "" ) {
+            my $field = MARC::Field->new( $parm, @_ )
+                    or return _gripe( $MARC::Field::ERROR );
+            push( @$fields, $field );
+            ++$nfields;
+            last; # Bail out, we're done eating parms
+
+        # User handed us an object.
+        } elsif ( ref($parm) eq "MARC::Field" ) {
+            push( @$fields, $parm );
+            ++$nfields;
+
+        # User handed us an anonymous list of parms
+        } elsif ( ref($parm) eq "ARRAY" ) {
+            my $field = MARC::Field->new(@$parm)
+                or return _gripe( $MARC::Field::ERROR );
+            push( @$fields, $field );
+            ++$nfields;
+
+        } else {
+            croak( "Unknown parm of type", ref($parm), " passed to add_fields()" );
+        } # if
+
+    } # while
+
+    return $nfields;
+}
+
+# NOTE: _warn is an object method
+sub _warn {
+    my $self = shift;
+    push( @{$self->{_warnings}}, join( "", @_ ) );
+    return( $self );
+}
+
+
+# NOTE: _gripe is NOT an object method
+sub _gripe {
+    $ERROR = join( "", @_ );
+
+    warn $ERROR;
+
+    return;
+}
+
+
+1;
+
+__END__
+
+=head1 DESIGN NOTES
+
+A brief discussion of why MARC::Record is done the way it is:
+
+=over 4
+
+=item * It's built for quick prototyping
+
+One of the areas Perl excels is in allowing the programmer to
+create easy solutions quickly.  MARC::Record is designed along
+those same lines.  You want a program to dump all the 6XX
+tags in a file?  MARC::Record is your friend.
+
+=item * It's built for extensibility
+
+Currently, I'm using MARC::Record for analyzing bibliographic
+data, but who knows what might happen in the future?  MARC::Record
+needs to be just as adept at authority data, too.
+
+=item * It's designed around accessor methods
+
+I use method calls everywhere, and I expect calling programs to do
+the same, rather than accessing internal data directly.  If you
+access an object's hash fields on your own, future releases may
+break your code.
+
+=item * It's not built for speed
+
+One of the tradeoffs in using accessor methods is some overhead
+in the method calls.  Is this slow?  I don't know, I haven't measured.
+I would suggest that if you're a cycle junkie that you use
+Benchmark.pm to check to see where your bottlenecks are, and then
+decide if MARC::Record is for you.
+
+=back
+
+=head1 RELATED MODULES
+
+L<MARC::Record>, L<MARC::Lint>
+
+=head1 SEE ALSO
+
+=over 4
+
+=item * perl4lib (L<http://www.rice.edu/perl4lib/>)
+
+A mailing list devoted to the use of Perl in libraries.
+
+=item * Library Of Congress MARC pages (L<http://www.loc.gov/marc/>)
+
+The definitive source for all things MARC.
+
+
+=item * I<Understanding MARC Bibliographic> (L<http://lcweb.loc.gov/marc/umb/>)
+
+Online version of the free booklet.  An excellent overview of the MARC format.  Essential.
+
+
+=item * Tag Of The Month (L<http://www.tagofthemonth.com/>)
+
+Follett Software Company's
+(L<http://www.fsc.follett.com/>) monthly discussion of various MARC tags.
+
+=back
+
+=head1 TODO
+
+=over 4
+
+=item * Incorporate MARC.pm in the distribution.
+
+Combine MARC.pm and MARC::* into one distribution.
+
+=item * Podify MARC.pm
+
+=item * Allow regexes across the entire tag
+
+Imagine something like this:
+
+  my @sears_headings = $marc->tag_grep( /Sears/ );
+
+(from Mike O'Regan)
+
+=item * Insert a field in an arbitrary place in the record
+
+=item * Allow deleting a field
+
+  for my $field ( $record->field( "856" ) ) {
+        $record->delete_field( $field ) unless useful($field);
+        } # for
+
+(from Anne Highsmith hismith at tamu.edu)
+
+
+=item * Modifying an existing field
+
+=back
+
+=head1 BUGS, WISHES AND CORRESPONDENCE
+
+Please feel free to email me at C<< <andy at petdance.com> >>.  I'm glad
+to help as best I can, and I'm always interested in bugs, suggestions
+and patches.
+
+An excellent place to look for information, and get quick help, is from
+the perl4lib mailing list.  See L<http://perl4lib.perl.org> for more
+information about this list, and other helpful MARC information.
+
+The MARC::Record development team uses the RT bug tracking system at
+L<http://rt.cpan.org>.  If your email is about a bug or suggestion,
+please report it through the RT system.  This is a huge help for the
+team, and you'll be notified of progress as things get fixed or updated.
+If you prefer not to use the website, you can send your bug to C<<
+<bug-MARC-Record at rt.cpan.org> >>
+
+=head1 IDEAS
+
+Ideas are things that have been considered, but nobody's actually asked for.
+
+=over 4
+
+=item * Create multiple output formats.
+
+These could be ASCII, XML, or MarcMaker.
+
+=back
+
+=head1 LICENSE
+
+This code may be distributed under the same terms as Perl itself.
+
+Please note that these modules are not products of or supported by the
+employers of the various contributors to the code.
+
+=head1 AUTHOR
+
+Andy Lester, C<< <andy at petdance.com> >>
+
+=cut
+


Property changes on: packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Record.pm
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/t/00.load.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/00.load.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/00.load.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,17 @@
+# $Id: 00.load.t,v 1.5 2004/03/09 23:25:18 petdance Exp $
+
+use strict;
+
+use Test::More tests=>7;
+
+BEGIN {
+    use_ok( 'MARC::Record' );
+    use_ok( 'MARC::Batch' );
+    use_ok( 'MARC::Lint' );
+    use_ok( 'MARC::Field' );
+    use_ok( 'MARC::File' );
+    use_ok( 'MARC::File::MicroLIF' );
+    use_ok( 'MARC::File::USMARC' );
+}
+
+diag( "Testing MARC::Record $MARC::Record::VERSION" );


Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/00.load.t
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/t/01.version.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/01.version.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/01.version.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,20 @@
+# $Id: 01.version.t,v 1.1 2003/04/23 02:57:02 petdance Exp $
+
+use strict;
+
+use Test::More tests=>2;
+
+BEGIN {
+    use_ok( 'MARC::Record' );
+}
+
+my $ver = $MARC::Record::VERSION;
+
+open( FH, $INC{'MARC/Record.pm'} ) or die $!;
+while ( <FH> ) {
+    chomp;
+    pass(), exit if $_ eq "=head1 VERSION $ver";
+}
+fail( "Never found the version line" );
+
+


Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/01.version.t
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/t/10.camel.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/10.camel.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/10.camel.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,134 @@
+# $Id: 10.camel.t,v 1.16 2003/04/23 03:19:34 petdance Exp $
+# Test creating a MARC record for the Camel book
+#
+# Bugs, comments, suggestions welcome: marc at petdance.com
+
+use strict;
+
+use Test::More tests => 30;
+
+BEGIN {
+    use_ok( 'MARC::Record' );
+    use_ok( 'MARC::File::USMARC' );
+}
+
+# Test 1: Testing as_usmarc()
+my $marc = MARC::Record->new();
+isa_ok( $marc, 'MARC::Record', 'MARC record' );
+
+$marc->leader("00000nam  22?????8a 4500"); # The ????? represents meaningless digits at this point
+my $nfields = $marc->add_fields(
+	["001","fol05865967"],
+	["003","IMchF"],
+	["010", "","", 
+		a => "   00055799",
+		],
+	[100, "1","",
+		a => "Wall, Larry."
+		],
+	[245, "1","0",
+		a => "Programming Perl / ",
+		c => "Larry Wall, Tom Christiansen & Jon Orwant.",
+		],
+	[250, "", "",
+		a => "3rd ed.",
+		],
+	[260, "", "",
+		a => "Cambridge, Mass. : ",
+		b => "O'Reilly, ",
+		c => "2000.",
+		],
+	[650, " ","0",
+		a => "Perl (Computer program language)",
+		],
+	[700, "1"," ",
+		a => "Christiansen, Tom.",
+		],
+	[700, "1"," ",
+		a => "Orwant, Jon.",
+		],
+	);
+
+is( $nfields, 10,	'Expected 10 fields' );
+
+my $expected = "00397nam  22001458a 4500001001200000003000600012010001600018100001700034245006800051250001200119260004300131650003700174700002300211700001700234\x1Efol05865967\x1EIMchF\x1E  \x1Fa   00055799\x1E1 \x1FaWall, Larry.\x1E10\x1FaProgramming Perl / \x1FcLarry Wall, Tom Christiansen & Jon Orwant.\x1E  \x1Fa3rd ed.\x1E  \x1FaCambridge, Mass. : \x1FbO'Reilly, \x1Fc2000.\x1E 0\x1FaPerl (Computer program language)\x1E1 \x1FaChristiansen, Tom.\x1E1 \x1FaOrwant, Jon.\x1E\x1D";
+
+is( MARC::File::USMARC->encode( $marc ), $expected,  'encode()' );
+
+is( $marc->as_usmarc(), $expected,  'as_usmarc()' );
+
+my $marc_from_blob = MARC::Record->new_from_usmarc( $expected );
+isa_ok( $marc_from_blob, 'MARC::Record', 'MARC record imported from a blob' );
+is( $marc->as_usmarc(), $expected,  'MARC from blob encodes correctly' ); 
+
+# Test 2: as_string()
+$expected = join( "", <DATA> );
+my $generated = $marc->as_formatted;
+chomp $expected;
+chomp $generated;
+ok( $generated eq $expected,	'as_formatted()' );
+
+
+# Test 3: multiple fields by number
+TEST3: {
+    my @fields = $marc->field("700");
+    is( scalar @fields, 2, 'Multiple 700 tags' );
+
+    my $field = $fields[0];
+    isa_ok( $field, "MARC::Field" );
+    is( $field->subfield("a"), 'Christiansen, Tom.', '  Tom Christiansen' );
+
+    $field = $fields[1];
+    isa_ok( $field, "MARC::Field" );
+    is( $field->subfield("a"), 'Orwant, Jon.', '  Jon Orwant' );
+}
+
+
+# Test 4: multiple fields by the ".." notation
+TEST4: {
+    my @fields = $marc->field("7..");
+    is( scalar @fields, 2, 'Multiple 7.. tags' );
+
+    my $field = $fields[0];
+    isa_ok( $field, "MARC::Field" );
+    is( $field->subfield("a"), 'Christiansen, Tom.', '  Tom Christiansen' );
+
+    $field = $fields[1];
+    isa_ok( $field, "MARC::Field" );
+    is( $field->subfield("a"), 'Orwant, Jon.', '  Jon Orwant' );
+}
+
+# Test 5: field/subfield
+is( $marc->subfield( 100, "a" ), "Wall, Larry.", 'Field/subfield lookup' );
+
+# Test 6: Reading from disk
+
+my $file = MARC::File::USMARC->in( "t/camel.usmarc" );
+isa_ok( $file, 'MARC::File', "Opened input file" );
+
+my $diskmarc;
+for my $n ( 1..8 ) {
+	$diskmarc = $file->next();
+	isa_ok( $diskmarc, 'MARC::Record', "  Record #$n" );
+}
+	
+if ( $diskmarc ) {
+	is( $diskmarc->subfield(245,"c"), $marc->subfield(245,"c"), "Disk MARC matches built MARC" );
+}
+$file->close;
+
+__END__
+LDR 00397nam  22001458a 4500
+001     fol05865967
+003     IMchF
+010    _a   00055799
+100 1  _aWall, Larry.
+245 10 _aProgramming Perl / 
+       _cLarry Wall, Tom Christiansen & Jon Orwant.
+250    _a3rd ed.
+260    _aCambridge, Mass. : 
+       _bO'Reilly, 
+       _c2000.
+650  0 _aPerl (Computer program language)
+700 1  _aChristiansen, Tom.
+700 1  _aOrwant, Jon.


Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/10.camel.t
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/t/11.astring.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/11.astring.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/11.astring.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,26 @@
+use Test::More ( tests => 5 );
+
+use strict;
+
+BEGIN {
+    use_ok( 'MARC::Batch' );
+}
+
+my $b = MARC::Batch->new( 'USMARC', 't/camel.usmarc' );
+isa_ok( $b, 'MARC::Batch' );
+
+my $r = $b->next();
+isa_ok( $r, 'MARC::Record' );
+
+my $f245 = $r->field( '245' );
+is( 
+    $f245->as_string( 'a' ), 
+    'ActivePerl with ASP and ADO /',
+    'as_string() with one subfield'
+);
+is( 
+    $f245->as_string( 'ac' ), 
+    'ActivePerl with ASP and ADO / Tobias Martinsson.',
+    'as_string() with two subfields'
+);
+


Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/11.astring.t
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/t/12.ldr.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/12.ldr.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/12.ldr.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,25 @@
+#!/usr/bin/perl
+
+# test to make sure leader is being populated properly
+
+use strict;
+use Test::More tests => 7;
+
+use_ok( 'MARC::Record' );
+
+my $r = MARC::Record->new();
+isa_ok( $r, 'MARC::Record' );
+$r->append_fields( 
+    MARC::Field->new( 
+	245, 0, 0, a => 'Curious George battles the MARC leader'
+    )
+);
+
+my $marc = $r->as_usmarc();
+like( substr( $marc,0, 5 ), qr/^\d+$/, 'leader length' );
+is( substr( $marc, 10, 1 ), '2', 'indicator count' );
+is( substr( $marc, 11, 1 ), '2', 'subfield code count' );
+like( substr( $marc, 12, 5 ), qr/^\d+$/, 'base address' );
+is( substr( $marc, 20, 4 ), '4500', 'entry map' );
+
+

Added: packages/libmarc-record-perl/branches/upstream/current/t/20.clone.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/20.clone.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/20.clone.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,27 @@
+# $Id: 20.clone.t,v 1.7 2003/02/25 20:41:58 petdance Exp $
+# Test creating a MARC record for the Camel book
+#
+# Bugs, comments, suggestions welcome: marc at petdance.com
+
+use integer;
+use strict;
+
+use Test::More tests=>6;
+
+BEGIN {
+    use_ok( 'MARC::File::USMARC' );
+}
+
+my $file = MARC::File::USMARC->in( 't/camel.usmarc' );
+isa_ok( $file, 'MARC::File::USMARC', 'USMARC input file object' );
+my $marc = $file->next();
+isa_ok( $marc, 'MARC::Record', 'Read from file' );
+$file->close;
+
+my $clone = $marc->clone;
+isa_ok( $clone, 'MARC::Record', 'Cloned record' );
+
+ok( $marc != $clone,		'Clone and original are different' );
+
+ok( $marc->as_formatted eq $clone->as_formatted,
+				'Clone and original match content' );


Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/20.clone.t
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/t/50.batch.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/50.batch.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/50.batch.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,48 @@
+# $Id: 50.batch.t,v 1.10 2003/04/23 03:10:50 petdance Exp $
+
+use strict;
+use integer;
+
+use Test::More tests=>268;
+
+BEGIN {
+    use_ok( 'MARC::Batch' );
+}
+
+
+
+# Test the USMARC stuff
+USMARC: {
+    my $batch = new MARC::Batch( 'MARC::File::USMARC', 't/camel.usmarc' );
+    isa_ok( $batch, 'MARC::Batch', 'MARC batch' );
+
+    my $n = 0;
+    while ( my $marc = $batch->next() ) {
+	isa_ok( $marc, 'MARC::Record' );
+
+	my $f245 = $marc->field( '245' );
+	isa_ok( $f245, 'MARC::Field' );
+	++$n;
+    }
+    is( $n, 10, 'Got 10 USMARC records' );
+}
+
+# Test MicroLIF batch
+
+MicroLIF: {
+    my @files = <t/sample*.lif>;
+    is( scalar @files, 3, 'Only have 3 sample*.lif files' );
+
+    my $batch = new MARC::Batch( 'MicroLIF', @files );
+    isa_ok( $batch, 'MARC::Batch', 'MicroLIF batch' );
+
+    my $n = 0;
+    while ( my $marc = $batch->next() ) {
+	isa_ok( $marc, 'MARC::Record' );
+
+	my $f245 = $marc->field( '245' );
+	isa_ok( $f245, 'MARC::Field' );
+	++$n;
+    }
+    is( $n, 121, 'Got 120 LIF records' );
+}


Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/50.batch.t
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/t/60.insert.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/60.insert.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/60.insert.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,167 @@
+# $Id: 60.insert.t,v 1.8 2003/02/26 05:30:45 petdance Exp $
+
+use strict;
+use integer;
+
+use Test::More tests=>16;
+
+BEGIN {
+    use_ok( 'MARC::Batch' );
+    use_ok( 'MARC::Field' );
+}
+
+my $batch = new MARC::Batch( 'MARC::File::USMARC', 't/camel.usmarc' );
+isa_ok( $batch, 'MARC::Batch', 'Batch object creation' );
+
+my $record = $batch->next();
+isa_ok( $record, 'MARC::Record', 'Record object creation' );
+
+my $f650 = $record->field('650');
+isa_ok( $f650, 'MARC::Field', 'Field retrieval' );
+
+my $new = MARC::Field->new('650','','0','a','World Wide Web.');
+isa_ok( $new, 'MARC::Field', 'Field creation' );
+
+my $newagain = MARC::Field->new('650','','0','a','Hockey etiquette.');
+isa_ok( $newagain, 'MARC::Field', 'Field creation' );
+
+## test append_fields()
+
+my $nappended = $record->append_fields($new);
+is( $nappended, 1, "Added one field" );
+
+my $expected = 
+<<MARC_DATA;
+LDR 00755cam  22002414a 4500
+001     fol05731351 
+003     IMchF
+005     20000613133448.0
+008     000107s2000    nyua          001 0 eng  
+010    _a   00020737 
+020    _a0471383147 (paper/cd-rom : alk. paper)
+040    _aDLC
+       _cDLC
+       _dDLC
+042    _apcc
+050 00 _aQA76.73.P22
+       _bM33 2000
+082 00 _a005.13/3
+       _221
+100 1  _aMartinsson, Tobias,
+       _d1976-
+245 10 _aActivePerl with ASP and ADO /
+       _cTobias Martinsson.
+260    _aNew York :
+       _bJohn Wiley & Sons,
+       _c2000.
+300    _axxi, 289 p. :
+       _bill. ;
+       _c23 cm. +
+       _e1 computer  laser disc (4 3/4 in.)
+500    _a"Wiley Computer Publishing."
+650  0 _aPerl (Computer program language)
+630 00 _aActive server pages.
+630 00 _aActiveX.
+650  0 _aWorld Wide Web.
+MARC_DATA
+chomp($expected);
+
+is($record->as_formatted, $expected, "append_fields");
+my $ndeleted = $record->delete_field($new);
+is( $ndeleted, 1, "Deleted one field" );
+
+## test insert_fields_after
+
+my $nadds = $record->insert_fields_after($f650,$new,$newagain);
+is( $nadds, 2, 'Added 2 fields' );
+
+$expected = 
+<<MARC_DATA;
+LDR 00755cam  22002414a 4500
+001     fol05731351 
+003     IMchF
+005     20000613133448.0
+008     000107s2000    nyua          001 0 eng  
+010    _a   00020737 
+020    _a0471383147 (paper/cd-rom : alk. paper)
+040    _aDLC
+       _cDLC
+       _dDLC
+042    _apcc
+050 00 _aQA76.73.P22
+       _bM33 2000
+082 00 _a005.13/3
+       _221
+100 1  _aMartinsson, Tobias,
+       _d1976-
+245 10 _aActivePerl with ASP and ADO /
+       _cTobias Martinsson.
+260    _aNew York :
+       _bJohn Wiley & Sons,
+       _c2000.
+300    _axxi, 289 p. :
+       _bill. ;
+       _c23 cm. +
+       _e1 computer  laser disc (4 3/4 in.)
+500    _a"Wiley Computer Publishing."
+650  0 _aPerl (Computer program language)
+650  0 _aWorld Wide Web.
+650  0 _aHockey etiquette.
+630 00 _aActive server pages.
+630 00 _aActiveX.
+MARC_DATA
+chomp($expected);
+
+is($record->as_formatted,$expected,'insert_fields_after');
+my $n = $record->delete_field($new);
+is( $n, 1 );
+
+$n = $record->delete_field($newagain);
+is( $n, 1 );
+
+
+## test insert_record_before
+
+$nadds = $record->insert_fields_before($f650, MARC::Field->new('650','4','3','a','House painting.'), $new );
+is( $nadds, 2, 'Added 2 more fields' );
+
+$expected = 
+<<MARC_DATA;
+LDR 00755cam  22002414a 4500
+001     fol05731351 
+003     IMchF
+005     20000613133448.0
+008     000107s2000    nyua          001 0 eng  
+010    _a   00020737 
+020    _a0471383147 (paper/cd-rom : alk. paper)
+040    _aDLC
+       _cDLC
+       _dDLC
+042    _apcc
+050 00 _aQA76.73.P22
+       _bM33 2000
+082 00 _a005.13/3
+       _221
+100 1  _aMartinsson, Tobias,
+       _d1976-
+245 10 _aActivePerl with ASP and ADO /
+       _cTobias Martinsson.
+260    _aNew York :
+       _bJohn Wiley & Sons,
+       _c2000.
+300    _axxi, 289 p. :
+       _bill. ;
+       _c23 cm. +
+       _e1 computer  laser disc (4 3/4 in.)
+500    _a"Wiley Computer Publishing."
+650 43 _aHouse painting.
+650  0 _aWorld Wide Web.
+650  0 _aPerl (Computer program language)
+630 00 _aActive server pages.
+630 00 _aActiveX.
+MARC_DATA
+chomp($expected);
+
+is($record->as_formatted,$expected,'insert_fields_before');
+
+


Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/60.insert.t
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/t/60.update.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/60.update.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/60.update.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,61 @@
+# $Id: 60.update.t,v 1.10 2003/05/21 13:42:59 edsummers Exp $
+# Test updating a MARC record for the Camel book
+
+use strict;
+use integer;
+use Data::Dumper;
+
+use Test::More tests=>20;
+
+BEGIN {
+    use_ok( 'MARC::File::USMARC' );
+}
+
+my $file = MARC::File::USMARC->in( 't/camel.usmarc' );
+isa_ok( $file, 'MARC::File::USMARC', 'USMARC file' );
+
+my $marc = $file->next();
+isa_ok( $marc, 'MARC::Record' ) or die "Can't read the test record";
+$file->close;
+
+my $field = $marc->field('245');
+isa_ok( $field, 'MARC::Field', 'new 245' );
+
+my $nchanges = $field->update('a' => 'Programming Python /', 'ind1' => '4' );
+is( $marc->subfield('245','a') => 'Programming Python /',
+  'Updated 1 subfield' );
+is( $field->indicator(1) => '4', 'Indicator 1 changed' );
+is( $nchanges, 2, 'number of changes is correct' );
+
+$nchanges = $field->update('a' => 'Programming Python /', 'c' => 'Mark Lutz');
+is( $field->as_string() => 'Programming Python / Mark Lutz', 
+  'Updated 2 subfields');
+is( $nchanges, 2, 'number of changes is correct' );
+
+
+## make sure we can update fields with no subfields or indicators (000-009)
+
+my $f003 = $marc->field('003');
+isa_ok( $f003, 'MARC::Field' );
+my $n = $f003->update('XXXX');
+is( $n, 1, 'number of changes is correct' );
+
+$f003 = $marc->field('003');
+isa_ok( $f003, 'MARC::Field' );
+is( $f003->as_string(), 'XXXX', 'Update for fields 000-009 works' ); 
+
+## if an update is attempted on a non existent subfield it will be 
+## appended to the end of the subfield
+
+$field = $marc->field( '245' );
+isa_ok( $field, 'MARC::Field', 'got 245' );
+$n = $field->update( 'z' => 'foo bar' );
+is( $n, 1, 'numer of changes correct' );
+is( $field->subfield( 'z' ), 'foo bar', 'update() append worked' );
+
+$n = $field->update( 'x' => 'homer', 'y' => 'plato', 'z' => 'bart' );
+is( $n, 3, 'number of changes correct' );
+is( $field->subfield( 'x' ), 'homer', 'update() append 1' );
+is( $field->subfield( 'y' ), 'plato', 'update() append 2' );
+is( $field->subfield( 'z' ), 'bart', 'update() append 3' );
+


Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/60.update.t
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/t/61.append.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/61.append.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/61.append.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,65 @@
+# $Id: 61.append.t,v 1.7 2003/02/26 05:30:45 petdance Exp $
+
+use strict;
+use integer;
+
+use Test::More tests=>8;
+
+BEGIN {
+    use_ok( 'MARC::Batch' );
+    use_ok( 'MARC::Field' );
+}
+
+my $batch = new MARC::Batch( 'MARC::File::USMARC', 't/camel.usmarc' );
+isa_ok( $batch, 'MARC::Batch', 'Batch object creation' );
+
+my $record = $batch->next();
+isa_ok( $record, 'MARC::Record', 'Record object creation' );
+
+my $f650 = $record->field('650');
+isa_ok( $f650, 'MARC::Field', 'Field retrieval' );
+
+my $new = MARC::Field->new('650','','0','a','World Wide Web.');
+isa_ok( $new, 'MARC::Field', 'Field creation' );
+
+my $nadded = $record->append_fields($new);
+is( $nadded, 1 );
+
+my $expected = 
+<<MARC_DATA;
+LDR 00755cam  22002414a 4500
+001     fol05731351 
+003     IMchF
+005     20000613133448.0
+008     000107s2000    nyua          001 0 eng  
+010    _a   00020737 
+020    _a0471383147 (paper/cd-rom : alk. paper)
+040    _aDLC
+       _cDLC
+       _dDLC
+042    _apcc
+050 00 _aQA76.73.P22
+       _bM33 2000
+082 00 _a005.13/3
+       _221
+100 1  _aMartinsson, Tobias,
+       _d1976-
+245 10 _aActivePerl with ASP and ADO /
+       _cTobias Martinsson.
+260    _aNew York :
+       _bJohn Wiley & Sons,
+       _c2000.
+300    _axxi, 289 p. :
+       _bill. ;
+       _c23 cm. +
+       _e1 computer  laser disc (4 3/4 in.)
+500    _a"Wiley Computer Publishing."
+650  0 _aPerl (Computer program language)
+630 00 _aActive server pages.
+630 00 _aActiveX.
+650  0 _aWorld Wide Web.
+MARC_DATA
+chomp($expected);
+
+is($record->as_formatted, $expected, "append_fields");
+


Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/61.append.t
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/t/61.replace.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/61.replace.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/61.replace.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,35 @@
+# $Id: 61.replace.t,v 1.4 2003/02/25 20:42:03 petdance Exp $
+# Test updating a MARC record for the Camel book
+
+use strict;
+use integer;
+
+use Test::More tests=>8;
+
+BEGIN {
+    use_ok( 'MARC::File::USMARC' );
+    use_ok( 'MARC::Field' );
+}
+
+my $file = MARC::File::USMARC->in( 't/camel.usmarc' );
+isa_ok( $file, 'MARC::File', 'MARC input file' ) or die;
+my $marc = $file->next();
+isa_ok( $marc, 'MARC::Record', 'Read from file' );
+$file->close;
+
+my $cur_245 = $marc->field('245');
+isa_ok( $cur_245, 'MARC::Field' );
+my $new_245 = MARC::Field->new(
+  '245','0','0',
+  a => 'Programming Python /',
+  c => 'Mark Lutz'
+);
+isa_ok( $new_245, 'MARC::Field' );
+
+$cur_245->replace_with($new_245);
+my $latest_245 = $marc->field('245');
+isa_ok( $latest_245, 'MARC::Field' );
+
+is( $latest_245->as_string() => 'Programming Python / Mark Lutz', 
+  'Replaced a field');
+


Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/61.replace.t
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/t/62.before.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/62.before.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/62.before.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,64 @@
+# $Id: 62.before.t,v 1.7 2003/02/26 05:57:49 petdance Exp $
+
+use strict;
+use integer;
+
+use Test::More tests=>8;
+
+BEGIN {
+    use_ok( 'MARC::Batch' );
+    use_ok( 'MARC::Field' );
+}
+
+my $batch = new MARC::Batch( 'MARC::File::USMARC', 't/camel.usmarc' );
+isa_ok( $batch, 'MARC::Batch', 'Batch object creation' );
+
+my $record = $batch->next();
+isa_ok( $record, 'MARC::Record', 'Record object creation' );
+
+my $f650 = $record->field('650');
+isa_ok( $f650, 'MARC::Field', 'Field retrieval');
+
+my $new = MARC::Field->new('650','','0','a','World Wide Web.');
+isa_ok( $new, 'MARC::Field', 'Field creation');
+
+my $nadds = $record->insert_fields_before($f650,$new);
+is( $nadds, 1 );
+
+my $expected = 
+<<MARC_DATA;
+LDR 00755cam  22002414a 4500
+001     fol05731351 
+003     IMchF
+005     20000613133448.0
+008     000107s2000    nyua          001 0 eng  
+010    _a   00020737 
+020    _a0471383147 (paper/cd-rom : alk. paper)
+040    _aDLC
+       _cDLC
+       _dDLC
+042    _apcc
+050 00 _aQA76.73.P22
+       _bM33 2000
+082 00 _a005.13/3
+       _221
+100 1  _aMartinsson, Tobias,
+       _d1976-
+245 10 _aActivePerl with ASP and ADO /
+       _cTobias Martinsson.
+260    _aNew York :
+       _bJohn Wiley & Sons,
+       _c2000.
+300    _axxi, 289 p. :
+       _bill. ;
+       _c23 cm. +
+       _e1 computer  laser disc (4 3/4 in.)
+500    _a"Wiley Computer Publishing."
+650  0 _aWorld Wide Web.
+650  0 _aPerl (Computer program language)
+630 00 _aActive server pages.
+630 00 _aActiveX.
+MARC_DATA
+chomp($expected);
+
+is($record->as_formatted,$expected,'insert_fields_before');


Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/62.before.t
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/t/63.after.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/63.after.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/63.after.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,66 @@
+# $Id: 63.after.t,v 1.7 2003/02/26 05:57:49 petdance Exp $
+
+use strict;
+use integer;
+
+use Test::More tests=>8;
+
+BEGIN {
+    use_ok( 'MARC::Batch' );
+    use_ok( 'MARC::Field' );
+}
+
+my $batch = new MARC::Batch( 'MARC::File::USMARC', 't/camel.usmarc' );
+isa_ok( $batch, 'MARC::Batch', 'Batch object creation' );
+
+my $record = $batch->next();
+isa_ok( $record, 'MARC::Record', 'Record object creation' );
+
+my $f650 = $record->field('650');
+isa_ok( $f650, 'MARC::Field', 'Field retrieval');
+
+my $new = MARC::Field->new('650','','0','a','World Wide Web.');
+isa_ok( $new, 'MARC::Field', 'Field creation');
+
+my $nadds = $record->insert_fields_after($f650,$new);
+is( $nadds, 1 );
+
+my $expected = 
+<<MARC_DATA;
+LDR 00755cam  22002414a 4500
+001     fol05731351 
+003     IMchF
+005     20000613133448.0
+008     000107s2000    nyua          001 0 eng  
+010    _a   00020737 
+020    _a0471383147 (paper/cd-rom : alk. paper)
+040    _aDLC
+       _cDLC
+       _dDLC
+042    _apcc
+050 00 _aQA76.73.P22
+       _bM33 2000
+082 00 _a005.13/3
+       _221
+100 1  _aMartinsson, Tobias,
+       _d1976-
+245 10 _aActivePerl with ASP and ADO /
+       _cTobias Martinsson.
+260    _aNew York :
+       _bJohn Wiley & Sons,
+       _c2000.
+300    _axxi, 289 p. :
+       _bill. ;
+       _c23 cm. +
+       _e1 computer  laser disc (4 3/4 in.)
+500    _a"Wiley Computer Publishing."
+650  0 _aPerl (Computer program language)
+650  0 _aWorld Wide Web.
+630 00 _aActive server pages.
+630 00 _aActiveX.
+MARC_DATA
+chomp($expected);
+
+is($record->as_formatted,$expected,'insert_fields_after');
+
+


Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/63.after.t
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/t/64.create.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/64.create.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/64.create.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,35 @@
+# $Id: 64.create.t,v 1.8 2003/10/16 15:59:42 edsummers Exp $
+
+use strict;
+use integer;
+
+use Test::More tests=>7;
+
+BEGIN {
+    use_ok( 'MARC::Record');
+    use_ok( 'MARC::Field');
+}
+
+my $record = MARC::Record->new();
+isa_ok( $record, 'MARC::Record', 'Record object creation' );
+
+my $f245 = MARC::Field->new('245','1','0','a','Test create.');
+isa_ok( $f245, 'MARC::Field', '245 creation');
+
+my $f650 = MARC::Field->new('650','','0','a','World Wide Web.');
+isa_ok( $f650, 'MARC::Field', '650 creation');
+
+my $nadds = $record->append_fields($f245,$f650);
+is( $nadds, 2, 'two fields appended' );
+
+$record->as_usmarc(); ## side effect is that leader offsets are calculated  
+
+my $expected = 
+<<MARC_DATA;
+LDR 00087     2200049   4500
+245 10 _aTest create.
+650  0 _aWorld Wide Web.
+MARC_DATA
+chomp($expected);
+
+is($record->as_formatted,$expected,'New record matches');


Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/64.create.t
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/t/66.grouped.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/66.grouped.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/66.grouped.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,61 @@
+# $Id: 66.grouped.t,v 1.3 2003/02/26 05:43:16 petdance Exp $
+
+use strict;
+use integer;
+
+use Test::More tests=>7;
+
+BEGIN {
+    use_ok( 'MARC::Batch' );
+    use_ok( 'MARC::Field' );
+}
+
+my $batch = new MARC::Batch( 'MARC::File::USMARC', 't/camel.usmarc' );
+isa_ok( $batch, 'MARC::Batch', 'Batch object creation' );
+
+my $record = $batch->next();
+isa_ok( $record, 'MARC::Record', 'Record object creation' );
+
+my $new = MARC::Field->new('270','','','a','1 Whitehouse Drive, DC.');
+isa_ok( $new, 'MARC::Field', 'Field creation');
+
+my $nadds = $record->insert_grouped_field($new);
+is( $nadds, 1 );
+
+my $expected = 
+<<MARC_DATA;
+LDR 00755cam  22002414a 4500
+001     fol05731351 
+003     IMchF
+005     20000613133448.0
+008     000107s2000    nyua          001 0 eng  
+010    _a   00020737 
+020    _a0471383147 (paper/cd-rom : alk. paper)
+040    _aDLC
+       _cDLC
+       _dDLC
+042    _apcc
+050 00 _aQA76.73.P22
+       _bM33 2000
+082 00 _a005.13/3
+       _221
+100 1  _aMartinsson, Tobias,
+       _d1976-
+245 10 _aActivePerl with ASP and ADO /
+       _cTobias Martinsson.
+260    _aNew York :
+       _bJohn Wiley & Sons,
+       _c2000.
+270    _a1 Whitehouse Drive, DC.
+300    _axxi, 289 p. :
+       _bill. ;
+       _c23 cm. +
+       _e1 computer  laser disc (4 3/4 in.)
+500    _a"Wiley Computer Publishing."
+650  0 _aPerl (Computer program language)
+630 00 _aActive server pages.
+630 00 _aActiveX.
+MARC_DATA
+chomp($expected);
+
+is($record->as_formatted,$expected,'insert_grouped_field');

Added: packages/libmarc-record-perl/branches/upstream/current/t/66.ordered.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/66.ordered.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/66.ordered.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,37 @@
+use strict;
+use integer;
+
+use Test::More tests => 9; 
+
+BEGIN {
+    use_ok( 'MARC::Record' );
+}
+
+my $r = MARC::Record->new();
+
+$r->insert_fields_ordered( 
+    MARC::Field->new( '100', '', '', a => 'foo' )
+);
+
+my @fields = $r->fields();
+isa_ok( $fields[0], 'MARC::Field' );
+is( $fields[0]->tag(), '100', 'insert_fields_ordered works with empty rec' );
+
+$r->insert_fields_ordered(
+    MARC::Field->new( '110', '', '', a => 'bar' ),
+    MARC::Field->new( '105', '', '', b => 'bez' ),
+    MARC::Field->new( '008', '', '', c => 'fez' )
+);
+
+ at fields = $r->fields();
+my @tags = ();
+foreach (@fields ) { 
+    isa_ok( $_, 'MARC::Field' ); 
+    push( @tags, $_->tag() ); 
+}
+
+is( scalar(@fields), 4, 'insert_fields_ordered added multiple fields' );
+is_deeply( \@tags, [ '008', '100', '105', '110' ], 
+    'insert_fields_ordered() added fields in numeric order' );
+
+

Added: packages/libmarc-record-perl/branches/upstream/current/t/70.croak.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/70.croak.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/70.croak.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,58 @@
+use Test::More tests=>9;
+
+## methods should croak when called wrong so that MARC::Record users can 
+## identify the location of their mistakes.
+
+BEGIN {
+    use_ok( "MARC::Record" );
+    use_ok( "MARC::Field" );
+}
+
+my $record = MARC::Record->new();
+isa_ok( $record, "MARC::Record" );
+
+my $f100 = MARC::Field->new( '100', '', '', 'a' => 'author' );
+isa_ok( $f100, "MARC::Field", "F100 ok" );
+
+my $f200 = MARC::Field->new( '245', '', '', 'b' => 'title' );
+isa_ok( $f200, "MARC::Field", "F200 ok" );
+
+INSERT_FIELDS_AFTER: {
+    eval {
+	$n = $record->insert_fields_after( $f100, 'blah' );
+    };
+
+    like( $@, qr/All arguments must be MARC::Field objects/, 
+	'insert_fields_after() croaks appropriately' ); 
+
+}
+
+
+INSERT_FIELDS_BEFORE: {
+    eval { 
+	$record->insert_fields_before( $f100, 'blah' );
+    };
+
+    like( $@, qr/All arguments must be MARC::Field objects/,
+	'insert_fields_before() croaks appropriately' );
+}
+
+
+INSERT_GROUPED_FIELD: {
+    eval {
+	$n = $record->insert_grouped_field( 'blah' );
+    };
+
+    like( $@, qr/Argument must be MARC::Field object/,
+	'insert_grouped_field() croaks appropriately' );
+}
+
+
+APPEND_FIELDS: {
+    eval {
+	$record->append_fields( 'blah' );
+    };
+
+    like( $@, qr/Arguments must be MARC::Field objects/,
+	'append_fields() croaks appropriately' );
+}

Added: packages/libmarc-record-perl/branches/upstream/current/t/75.warnings.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/75.warnings.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/75.warnings.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,48 @@
+use Test::More tests=>17;
+use strict;
+
+BEGIN {
+    use_ok( 'MARC::Batch' );
+}
+
+## when strict is on, errors cause next() to return undef
+
+STRICT_ON: {
+    my $batch = MARC::Batch->new( 'USMARC', 't/badldr.usmarc' );
+    isa_ok( $batch, 'MARC::Batch' );
+
+    $batch->warnings_off(); # avoid clutter on STDERR
+    $batch->strict_on(); # the default, but might as well test
+
+    my $count = 0;
+    while ( my $r = $batch->next() ) {
+	isa_ok( $r, "MARC::Record" );
+	$count++;
+    }
+    
+    my @warnings = $batch->warnings();
+    is( scalar(@warnings), 2, "warnings() w/ strict on" );
+    is( $count, 2, "next() w/ strict on" );
+
+}
+
+## when strict is off you can keep on reading past errors
+
+STRICT_OFF: {
+    my $batch = MARC::Batch->new( 'USMARC', 't/badldr.usmarc' );
+    isa_ok( $batch, 'MARC::Batch' );
+
+    $batch->warnings_off(); # avoid clutter on STDERR
+    $batch->strict_off(); # turning off default behavior
+    
+    my $count = 0;
+    while ( my $r = $batch->next() ) {
+	isa_ok( $r, "MARC::Record" );
+	$count++;
+    }
+
+    my @warnings = $batch->warnings();
+    is( scalar(@warnings), 6, "warnings() w/ strict off" );
+    is( $count, 8, "next() w/ strict off" );
+
+}

Added: packages/libmarc-record-perl/branches/upstream/current/t/80.alphatag.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/80.alphatag.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/80.alphatag.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,104 @@
+use Test::More tests => 29;
+
+use strict;
+
+BEGIN {
+    use_ok( 'MARC::Record' );
+    use_ok( 'MARC::Field' );
+    use_ok( 'MARC::File' );
+    use_ok( 'MARC::File::USMARC' );
+    use_ok( 'MARC::File::MicroLIF' );
+}
+
+## According to the MARC spec tags can have alphanumeric
+## characters in them. They are rarely seen, but they are 
+## allowed...and believe it or not some people actually use them!
+## Tags must be alphanumeric, and three characters long.
+
+my $record = MARC::Record->new();
+isa_ok( $record, "MARC::Record" );
+
+my $field;
+
+## this should fail since it is four chars long 
+eval {
+    $field = MARC::Field->new( '245A', '', '', 'a' => 'Test' );
+};
+ok( !defined $field );
+like($@ ,qr/Tag "245A" is not a valid tag/, 'caught invalid tag "245A"' );
+
+## this should fail since it is a four digit number
+eval { 
+    $field = MARC::Field->new( '2456', '', '', 'a' => 'Test' );
+};
+ok( !defined $field );
+like($@, qr/Tag "2456" is not a valid tag/, 'caught invalid tag "2456"' );
+
+## this should work be ok
+$field = MARC::Field->new( 'RAZ', '1', '2', 'a' => 'Test' );
+isa_ok( $field, 'MARC::Field', 'field with alphanumeric tag' );
+
+is ( $field->subfield('a'), 'Test', 'subfield()' );
+
+my $n = $field->update( 'a' => '123' );
+is( $n, 1 );
+is( $field->subfield('a'), '123', 'update()' );
+
+is_deeply( $field->subfields(), [ 'a' => 123 ], 'subfields()' );
+is( $field->tag(), 'RAZ', 'tag()' );
+
+is( $field->indicator(1), '1', 'indicator(1)' );
+is( $field->indicator(2), '2', 'indicator(2)' );
+
+$field->add_subfields( 'b' => 'Tweak' );
+is( $field->subfield('b'), 'Tweak', 'add_subfields()' );
+is( $field->as_string(), '123 Tweak', 'as_string()' );
+
+my $text = "RAZ 12 _a123\n       _bTweak";
+is( $field->as_formatted(), $text, 'as_formatted()' );
+
+## make sure we can add a field with an alphanumeric tag to 
+## a MARC::Record object
+
+$record->append_fields( $field );
+my $new = $record->field('RAZ');
+isa_ok( $new, 'MARC::Field', 'able to grab field with alpha tag' );
+
+$new = MARC::Field->new('100', '', '', 'a' => 'Gates, Bill');
+$record->append_fields( $new );
+
+$new = MARC::Field->new('110', '', '', 'a' => 'Microsoft');
+$record->append_fields( $new );
+
+my @fields = $record->field( '1..' );
+is( scalar(@fields), 2, 'field(regex)' );
+
+## test output as USMARC
+
+my $marc = $record->as_usmarc();
+
+my $filename = "$$.usmarc";
+open(OUT,">$filename");
+print OUT $record->as_usmarc();
+close(OUT);
+
+my $file = MARC::File::USMARC->in( $filename );
+isa_ok( $file, 'MARC::File::USMARC', "Opened $filename" );
+
+my $newRec = $file->next();
+isa_ok( $newRec, 'MARC::Record' );
+
+is( $newRec->as_usmarc(), $marc, 'as_usmarc()' );
+unlink( $filename );
+
+
+## test output as MicroLIF
+
+my $micro = $record->as_formatted();
+
+$file = MARC::File::MicroLIF->in( 't/alphatag.lif' );
+isa_ok( $file, 'MARC::File::MicroLIF' );
+$newRec = $file->next();
+isa_ok( $newRec, 'MARC::Record' );
+is ($newRec->as_formatted(), $micro, 'as_formatted()' );
+

Added: packages/libmarc-record-perl/branches/upstream/current/t/81.decode.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/81.decode.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/81.decode.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,147 @@
+use Test::More tests => 32;
+
+use strict;
+
+BEGIN {
+    use_ok( 'MARC::Record' );
+    use_ok( 'MARC::File::MicroLIF' );
+    use_ok( 'MARC::File::USMARC' );
+}
+
+## decode can be called in a variety of ways
+##
+## $obj->decode()
+## MARC::File::MicroLIF->decode()
+## MARC::File::MicroLIF::decode()
+##
+## $obj->decode()
+## MARC::File::USMARC->decode()
+## MARC::File::USMARC::decode()
+##
+## these tests make sure we don't break any of them
+
+## slurp up some microlif
+open(IN, 't/sample1.lif' );
+my $str = join( '', <IN> );
+close IN;
+
+## attempt to use decode() on it
+
+DECODE_MICROLIF_METHOD: {
+    my $rec = MARC::File::MicroLIF->decode( $str );
+    isa_ok( $rec, 'MARC::Record' );
+    like( $rec->title(), qr/all about whales/i, 'retrieved title' );
+}
+
+DECODE_MICROLIF_FUNCTION: {
+    my $rec = MARC::File::MicroLIF::decode( $str );
+    isa_ok( $rec, 'MARC::Record' );
+    like( $rec->title(), qr/all about whales/i, 'retrieved title' );
+}
+
+## slurp up some usmarc
+open(IN, 't/sample1.usmarc' );
+$str = join( '', <IN> );
+close IN;
+
+## attempt to use decode on it
+
+DECODE_USMARC_METHOD: {
+    my $rec = MARC::File::USMARC->decode( $str );
+    isa_ok( $rec, 'MARC::Record' );
+    like( $rec->title(), qr/all about whales/i, 'retrieved title' );
+}
+
+DECODE_USMARC_FUNCTION: {
+    my $rec = MARC::File::USMARC::decode( $str );
+    isa_ok( $rec, 'MARC::Record' );
+    like( $rec->title(), qr/all about whales/i, 'retrieved title' );
+}
+
+
+#
+# make sure that MARC decode() can handle gaps in the record
+# body and data in the body not being in directory order
+# 
+my @fragments = (
+    "00214nam  22000978a 4500",
+    "001001500000",
+    "010000900015",
+    "100002000024",
+    "245001100044",   # length is 11
+    "260003300059", 
+    "650002400092", 
+    "\x1e",
+    "control number\x1e",
+    "  \x1f" . "aLCCN\x1e",
+    "1 \x1f" . "aName, Inverted.\x1e",
+    # '@@@@' here is dead space after then end of the field.
+    # The directory is set up so that the 245 field consists just
+    # of two indicators, \x1f, 'a', 'Title.', and \x1e.  The four
+    # characters after the \x1e constitute an (allowed) unused gap in the
+    # record body.
+    "10\x1f" . "aTitle.\x1e@@@@",
+    "3 \x1f" . "aPlace : \x1f" . "bPublisher, \x1f" . "cYear.\x1e",
+    " 0\x1f" . "aLC subject heading.\x1e",
+    "\x1d"
+);
+
+INITIAL_FRAGMENTS: {
+    my $rec = MARC::File::USMARC->decode( join('', @fragments) );
+    my @w = $rec->warnings();
+    is( scalar @w, 0, 'should be no warnings' );
+    is( $rec->field('245')->as_usmarc(), "10\x1f" . "aTitle.\x1e", 'gap after field data should not be returned' );
+    my $the260 = $rec->field('260');
+    isa_ok( $the260, "MARC::Field" );
+    is( $the260->indicator(1), '3', 'indicators in tag after gap should be OK' );
+    is( $the260->subfield('a'), "Place : ", 'subfield a in tag after gap should be OK' );
+    is( $the260->subfield('b'), "Publisher, ", 'subfield b in tag after gap should be OK' );
+    is( $the260->subfield('c'), "Year.", 'subfield c in tag after gap should be OK' );
+}
+
+# rearrange the directory for next test
+ at fragments[1,6] = @fragments[6,1];
+ at fragments[2,5] = @fragments[5,2];
+
+SHUFFLED_FRAGMENTS: {
+    my $rec = MARC::File::USMARC->decode( join('', @fragments) );
+    isa_ok( $rec, "MARC::Record" );
+    is( $rec->field('001')->as_string(), 'control number', '001 field correct' );
+    is( $rec->field('010')->as_string(), 'LCCN', '010 field correct' );
+    is( $rec->field('100')->as_string(), 'Name, Inverted.', '100 field correct' );
+    is( $rec->field('245')->as_string(), 'Title.', '245 field correct' );
+    is( $rec->field('260')->as_string(), 'Place :  Publisher,  Year.', '260 field correct' );
+    is( $rec->field('650')->as_string(), 'LC subject heading.', '650 field correct' );
+}
+
+
+#
+# make sure that MARC::File::MicroLIF::decode can handle
+# fields with no subfields without causing MARC::Field
+# to croak().
+# 
+
+MICROLIF_NOSUBFIELDS: {
+    # both the 040 and 041 should be discarded
+    my $str = <<EOT;
+LDR00180nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  ^
+041  _^
+245 0_aAll about whales.^
+260  _bHoliday,_c1987.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a20571_cR_dALL^`
+EOT
+
+    my $rec = MARC::File::MicroLIF::decode( $str );
+    isa_ok( $rec, 'MARC::Record' );
+    my @warnings = $rec->warnings();
+    is( scalar @warnings, 2, 'check for appropriate warnings count' );
+    ok( grep( /Tag 040.*discarded/, @warnings ), '040 warning present' );
+    ok( grep( /Tag 041.*discarded/, @warnings ), '041 warning present' );
+    ok( $rec->field('245'), '245 should not exist' );
+    ok( !$rec->field('040'), '040 should not exist' );
+    ok( !$rec->field('041'), '041 should not exist' );
+}

Added: packages/libmarc-record-perl/branches/upstream/current/t/82.baddir.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/82.baddir.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/82.baddir.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,17 @@
+use strict;
+use Test::More tests => 4;
+use MARC::File::USMARC;
+
+my $file = MARC::File::USMARC->in( 't/baddir.usmarc' );
+isa_ok( $file, 'MARC::File::USMARC' );
+
+my $r = $file->next(); 
+isa_ok( $r, 'MARC::Record' );
+
+my @warnings = $r->warnings();
+
+is( $warnings[0], 'No directory found in record 1', 
+    'got bad directory warning' );
+is( $r->title(), 'Green Eggs and Ham', 
+    'found title despite bad directory' );
+


Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/82.baddir.t
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/t/83.indicators.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/83.indicators.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/83.indicators.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,39 @@
+use Test::More tests => 11;
+use strict;
+
+use_ok( 'MARC::Record' );
+
+my $r = MARC::Record->new();
+
+# alphabetic indicators are legal in some dialects of MARC
+
+$r->append_fields( MARC::Field->new( 245, 'z', 'Z', a => 'foo' ) );
+is( $r->field(245)->indicator(1), 'z', 'indicator 1 can be non-numeric' );
+is( $r->field(245)->indicator(2), 'Z', 'indicator 2 can be non-numeric' );
+
+# rumor had it that invalid indicators sometimes invalidated other
+# valid indicators, so these tests make sure that is not the case
+
+$r->append_fields( MARC::Field->new( 100, 'dk', 2, a=> 'foo' ) );
+is( $r->field(100)->indicator(1), ' ', 'invalid indicator squashed to space' );
+is( $r->field(100)->indicator(2), 2, 'not disturbed' );
+$r->append_fields( MARC::Field->new( 111, 2, '-didk', a=> 'foo' ) );
+is ($r->field(111)->indicator(1), 2, 'not disturbed' );
+is ($r->field(111)->indicator(2), ' ', 'invalid indicator squashed to space' );
+
+## read a file which has an invalid indicator (a hyphen) and make sure it does 
+## not affect a valid indicator
+
+use_ok( 'MARC::Batch' );
+
+my $batch = MARC::Batch->new( 'USMARC', 't/badind.usmarc' );
+$batch->strict_off();
+$batch->warnings_off();
+
+$r = $batch->next();
+my @warnings = $batch->warnings();
+is( $warnings[0], 'Invalid indicator "-" forced to blank', 
+    'got expected warning message' );
+
+is( $r->field(245)->indicator(1),' ','hyphen forced to blank in indicator 1' );
+is( $r->field(245)->indicator(2),'0','indicator 2 undisturbed' );

Added: packages/libmarc-record-perl/branches/upstream/current/t/85.fh.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/85.fh.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/85.fh.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,158 @@
+# test that we can pass filehandles to MARC::File::USMARC and MARC::Batch
+
+use Test::More tests => 206;
+use strict;
+use IO::File;
+
+use_ok( 'MARC::File::USMARC' );
+use_ok( 'MARC::File::MicroLIF' );
+use_ok( 'MARC::Batch' );
+
+# first try globs with MARC::File::USMARC
+
+USMARC_FILE_GLOB: { 
+
+    open( MARCDATA, 't/camel.usmarc' );
+    my $fh = *MARCDATA;
+    my $file = MARC::File::USMARC->in( $fh );
+    isa_ok( $file, "MARC::File::USMARC" );
+
+    my $count = 0;
+    while ( my $r = $file->next() ) {
+	++$count;
+	isa_ok( $r, "MARC::Record" );
+    }
+    is( $count, 10, 'MARC::File::USMARC avec globbed file handle works' );
+
+}
+
+
+# now try IO::File objects with MARC::File::USMARC
+
+USMARC_IO_FILE: {
+
+    my $fh = IO::File->new( 't/camel.usmarc' );
+    isa_ok( $fh, "IO::File" );
+    my $file = MARC::File::USMARC->in( $fh );
+    isa_ok( $file, "MARC::File::USMARC" );
+
+    my $count = 0;
+    while ( my $r = $file->next() ) {
+	++$count;
+	isa_ok( $r, "MARC::Record" );
+    }
+    is( $count, 10, 'MARC::File::USMARC avec IO::File object works' );
+
+}
+
+# now try globs with MARC::File::MicroLIF
+
+MICROLIF_FILE_GLOB: {
+
+    open( LIFDATA, 't/sample20.lif' );
+    my $fh = *LIFDATA;
+    my $file = MARC::File::MicroLIF->in( $fh );
+    isa_ok( $file, "MARC::File::MicroLIF" );
+
+    my $count = 0;
+    while ( my $r = $file->next() ) {
+	++$count;
+	isa_ok( $r, "MARC::Record" );
+    }
+    is( $count, 20, 'MARC::File::MicroLIF avec globbed file handle works' );
+
+}
+
+# and IO::File object with MARC::File::MicroLIF
+
+MICROLIF_IO_FILE: {
+
+    my $fh = IO::File->new( 't/sample20.lif' );
+    isa_ok( $fh, "IO::File" );
+    my $file = MARC::File::MicroLIF->in( $fh );
+    isa_ok( $file, "MARC::File::MicroLIF" );
+
+    my $count = 0;
+    while ( my $r = $file->next() ) {
+	++$count;
+	isa_ok( $r, "MARC::Record" );
+    }
+    is( $count, 20, 'MARC::File::MicroLIF avec IO::File object works' );
+
+}
+
+# ok now lets check that MARC::Batch works as expected 
+
+MARC_BATCH_FILEHANDLE: {
+
+    my $fh = IO::File->new( 't/camel.usmarc' );
+    isa_ok( $fh, "IO::File" );
+    my $batch = MARC::Batch->new( 'USMARC', $fh );
+    isa_ok( $batch, "MARC::Batch" );
+
+    my $count = 0;
+    while ( my $r = $batch->next() ) {
+	++$count;
+	isa_ok( $r, "MARC::Record" );
+    }
+    is( $count, 10, 'MARC::Batch avec IO::File object and USMARC' );
+
+}
+
+# now lets try two filehandles
+
+MARC_BATCH_FILEHANDLES: {
+
+    my $fh1 = IO::File->new( 't/camel.usmarc' );
+    isa_ok( $fh1, "IO::File" );
+    my $fh2 = IO::File->new( 't/camel.usmarc' );
+    isa_ok( $fh2, "IO::File" );
+    my $batch = MARC::Batch->new( 'USMARC', $fh1, $fh2 );
+    isa_ok( $batch, "MARC::Batch" );
+
+    my $count = 0;
+    while ( my $r = $batch->next() ) {
+	++$count;
+	isa_ok( $r, "MARC::Record" );
+    }
+    is( $count, 20, 'MARC::Batch avec IO::File objects and USMARC' );
+
+}
+
+# now lets try a mix of filenames, IO::File objects and globs
+
+MARC_BATCH_MIX: {
+
+    open( MARCDATA, 't/camel.usmarc' );
+    my $fh1 = *MARCDATA;
+    my $fh2 = IO::File->new( 't/camel.usmarc' );
+    isa_ok( $fh2, "IO::File" );
+    my $batch = MARC::Batch->new( 'USMARC', $fh1, $fh2, 't/camel.usmarc' );
+    isa_ok( $batch, "MARC::Batch" );
+
+    my $count = 0;
+    while ( my $r = $batch->next() ) {
+	++$count;
+	isa_ok( $r, "MARC::Record" );
+    }
+    is( $count, 30, 'MARC::Batch avec mixture of handles and names and Lif');
+
+}
+
+MICROLIF_BATCH_MIX: {
+
+    open( LIFDATA, 't/sample20.lif' );
+    my $fh1 = *LIFDATA;
+    my $fh2 = IO::File->new( 't/sample20.lif' );
+    isa_ok( $fh2, "IO::File" );
+    my $batch = MARC::Batch->new( 'MicroLIF', $fh1, $fh2, 't/sample20.lif' );
+    isa_ok( $batch, "MARC::Batch" );
+
+    my $count = 0;
+    while ( my $r = $batch->next() ) {
+	++$count;
+	isa_ok( $r, "MARC::Record" );
+    }
+    is( $count, 60, 'MARC::Batch avec mixture of handles and names and Lif' );
+
+}

Added: packages/libmarc-record-perl/branches/upstream/current/t/alphatag.lif
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/alphatag.lif	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/alphatag.lif	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,5 @@
+header alpha tag MicroLIF file                                                  
+LDR00107     2200061   4500
+RAZ12_a123_bTweak
+100  _aGates, Bill
+110  _aMicrosoft

Added: packages/libmarc-record-perl/branches/upstream/current/t/baddir.usmarc
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/baddir.usmarc	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/baddir.usmarc	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1 @@
+00382nam  22001455a 4500001001200000005001800012008004100030020002200071091002200093100001500115245002300130260002300153300000900176852005100185    2000932
20020221152100.00
020221 1988                            d
  a0394800168c$7.99
  aChild. Lit. E SEU
  aSeuss, Dr.
00aGreen Eggs and Ham
  bRandom Housec1988
  a62p.
  aCTd2/21/02fGENhE SEUl220p220000174197.99



Added: packages/libmarc-record-perl/branches/upstream/current/t/badind.usmarc
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/badind.usmarc	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/badind.usmarc	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1 @@
+00240nam  22001092  4500008004100000040001000041245002200051260002000073300001100093900000800104952001800112
891207s19xx    xxu           00010 eng d
  cIMchF
-0aAll about whales.
  bHoliday,c1987.
  a[ ] p.
  aALL
  a20571cRdALL



Added: packages/libmarc-record-perl/branches/upstream/current/t/badldr.usmarc
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/badldr.usmarc	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/badldr.usmarc	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1 @@
+00240nam  2200085   4500008004100000100001800041245003400059260002000093852004100113
020222n                       0    und  
1 aAndrews, V.C.
10aFallen hearts.hMiscellaneous
0 bMiscellaneous, 
  aPaperbacksbMFFhAiANDp13397000015

00232nam  2200085   4500008004100000100002000041245002900061260002000090852003600110
020222n                       0    und  
1 aKoontz, Dean R.
10aHideaway.hMiscellaneous
0 bMiscellaneous, 
  aPaperbackshKiKOOp13397000024


00345nam  2200109   4500020001500000245006800015260003500083300001100118651002400129651002500153852005700178
  a0670894354
10aMaclean's peopleb: a gallery of Canadian greatshMiscellaneous
0 aTorontobPenguin/Vikingcc2001
  a416 p.
  aCanadax Biography.
  aCanadaxBiographies.
  935aAdult Non FictionbMFFhB MacliMACp13397032217

00250nam  2200085   4500020001500000245005700015260003700072300001400109852004100123
  a1559600128
10aFlying leathernecksb[videorecording]hMiscellaneous
0 bTurner Home Entertainmentcc1988
  a102 mins.
  99.95bMFFhVID 990iFLYp13397032480

00251nam  2200085   4500008004100000100001200041245005100053260002000104852004100124
020222n                       0    und  
1 aCooper,
10aBlack fire : a Star Trek novel.hMiscellaneous
0 bMiscellaneous, 
  aPaperbacksbMFFhCiCOOp13397000054

00398nam  2200157   4500001000100000005000100001008004100002020001500043082000600058100002200064245003700086260003600123300001100159440001700170852005300187


 0921n        xx            00011 eng u 
  a0553241508
  aF
1 aWoodruff, Marian.
10aKiss me, creep.bhMiscellaneous
0 a-- TorontobBantam Bookscc1984
  a134 p.
  aSweet Dreams
  aJuvenile FictionhJ F Woo p.b.iWOOp13397000072

7
\ No newline at end of file

Added: packages/libmarc-record-perl/branches/upstream/current/t/batch-filter.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/batch-filter.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/batch-filter.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,27 @@
+#!/usr/bin/perl -w
+
+use strict;
+use Test::More;
+
+plan( tests => 5 );
+
+use_ok( 'MARC::Batch' );
+
+my $b = MARC::Batch->new( 'USMARC', 't/camel.usmarc' );
+isa_ok( $b, 'MARC::Batch' );
+
+my $r = $b->next( \&wanted );
+isa_ok( $r, 'MARC::Record' );
+
+my @fields = $r->fields();
+is( scalar( @fields ), 1, 'filter worked' );
+
+eval { $r = $b->next( 'barf' ); };
+like( $@, qr/filter function in next\(\)/, 'error message' );
+
+
+sub wanted {
+    my ( $tag, $data ) = @_;
+    if ( $tag ne '245' ) { return ( 0 ); }
+    return( 1 );
+}


Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/batch-filter.t
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/t/camel.usmarc
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/camel.usmarc	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/camel.usmarc	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1 @@
+00755cam  22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500
fol05731351 
IMchF
20000613133448.0
000107s2000    nyua          001 0 eng  
  a   00020737 
  a0471383147 (paper/cd-rom : alk. paper)
  aDLCcDLCdDLC
  apcc
00aQA76.73.P22bM33 2000
00a005.13/3221
1 aMartinsson, Tobias,d1976-
10aActivePerl with ASP and ADO /cTobias Martinsson.
  aNew York :bJohn Wiley & Sons,c2000.
  axxi, 289 p. :bill. ;c23 cm. +e1 computer  laser disc (4 3/4 in.)
  a"Wiley Computer Publishing."
 0aPerl (Computer program language)
00aActive server pages.
00aActiveX.

00647pam  2200241 a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001500161100002600176245006700202260003800269263000900307300001100316650003700327650002500364700001600389
fol05754809 
IMchF
20000601115601.0
000203s2000    mau           001 0 eng  
  a   00022023 
  a1565926994
  aDLCcDLCdDLC
  apcc
00aQA76.73.P22bD47 2000
00a005.74221
1 aDescartes, Alligator.
10aProgramming the Perl DBI /cAlligator Descartes and Tim Bunce.
  aCmabridge, MA :bO'Reilly,c2000.
  a1111
  ap. cm.
 0aPerl (Computer program language)
 0aDatabase management.
1 aBunce, Tim.

00605cam  22002054a 4500001001300000003000600013005001700019008004100036010001700077040001800094042000800112050002700120082001700147100002100164245005500185260004500240300002600285504005100311650003700362
fol05843555 
IMchF
20000525142739.0
000318s1999    cau      b    001 0 eng  
  a   00501349 
  aDLCcDLCdDLC
  apcc
00aQA76.73.P22bB763 1999
00a005.13/3221
1 aBrown, Martin C.
10aPerl :bprogrammer's reference /cMartin C. Brown.
  aBerkeley :bOsborne/McGraw-Hill,cc1999.
  axix, 380 p. ;c22 cm.
  aIncludes bibliographical references and index.
 0aPerl (Computer program language)

00579cam  22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002700135082001700162100002100179245005500200260004500255300003600300650003700336
fol05843579 
IMchF
20000525142716.0
000318s1999    caua          001 0 eng  
  a   00502116 
  a0072120002
  aDLCcDLCdDLC
  apcc
00aQA76.73.P22bB762 1999
00a005.13/3221
1 aBrown, Martin C.
10aPerl :bthe complete reference /cMartin C. Brown.
  aBerkeley :bOsborne/McGraw-Hill,cc1999.
  axxxv, 1179 p. :bill. ;c24 cm.
 0aPerl (Computer program language)

00801nam  22002778a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001800156100002000174245008800194250003200282260004100314263000900355300001100364650003700375650003600412650002600448700002500474700002400499
fol05848297 
IMchF
20000524125727.0
000518s2000    mau           001 0 eng  
  a   00041664 
  a1565924193
  aDLCcDLC
  apcc
00aQA76.73.P22bG84 2000
00a005.2/762221
1 aGuelich, Scott.
10aCGI programming with Perl /cScott Guelich, Shishir Gundavaram & Gunther Birznieks.
  a2nd ed., expanded & updated
  aCambridge, Mass. :bO'Reilly,c2000.
  a0006
  ap. cm.
 0aPerl (Computer program language)
 0aCGI (Computer network protocol)
 0aInternet programming.
1 aGundavaram, Shishir.
1 aBirznieks, Gunther.

00665nam  22002298a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002700130082001700157111005200174245008600226250001200312260004100324263000900365300001100374650005000385
fol05865950 
IMchF
20000615103017.0
000612s2000    mau           100 0 eng  
  a   00055759 
  a0596000138
  aDLCcDLC
  apcc
00aQA76.73.P22bP475 2000
00a005.13/3221
2 aPerl Conference 4.0d(2000 :cMonterey, Calif.)
10aProceedings of the Perl Conference 4.0 :bJuly 17-20, 2000, Monterey, California.
  a1st ed.
  aCambridge, Mass. :bO'Reilly,c2000.
  a0006
  ap. cm.
 0aPerl (Computer program language)vCongresses.

00579nam  22002178a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100002800173245006200201260004100263263000900304300001100313650003700324
fol05865956 
IMchF
20000615102948.0
000612s2000    mau           000 0 eng  
  a   00055770 
  a1565926099
  aDLCcDLC
  apcc
00aQA76.73.P22bB43 2000
00a005.13/3221
1 aBlank-Edelman, David N.
10aPerl for system administration /cDavid N. Blank-Edelman.
  aCambridge, Mass. :bO'Reilly,c2000.
  a0006
  ap. cm.
 0aPerl (Computer program language)

00661nam  22002538a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100001700173245006700190250001200257260004100269263000900310300001100319650003700330700002300367700001700390
fol05865967 
IMchF
20000615102611.0
000614s2000    mau           000 0 eng  
  a   00055799 
  a0596000278
  aDLCcDLC
  apcc
00aQA76.73.P22bW35 2000
00a005.13/3221
1 aWall, Larry.
10aProgramming Perl /cLarry Wall, Tom Christiansen & Jon Orwant.
  a3rd ed.
  aCambridge, Mass. :bO'Reilly,c2000.
  a0007
  ap. cm.
 0aPerl (Computer program language)
1 aChristiansen, Tom.
1 aOrwant, Jon.

00603cam  22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001700161100003200178245006000210260005700270300003300327650003700360
fol05872355 
IMchF
20000706095105.0
000315s1999    njua          001 0 eng  
  a   00500678 
  a013020868X
  aDLCcDLCdDLC
  apcc
00aQA76.73.P22bL69 1999
00a005.13/3221
1 aLowe, Vincentq(Vincent D.)
10aPerl programmer's interactive workbook /cVincent Lowe.
  aUpper Saddle River, NJ :bPrentice Hall PTP,cc1999.
  axx, 633 p. :bill. ;c23 cm.
 0aPerl (Computer program language)

00696nam  22002538a 4500001001300000003000600013005001700019008004100036010001700077020002800094040001300122042000800135050002600143082001700169100002600186245004400212260005100256263000900307300001100316500002000327650003700347650001700384650004100401
fol05882032 
IMchF
20000707091904.0
000630s2000    cau           001 0 eng  
  a   00058174 
  a0764547291 (alk. paper)
  aDLCcDLC
  apcc
00aQA76.73.P22bF64 2000
00a005.13/3221
2 aFoster-Johnson, Eric.
10aCross-platform Perl /cEric F. Johnson.
  aFoster City, CA :bIDG Books Worldwide,c2000.
  a0009
  ap. cm.
  aIncludes index.
 0aPerl (Computer program language)
 0aWeb servers.
 0aCross-platform software development.


\ No newline at end of file

Added: packages/libmarc-record-perl/branches/upstream/current/t/convenience.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/convenience.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/convenience.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,54 @@
+# $Id: convenience.t,v 1.4 2003/02/25 20:42:07 petdance Exp $
+
+use strict;
+use integer;
+
+use constant PERLCONF_SKIPS => 6;
+use constant CAMEL_SKIPS => 2;
+use constant XPLATFORM_SKIPS => 2;
+
+use Test::More tests=>( 2 + (5*3) + CAMEL_SKIPS + PERLCONF_SKIPS + XPLATFORM_SKIPS );
+
+BEGIN {
+    use_ok( 'MARC::File::USMARC' );
+}
+
+my $file = MARC::File::USMARC->in( 't/camel.usmarc' );
+isa_ok( $file, 'MARC::File::USMARC', 'USMARC file' );
+
+my $marc;
+for ( 1..PERLCONF_SKIPS ) { # Skip to the Perl conference
+    $marc = $file->next();
+    isa_ok( $marc, 'MARC::Record', 'Got a record' );
+}
+
+is( $marc->author,		'Perl Conference 4.0 (2000 : Monterey, Calif.)' );
+is( $marc->title,		'Proceedings of the Perl Conference 4.0 : July 17-20, 2000, Monterey, California.' );
+is( $marc->title_proper,	'Proceedings of the Perl Conference 4.0 :' );
+is( $marc->edition,		'1st ed.' );
+is( $marc->publication_date,	'2000.' );
+
+for ( 1..CAMEL_SKIPS ) { # Skip to the camel
+    $marc = $file->next();
+    isa_ok( $marc, 'MARC::Record', 'Got a record' );
+}
+
+is( $marc->author,		'Wall, Larry.' );
+is( $marc->title,		'Programming Perl / Larry Wall, Tom Christiansen & Jon Orwant.' );
+is( $marc->title_proper,	'Programming Perl /' );
+is( $marc->edition,		'3rd ed.' );
+is( $marc->publication_date,	'2000.' );
+
+for ( 1..XPLATFORM_SKIPS ) { # Skip to Cross-Platform Perl
+    $marc = $file->next();
+    isa_ok( $marc, 'MARC::Record', 'Got a record' );
+}
+
+is( $marc->author,		'Foster-Johnson, Eric.' );
+is( $marc->title,		'Cross-platform Perl / Eric F. Johnson.' );
+is( $marc->title_proper,	'Cross-platform Perl /' );
+is( $marc->edition,		'' );
+is( $marc->publication_date,	'2000.' );
+
+$file->close;
+


Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/convenience.t
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/t/decode-filter.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/decode-filter.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/decode-filter.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,41 @@
+# $Id: decode-filter.t,v 1.3 2003/02/26 05:52:35 petdance Exp $
+# Test creating a MARC record for the Camel book
+#
+# Bugs, comments, suggestions welcome: marc at petdance.com
+
+use strict;
+
+use Test::More tests => 3;
+
+BEGIN {
+    use_ok( 'MARC::Record' );
+}
+
+
+sub wanted {
+    my $tag = shift;
+    my $data = shift;
+
+    return $tag == 245 || $tag >= 600;
+}
+
+my $blob = "00397nam  22001458a 4500001001200000003000600012010001600018100001700034245006800051250001200119260004300131650003700174700002300211700001700234\x1Efol05865967\x1EIMchF\x1E  \x1Fa   00055799\x1E1 \x1FaWall, Larry.\x1E10\x1FaProgramming Perl / \x1FcLarry Wall, Tom Christiansen & Jon Orwant.\x1E  \x1Fa3rd ed.\x1E  \x1FaCambridge, Mass. : \x1FbO'Reilly, \x1Fc2000.\x1E 0\x1FaPerl (Computer program language)\x1E1 \x1FaChristiansen, Tom.\x1E1 \x1FaOrwant, Jon.\x1E\x1D";
+
+my $marc = MARC::Record->new_from_usmarc( $blob, \&wanted );
+isa_ok( $marc, "MARC::Record" );
+
+my $expected = join( "", <DATA> );
+chomp $expected;
+
+my $generated = $marc->as_formatted;
+chomp $generated;
+
+is( $generated, $expected, 'as_formatted()' );
+
+__END__
+LDR 00397nam  22001458a 4500
+245 10 _aProgramming Perl / 
+       _cLarry Wall, Tom Christiansen & Jon Orwant.
+650  0 _aPerl (Computer program language)
+700 1  _aChristiansen, Tom.
+700 1  _aOrwant, Jon.


Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/decode-filter.t
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/t/file-filter.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/file-filter.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/file-filter.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,32 @@
+# $Id: file-filter.t,v 1.2 2003/02/25 20:42:08 petdance Exp $
+
+use strict;
+use integer;
+
+use constant CAMEL_SKIPS => 8;
+
+use Test::More tests=>(CAMEL_SKIPS * 2) + 7;
+
+BEGIN {
+    use_ok( 'MARC::File::USMARC' );
+}
+
+my $file = MARC::File::USMARC->in( 't/camel.usmarc' );
+isa_ok( $file, 'MARC::File::USMARC', 'USMARC file' );
+
+my $marc;
+for ( 1..CAMEL_SKIPS ) { # Skip to the camel
+    $marc = $file->next( sub { $_[0] == 245 } ); # Only want 245 in the record
+    isa_ok( $marc, 'MARC::Record', 'Got a record' );
+
+    is( scalar $marc->fields, 1, 'Should only have one tag' );
+}
+
+is( $marc->author,		'' );
+is( $marc->title,		'Programming Perl / Larry Wall, Tom Christiansen & Jon Orwant.' );
+is( $marc->title_proper,	'Programming Perl /' );
+is( $marc->edition,		'' );
+is( $marc->publication_date,	'' );
+
+$file->close;
+


Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/file-filter.t
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/t/file-header.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/file-header.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/file-header.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,30 @@
+# $Id: file-header.t,v 1.1 2003/03/12 20:15:56 moregan Exp $
+
+use strict;
+use integer;
+
+use Test::More tests=>5;
+
+BEGIN {
+    use_ok( 'MARC::File::MicroLIF' );
+}
+
+
+MISSINGHEADER: {
+    my $file = MARC::File::MicroLIF->in( 't/sample1.lif' );
+    isa_ok( $file, 'MARC::File::MicroLIF', 'got a MicroLIF file' );
+    ok( !$file->header(), 'file contains no header' );
+    $file->close();
+}
+
+MISSINGHEADER: {
+    my $file = MARC::File::MicroLIF->in( 't/sample20.lif' );
+    isa_ok( $file, 'MARC::File::MicroLIF', 'got a MicroLIF file' );
+    is( 
+	$file->header(), 
+	'header 20 rec MicroLIF file                                                     ', 
+	'file header correct' 
+    );
+    $file->close();
+}
+


Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/file-header.t
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/t/lineendings-0a.lif
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/lineendings-0a.lif	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/lineendings-0a.lif	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,9 @@
+MicroLIF: x0a    line end                                                       
+LDR00180nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAll about whales.^
+260  _bHoliday,_c1987.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a20571_cR_dALL^`

Added: packages/libmarc-record-perl/branches/upstream/current/t/lineendings-0d.lif
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/lineendings-0d.lif	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/lineendings-0d.lif	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1 @@
+MicroLIF: x0d    line end                                                       
LDR00180nam  22     2  4500^
008891207s19xx    xxu           00010 eng d^
040  _cIMchF^
245 0_aAll about whales.^
260  _bHoliday,_c1987.^
300  _a[ ] p.^
900  _aALL^
952  _a20571_cR_dALL^`
\ No newline at end of file

Added: packages/libmarc-record-perl/branches/upstream/current/t/lineendings-0d0a.lif
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/lineendings-0d0a.lif	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/lineendings-0d0a.lif	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,9 @@
+MicroLIF: x0dx0a line end                                                       
+LDR00180nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAll about whales.^
+260  _bHoliday,_c1987.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a20571_cR_dALL^`

Added: packages/libmarc-record-perl/branches/upstream/current/t/lineendings.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/lineendings.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/lineendings.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,40 @@
+# $Id: lineendings.t,v 1.3 2003/11/25 04:01:48 petdance Exp $
+# Test creating a MARC record for the Camel book
+#
+# Bugs, comments, suggestions welcome: marc at petdance.com
+
+use strict;
+
+use Test::More;
+use vars qw( @endings );
+
+BEGIN {
+    @endings = qw( 0a 0d 0d0a );
+    plan( tests => @endings*13 + 2 );
+    use_ok( 'MARC::Record' );
+    use_ok( 'MARC::File::MicroLIF' );
+}
+
+
+foreach my $ending ( @endings ) {
+    my $filename = "t/lineendings-$ending.lif";
+    my $file = MARC::File::MicroLIF->in( $filename );
+    isa_ok( $file, 'MARC::File::MicroLIF' );
+    is( scalar $file->warnings(), 0, 'no file warnings for $filename' );
+
+    my $record = $file->next();
+    isa_ok( $record, 'MARC::Record', 'successfully decoded' );
+    is( scalar $record->warnings(), 0, 'no record warnings' );
+    
+    is( scalar $record->fields(), 7, 'checking the number of fields in the record' );
+    is( $record->leader(),                  '00180nam  22     2  4500', "checking $filename LDR" );
+    is( $record->field('008')->as_string(), '891207s19xx    xxu           00010 eng d', "checking $filename 008" );
+    is( $record->field('040')->as_string(), 'IMchF', "checking $filename 040" );
+    is( $record->field('245')->as_string(), 'All about whales.', "checking $filename 245" );
+    is( $record->field('260')->as_string(), 'Holiday, 1987.', "checking $filename 260" );
+    is( $record->field('300')->as_string(), '[ ] p.', "checking $filename 300" );
+    is( $record->field('900')->as_string(), 'ALL', "checking $filename 900" );
+    is( $record->field('952')->as_string(), '20571 R ALL', "checking $filename 952" );
+
+    $file->close();
+}


Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/lineendings.t
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/t/lint.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/lint.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/lint.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,96 @@
+
+use strict;
+use Test::More tests=>35;
+
+BEGIN { use_ok( 'MARC::File::USMARC' ); }
+BEGIN { use_ok( 'MARC::Lint' ); }
+
+
+FROM_FILE: {
+    my @expected = ( (undef) x 9, [ q{100: Indicator 1 must be 0, 1 or 3 but it's "2"} ] );
+
+    my $lint = new MARC::Lint;
+    isa_ok( $lint, 'MARC::Lint' );
+
+    my $filename = "t/camel.usmarc";
+
+    my $file = MARC::File::USMARC->in( $filename );
+    while ( my $marc = $file->next() ) {
+	isa_ok( $marc, 'MARC::Record' );
+	my $title = $marc->title;
+	$lint->check_record( $marc );
+
+	my $expected = shift @expected;
+	my @warnings = $lint->warnings;
+
+	if ( $expected ) {
+	    ok( eq_array( \@warnings, $expected ), "Warnings match on $title" );
+	} else {
+	    is( scalar @warnings, 0, "No warnings on $title" );
+	}
+    } # while
+
+    is( scalar @expected, 0, "All expected messages have been exhausted." );
+}
+
+
+FROM_TEXT: {
+    my $marc = MARC::Record->new();
+    isa_ok( $marc, 'MARC::Record', 'MARC record' );
+
+    $marc->leader("00000nam  22002538a 4500"); # The ????? represents meaningless digits at this point
+    my $nfields = $marc->add_fields(
+	[100, "1","4", 
+	    a => "Wall, Larry",
+	    ],
+	[110, "1","",
+	    a => "O'Reilly & Associates.",
+	    ],
+	[245, "9","0",
+	    a => "Programming Perl / ",
+	    a => "Big Book of Perl /",
+	    c => "Larry Wall, Tom Christiansen & Jon Orwant.",
+	    ],
+	[250, "", "",
+	    a => "3rd ed.",
+	    ],
+	[250, "", "",
+	    a => "3rd ed.",
+	    ],
+	[260, "", "",
+	    a => "Cambridge, Mass. : ",
+	    b => "O'Reilly, ",
+	    r => "2000.",
+	    ],
+	[590, "4","",
+	    a => "Personally signed by Larry.",
+	    ],
+	[856, "4","3",
+	    u => "http://www.perl.com/",
+	    ],
+    );
+    is( $nfields, 8, "All the fields added OK" );
+
+    my @expected = (
+	q{1XX: Only one 1XX tag is allowed, but I found 2 of them.},
+	q{100: Indicator 2 must be blank but it's "4"},
+	q{245: Indicator 1 must be 0 or 1 but it's "9"},
+	q{245: Subfield _a is not repeatable.},
+	q{250: Field is not repeatable.},
+	q{260: Subfield _r is not allowed.},
+	q{856: Indicator 2 must be blank, 0, 1, 2 or 8 but it's "3"},
+    );
+
+    my $lint = new MARC::Lint;
+    isa_ok( $lint, 'MARC::Lint' );
+
+    $lint->check_record( $marc );
+    my @warnings = $lint->warnings;
+    while ( @warnings ) {
+	my $expected = shift @expected;
+	my $actual = shift @warnings;
+
+	is( $actual, $expected, "Checking expected messages" );
+    }
+    is( scalar @expected, 0, "All expected messages exhausted." );
+}

Added: packages/libmarc-record-perl/branches/upstream/current/t/pod-coverage.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/pod-coverage.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/pod-coverage.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,4 @@
+use Test::More;
+eval "use Test::Pod::Coverage 0.08";
+plan skip_all => "Test::Pod::Coverage 0.08 required for testing POD coverage" if $@;
+all_pod_coverage_ok();

Added: packages/libmarc-record-perl/branches/upstream/current/t/pod.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/pod.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/pod.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,4 @@
+use Test::More;
+eval "use Test::Pod 1.00";
+plan skip_all => "Test::Pod 1.00 required for testing POD" if $@;
+all_pod_files_ok();

Added: packages/libmarc-record-perl/branches/upstream/current/t/sample1.lif
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/sample1.lif	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/sample1.lif	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,8 @@
+LDR00180nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAll about whales.^
+260  _bHoliday,_c1987.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a20571_cR_dALL^`

Added: packages/libmarc-record-perl/branches/upstream/current/t/sample1.usmarc
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/sample1.usmarc	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/sample1.usmarc	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1 @@
+00240nam  22001092  4500008004100000040001000041245002200051260002000073300001100093900000800104952001800112
891207s19xx    xxu           00010 eng d
  cIMchF
 0aAll about whales.
  bHoliday,c1987.
  a[ ] p.
  aALL
  a20571cRdALL


\ No newline at end of file

Added: packages/libmarc-record-perl/branches/upstream/current/t/sample100.lif
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/sample100.lif	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/sample100.lif	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,1157 @@
+header 100 rec MicroLIF file                                                    
+LDR01306pam  22     5a 4500^
+003IMchF^
+00520000404110431.6^
+008940823s1996    nyua   j      000 0 eng  ^
+010  _a   94031110 /AC^
+020  _a0590441515 :_c$14.95^
+040  _aDLC_cDLC_dDLC_dICrlF_dIMchF-DB_dICrlF^
+043  _an-us---_an-us-ny^
+05000_aJV6450_b.M34 1996^
+08200_a304.8/73/009_221^
+1001 _aMaestro, Betsy.^
+24510_aComing to America :_bthe story of immigration /_cby Betsy Maestro ; illustrated by Susannah Ryan.^
+260  _aNew York :_bScholastic,_cc1996.^
+300  _a[40] p. :_bcol. ill. ;_c29 cm.^
+520  _aTraces the history of immigration to the United States and tells people's reasons for choosing to move to America.^
+61020_aEllis Island Immigration Station (New York, N.Y.)_xHistory_xJuvenile literature.^
+61021_aEllis Island Immigration Station (New York, N.Y.)_xHistory.^
+61027_aEllis Island Immigration Station (New York, N.Y.)_xHistory._2sears^
+650 0_aImmigrants_zUnited States_xHistory_xJuvenile literature.^
+650 1_aImmigrants.^
+650 7_aImmigrants._2sears^
+651 0_aUnited States_xEmigration and immigration_xHistory_xJuvenile literature.^
+651 1_aUnited States_xEmigration and immigration_xHistory.^
+651 7_aUnited States_xImmigration and emigration_xHistory._2sears^
+7001 _aRyan, Susannah,_eill.^
+900  _a304.8 MAE^
+9401 _a4.8_bK-3_sWilson's Children_sElem. School Library Collection_sSchool Library Journal^
+952  _a25877_cR_d304.8 MAE^`
+LDR01287pam  22     7a 4500^
+003IMchF^
+00520000321104353.2^
+008931102s1996    nyua   j b    001 0 eng  ^
+010  _a   93040296 /AC^
+020  _a0679873929 (pbk.)^
+020  _a0329031058^
+020  _a0679943250^
+020  _a0679887717 (pbk.)^
+040  _aDLC_cDLC_dDLC_dICrlF_dKyLxBWI_dICrlF^
+043  _an-us---^
+05000_aHQ798_b.J85 1996^
+08200_a305.23/5_221^
+1001 _aJukes, Mavis.^
+24510_aIt's a girl thing :_bhow to stay healthy, safe, and in charge /_cby Mavis Jukes ; illustrations by Debbie Tilley.^
+260  _aNew York, N.Y. :_bAlfred A. Knopf :_bdistributed by Random House,_cc1996.^
+300  _aviii, 135 p. :_bill. ;_c23 cm.^
+504  _aIncludes bibliographical references (p. 130-132) and index.^
+520  _aA guide for preteen girls discussing the physical changes associated with puberty and addressing other issues that teens face, such as drugs, drinking, sex, disease, and safety.^
+650 0_aTeenage girls_zUnited States_xJuvenile literature.^
+650 0_aPuberty_zUnited States_xJuvenile literature.^
+650 0_aSex instruction for girls_zUnited States.^
+650 1_aPuberty.^
+650 1_aSex instruction for girls.^
+650 7_aPuberty._2sears^
+650 7_aSex education._2sears^
+650 7_aAdolescence._2sears^
+7001 _aTilley, Debbie,_eill.^
+900  _a305.23 JUK^
+9401 _a7.5_b5-8_sWilson's Children_sWilson's Junior High School_sElem. School Library Collection^
+952  _a26036_cR_d305.23 JUK^`
+LDR01186pam  22      a 4500^
+003IMchF^
+00519960807153651.5^
+008920115s1993    nyua   j b    000 0 eng  ^
+010  _a   92003698 /AC^
+020  _a0803712928 (trade) :_c$14.99^
+020  _a0803712936 (lib. bdg.) :_c$14.89^
+040  _aDLC_cDLC_dICrlF_dIMchF-DB_dICrlF^
+043  _an-us---^
+05000_aGT4403_b.P56 1993^
+08204_a394.26_220^
+1001 _aPinkney, Andrea Davis.^
+24510_aSeven candles for Kwanzaa /_cAndrea Davis Pinkney ; pictures by Brian Pinkney.^
+2463 _a7 candles for Kwanzaa^
+250  _a1st ed.^
+260  _aNew York :_bDial Books for Young Readers,_cc1993.^
+300  _a[32] p. :_bcol. ill. ;_c24 x 29 cm.^
+504  _aIncludes bibliographical references (p. [32]).^
+520  _aDescribes the origins and practices of Kwanzaa, the seven-day festival during which people of African descent rejoice in their ancestral values.^
+650 0_aKwanzaa_xJuvenile literature.^
+650 0_aAfro-Americans_xSocial life and customs_xJuvenile literature.^
+650 1_aKwanzaa.^
+650 1_aAfro-Americans_xSocial life and customs.^
+650 7_aKwanzaa._2sears^
+650 7_aAfrican Americans_xSocial life and customs._2sears^
+7001 _aPinkney, J. Brian,_eill.^
+900  _a394.26 PIN^
+9401 _a4.9_bK-3_sWilson's Children_sElem. School Library Collection_sSchool Library Journal^
+952  _a26038_cR_d394.26 PIN^`
+LDR00971pam  22     4a 4500^
+003IMchF^
+00520000321083032.8^
+008880225s1988    flua   j      001 0 eng  ^
+010  _a   88004686 /AC^
+020  _a0865924627^
+040  _aDLC_cDLC_dICrlF^
+0500 _aQL638.95.L3_bP35 1989^
+08204_a597.3/3_221^
+08200_a597/.31_219^
+1001 _aPalmer, Sarah,_d1955-^
+24510_aGreat white sharks /_cSarah Palmer ; illustrated by Ernest Nicol and Libby Turner.^
+260  _aVero Beach, FL :_bRourke,_cc1988.^
+300  _a24 p. :_bcol. ill. ;_c19 cm.^
+4901 _aShark discovery library^
+500  _aIncludes index.^
+520  _aA brief description of the physical characteristics, habits, and natural environment of the great white shark, considered to be the most dangerous shark of all.^
+650 0_aWhite shark_vJuvenile literature.^
+650 1_aWhite shark.^
+650 1_aSharks.^
+650 7_aWhite shark._2sears^
+650 7_aSharks._2sears^
+7001 _aHadler, Sally,_eill.^
+7001 _aNicol, Ernest,_eill.^
+8001 _aPalmer, Sarah,_d1955- _tShark discovery library.^
+900  _a597.3 PAL^
+9402 _a3.8_b3-6_sSchool Library Journal^
+952  _a1319_cR_d597.3 PAL^`
+LDR00887pam  22     4a 4500^
+003IMchF^
+00519991026155912.6^
+008880205c19891988flua   j      001 0 eng  ^
+010  _a   88003242 /AC^
+020  _a0865924775^
+040  _aDLC_cDLC_dICrlF^
+0500 _aQL737.C425_bP34 1989^
+08204_a599.5/22_221^
+08200_a599.5/1_219^
+1001 _aPalmer, Sarah,_d1955-^
+24510_aGray whales /_cSarah Palmer ; illustrated by Sally Hadler.^
+260  _aVero Beach, Fla. :_bRourke Enterprises,_c[1989], c1988.^
+300  _a23 p. :_bcol. ill. ;_c19 x 20 cm.^
+4901 _aThe Whale discovery library^
+500  _aIncludes index.^
+520  _aDescribes gray whales, where they live, what they eat, and their family life.^
+650 0_aPacific gray whale_xJuvenile literature.^
+650 1_aPacific gray whale.^
+650 1_aWhales.^
+650 7_aPacific gray whale._2sears^
+650 7_aWhales._2sears^
+7001 _aHadler, Sally,_eill.^
+8001 _aPalmer, Sarah,_d1955-_tWhale discovery library.^
+900  _a599.5 PAL^
+9402 _a3.6_b3-6_sSchool Library Journal^
+952  _a1325_cR_d599.5 PAL^`
+LDR00914pam  22     4a 4500^
+003IMchF^
+00519991027074126.3^
+008880204s1988    flua   j      001 0 eng  ^
+010  _a   88003238 /AC/r89^
+020  _a0865924783^
+040  _aDLC_cDLC_dDLC_dICrlF^
+05000_aQL737.C424_bP35 1988^
+08204_a599.5/25_221^
+08200_a599.5/1_219^
+1001 _aPalmer, Sarah,_d1955-^
+24510_aHumpback whales /_cSarah Palmer ; illustrated by Tony Gibbon.^
+260  _aVero Beach, Fla. :_bRourke Enterprises,_cc1988.^
+300  _a23 p. :_bcol. ill. ;_c19 x 20 cm.^
+4901 _aThe Whale discovery library^
+500  _aIncludes index.^
+520  _aIntroduces the physical appearance, habits, diet, and habitat of the humpback whale and threats to its existence.^
+650 0_aHumpback whale_xJuvenile literature.^
+650 1_aHumpback whale.^
+650 1_aWhales.^
+650 7_aHumpback whale._2sears^
+650 7_aWhales._2sears^
+7001 _aGibbon, Tony,_eill.^
+8001 _aPalmer, Sarah,_d1955-_tWhale discovery library.^
+900  _a599.5 PAL^
+9402 _a3.5_b3-6_sSchool Library Journal^
+952  _a1328_cR_d599.5 PAL^`
+LDR00879pam  22     4a 4500^
+003IMchF^
+00519991027074426.9^
+008880205s1988    flua   j      001 0 eng  ^
+010  _a   88003240 /AC^
+020  _a0865924767^
+040  _aDLC_cDLC_dDLC_dICrlF^
+05000_aQL737.C433_bP34 1988^
+08204_a599.5/43_221^
+08200_a599.5/3_219^
+1001 _aPalmer, Sarah,_d1955-^
+24510_aNarwhals /_cSarah Palmer ; illustrated by Sally Hadler.^
+260  _aVero Beach, Fla. :_bRourke Enterprises,_cc1988.^
+300  _a23 p. :_bcol. ill. ;_c19 cm.^
+4901 _aThe Whale discovery library^
+500  _aIncludes index.^
+520  _aIntroduces the physical appearance, habits, diet, and habitat of this toothed whale and threats to its existence.^
+650 0_aNarwhal_xJuvenile literature.^
+650 1_aNarwhal.^
+650 1_aWhales.^
+650 7_aNarwhal._2sears^
+650 7_aWhales._2sears^
+7001 _aHadler, Sally,_eill.^
+8001 _aPalmer, Sarah,_d1955-_tWhale discovery library.^
+900  _a599.5 PAL^
+9402 _a3.5_b3-6_sSchool Library Journal^
+952  _a1326_cR_d599.5 PAL^`
+LDR00804pam  22     4a 4500^
+003IMchF^
+00519991026121742.0^
+008891205s1990    flua   j      001 0 eng  ^
+010  _a   89070168 /AC^
+020  _a0865930422^
+040  _aDLC_cDLC_dDLC_dICrlF^
+05000_aQL737.C27_bS76 1990^
+08204_a599.78_221^
+08200_a599.74/446_220^
+1001 _aStone, Lynn M.^
+24510_aBears /_cLynn M. Stone.^
+260  _aVero Beach, Fla. :_bRourke Corp.,_cc1990.^
+300  _a24 p. :_bcol. ill ;_c19 cm.^
+4901 _aNorth American animal discovery library^
+500  _aIncludes index.^
+520  _aAn introduction to the physical characteristics, habits, natural environment, and future prospects of the three species of bears that live in North America.^
+650 0_aBears_xJuvenile literature.^
+650 1_aBears.^
+650 7_aBears._2sears^
+8001 _aStone, Lynn M._tNorth American animal discovery library.^
+900  _a599.74 STO^
+9402 _a2.8_b3-6^
+952  _a1308_cR_d599.74 STO^`
+LDR00978pam  22     4a 4500^
+003IMchF^
+008880815s1989    nyua   j      001 0 eng  ^
+010  _a   88026408 /AC^
+020  _a0671671227 :_c$14.95^
+040  _aDLC_cDLC_dICrlF^
+0500 _aQL737.C43_bM35 1989^
+0820 _a639.9/7953_219^
+1001 _aMallory, Kenneth.^
+24510_aRescue of the stranded whales /_cKenneth Mallory and Andrea Conley.^
+260  _aNew York :_bSimon and Schuster Books for Young Readers in association with the New England Aquarium,_c1989.^
+300  _a63 p. :_bcol. ill. ;_c27 cm.^
+520  _aDescribes the rescue, rehabilitation, and successful release of three young pilot whales that were stranded on a Cape Cod beach during the winter of 1986.^
+650 0_aWhales_xJuvenile literature.^
+650 0_aWildlife rescue_xJuvenile literature.^
+650 1_aWhales.^
+650 1_aWildlife rescue.^
+650 7_aWhales._2sears^
+650 7_aWildlife rescue._2sears^
+70010_aConley, Andrea.^
+71020_aNew England Aquarium Corporation.^
+900  _a639.9 MAL^
+9401 _a5.8_b3-6_sSchool Library Journal starred_sBook Links (A.L.A.)_sBooklist^
+952  _a20382_cR_d639.9 MAL^`
+LDR00815pam  22     2a 4500^
+003IMchF^
+00519970512073945.4^
+008960830s1996    nyua   j      001 0 eng  ^
+010  _a   96035196 /AC^
+020  _a0865056307 (RLB)^
+020  _a0865057303 (paper)^
+040  _aDLC_cDLC_dDLC_dICrlF^
+05000_aGV552_b.K35 1996^
+08204_a791.3_221^
+08200_a796.47_220^
+1001 _aKalman, Bobbie,_d1947-^
+24510_aKids perform circus arts /_cBobbie Kalman.^
+260  _aNew York :_bCrabtree Pub.,_cc1997.^
+300  _a32 p. :_bcol. ill. ;_c25 cm.^
+440 0_aCrabapples^
+500  _aIncludes index.^
+520  _aShows children learning and performing many of the acts that are used in a circus, including juggling, walking on a tightrope, swinging on a trapeze, and more.^
+650 0_aAcrobatics_xJuvenile literature.^
+650 0_aCircus_xJuvenile literature.^
+650 1_aCircus.^
+650 7_aCircus._2sears^
+900  _a791.3 KAL^
+9401 _a4.2_bK-3_sLibrary Talk^
+952  _a35078_cR_d791.3 KAL^`
+LDR00898nam  22     2a 4500^
+003IMchF^
+008890209s1989    enka   j      001 0beng  ^
+010  _a   89050205 /AC^
+020  _a0531108260 (lib. bdg.)^
+040  _aDLC_cDLC_dDLC_dICrlF^
+043  _ae-uk---^
+05000_aGV461_b.W64 1989^
+08200_a796.44/092_aB_220^
+1001 _aWood, Tim.^
+24510_aGymnastics /_cTim Wood ; photographs, Chris Fairclough.^
+260  _aLondon ;_aNew York :_bF. Watts,_cc1989.^
+300  _a32 p. :_bcol. ill. ;_c23 cm.^
+4901 _aMy sport^
+520  _aFollows gymnast Catherine Bain as she practices at her gymnastics club and participates in a championship competition.^
+60010_aBain, Catherine_xJuvenile literature.^
+60011_aBain, Catherine.^
+650 0_aGymnastics_xJuvenile literature.^
+650 0_aGymnasts_zGreat Britain_xBiography_xJuvenile literature.^
+650 1_aGymnastics.^
+650 7_aGymnastics._2sears^
+70011_aFairclough, Chris,_eill.^
+8001 _aWood, Tim._tMy sport.^
+900  _a796.44 WOO^
+9402 _a3.9_bK-3_sSchool Library Journal^
+952  _a20711_cR_d796.44 WOO^`
+LDR00751pam  22     7a 4500^
+003IMchF^
+00519900823110348.6^
+008891127s1990    nyua   j      001 0 eng  ^
+010  _a   89039677 /AC^
+020  _a0531140520^
+040  _aDLC_cDLC_dDLC_dICrlF^
+05000_aGV1114_b.W66 1990^
+08200_a796.8/152_220^
+1001 _aWood, Tim.^
+24510_aJudo /_cTim Wood ; photographs, Chris Fairclough.^
+260  _aNew York :_bF. Watts,_cc1990.^
+300  _a32 p. :_bchiefly col. ill. ;_c23 cm.^
+4901 _aMy sport^
+520  _aOutlines the training, special preparation, and techniques needed to compete successfully in judo.^
+650 0_aJudo_xJuvenile literature.^
+650 0_aJudo_xTraining_xJuvenile literature.^
+650 1_aJudo.^
+650 7_aJudo._2sears^
+70011_aFairclough, Chris,_eill.^
+8001 _aWood, Tim._tMy sport.^
+900  _a796.8 WOO^
+9401 _a4.4_bK-3_sSchool Library Journal^
+952  _a21173_cR_d796.8 WOO^`
+LDR00946cam  22     8a 4500^
+003IMchF^
+00519950911093837.1^
+008931206s1996    mnua   j      000 0 eng  ^
+010  _a   93048449 /AC^
+020  _a0886826845^
+040  _aDLC_cDLC_dDLC_dICrlF^
+043  _an-us-pa^
+05000_aGV848.P58_bG55 1994^
+08200_a796.962/64/0974886_220^
+1001 _aGilbert, John,_d1942-^
+24510_aPittsburgh Penguins /_cJohn Gilbert.^
+24630_aPenguins^
+260  _aMankato, Minn. :_bCreative Education,_cc1996.^
+300  _a32 p. :_bill. (some col.) ;_c25 cm.^
+440 0_aNHL today^
+520  _aPresents a history of the Pittsburgh Penguins hockey team, highlighting the games and players that have contributed to the team's success through the years.^
+61020_aPittsburgh Penguins (Hockey team)_xHistory_xJuvenile literature.^
+61021_aPittsburgh Penguins (Hockey team)_xHistory.^
+61027_aPittsburgh Penguins (Hockey team)_xHistory._2sears^
+61027_aNational Hockey League._2sears^
+650 1_aHockey_xHistory.^
+650 7_aHockey_xHistory._2sears^
+900  _a796.962 GIL^
+9401 _a6.5_b3-6^
+952  _a1353_cR_d796.962 GIL^`
+LDR00898pam  22      a 4500^
+003IMchF^
+00519900501094349.1^
+008890504s1990    njua   j      000 0 eng  ^
+010  _a   89034372 /AC^
+020  _a0816717354 (lib. bdg.) :_c$9.79^
+020  _a0816717362 (pbk.) :_c$2.95^
+040  _aDLC_cDLC_dDLC_dICrlF^
+043  _an-us-wi^
+05000_aTL721.6.O84_bC75 1990^
+08200_a797.5_220^
+1001 _aCrisfield, Deborah.^
+24513_aAn air show adventure /_cby Deborah Crisfield ; photography by Donald Emmerich.^
+260  _aMahwah, N.J. :_bTroll Associates,_cc1990.^
+300  _a32 p. :_bcol. ill. ;_c24 cm.^
+440 0_aLet's take a trip^
+520  _aDescribes events at the EAA Fly-in, an air show held in Oshkosh, Wisconsin, focusing on the unique aircraft on display.^
+650 0_aAir shows_zWisconsin_zOshkosh_xJuvenile literature.^
+650 1_aAir shows.^
+650 1_aAirplanes.^
+650 7_aAir shows._2sears^
+650 7_aAirplanes._2sears^
+70011_aEmmerich, Donald,_eill.^
+900  _a797.5 CRI^
+9401 _a5.3_b3-6_sSchool Library Journal^
+952  _a20779_cR_d797.5 CRI^`
+LDR00839pam  22     1a 4500^
+003IMchF^
+00519980204093521.4^
+008881013c19891963nyua   j      000 1 eng  ^
+010  _a   88007902 /AC^
+020  _a0689712995 :_c$4.95^
+020  _a0329035959^
+040  _aDLC_cDLC_dDLC_dICrlF^
+05000_aPZ8.3.B348_bAm 1989^
+08200_a811/.54_aE_219^
+1001 _aBaylor, Byrd.^
+24510_aAmigo /_cby Byrd Baylor ; illustrated by Garth Williams.^
+250  _a1st Aladdin Books ed.^
+260  _aNew York :_bAladdin Books,_c1989, c1963.^
+300  _a41 p. :_bcol. ill. ;_c23 cm.^
+520  _aDesperately wanting a pet to love, a boy decides to tame a prairie dog who has already decided to tame the boy for his own pet.^
+650 1_aPrairie dogs_xFiction.^
+650 1_aPets_xFiction.^
+650 1_aStories in rhyme.^
+650 7_aPrairie dogs_xFiction._2sears^
+650 7_aPets_xFiction._2sears^
+650 7_aStories in rhyme._2sears^
+70011_aWilliams, Garth,_eill.^
+900  _a811 BAY^
+9402 _a2.5_bK-3^
+952  _a622_cR_d811 BAY^`
+LDR00866cam  22      a 4500^
+003IMchF^
+008791101c19791978nyua   j      001 0 eng  ^
+010  _a   78068532 /AC/r84^
+020  _a0531091244^
+040  _aDLC_cDLC_dICrlF^
+043  _ae-gr---^
+0500 _aDF77_b.F23 1978^
+082  _a938^
+1001 _aFagg, Christopher.^
+24510_aAncient Greece /_c[Christopher Fagg ; editor, Frances M. Clapham ; illustrators, Constance Dear ... et al.].^
+260  _aNew York :_bWarwick Press,_c1979, c1978.^
+300  _a44 p. :_bcol. ill. ;_c28 cm.^
+4900 _aModern knowledge library^
+500  _aIncludes index.^
+520  _aDiscusses the civilization of the ancient Greeks who were the first to develop a democratic way of life.^
+650 7_aCivilization, Greek._2sears^
+651 0_aGreece_xCivilization_yTo 146 B.C._xJuvenile literature.^
+651 1_aGreece_xCivilization_yTo 146 B.C.^
+651 7_aGreece_xHistory._2sears^
+70010_aDear, Constance.^
+900  _a938 FAG^
+9401 _a6.6_b5-8_sSchool Library Journal^
+952  _a31798_cR_d938 FAG^`
+LDR00846cam  22     5a 4500^
+003IMchF^
+00519931020141518.6^
+008860407s1986    iluab  j      001 0 eng  ^
+010  _a   86009631 /AC/r93^
+020  _a0516012886^
+040  _aDLC_cDLC_dDLC_dICrlF^
+043  _aa------^
+05000_aDS10_b.G42 1986^
+08200_a950_219^
+1001 _aGeorges, D. V.^
+24510_aAsia /_cby D.V. Georges.^
+260  _aChicago :_bChildrens Press,_cc1986.^
+300  _a45 p. :_bill. (some col.), maps (some col.) ;_c23 cm.^
+4900 _aA New true book^
+500  _aIncludes index.^
+520  _aIdentifies the continent of Asia, divides it into seven regions, including the Middle East, Siberia, Far East, and Himalayas, and discusses their countries, cities, and geographical features.^
+651 0_aAsia_xDescription and travel_xJuvenile literature.^
+651 1_aAsia_xDescription and travel.^
+651 7_aAsia_xGeography._2sears^
+651 7_aAsia_xDescription._2sears^
+900  _a950 GEO^
+9402 _a3.2_bK-3^
+952  _a25031_cR_d950 GEO^`
+LDR00916pam  22      a 4500^
+003IMchF^
+00520000829122433.8^
+008910430s1992    flua   j      001 0 eng  ^
+010  _a   91004114 /AC^
+020  _a0866253904^
+040  _aDLC_cDLC_dDLC_dICrlF^
+043  _anp-----_an-ust--^
+05000_aE99.C85_bL63 1992^
+08204_a978.004/9745_221^
+08200_a973/.04974_220^
+1001 _aLodge, Sally,_d1953-^
+24514_aThe Comanche /_cby Sally Lodge ; illustrated by Katherine Ace.^
+260  _aVero Beach, Fla. :_bRourke Publications,_cc1992.^
+300  _a31 p. :_bill. (some col.) ;_c29 cm.^
+440 0_aNative American people^
+500  _aIncludes index.^
+520  _aExamines the history, traditional lifestyle, and current situation of the Comanche Indians.^
+650 0_aComanche Indians_xJuvenile literature.^
+650 1_aComanche Indians.^
+650 1_aIndians of North America.^
+650 7_aComanche Indians._2sears^
+650 7_aNative Americans_zUnited States._2sears^
+7001 _aAce, Katherine,_eill.^
+900  _a973 LOD^
+9401 _a6.9_b5-8_sSchool Library Journal_sBooklist^
+952  _a1263_cR_d973 LOD^`
+LDR00192nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAbe Lincoln :_bthe young years.^
+260  _bTroll,_c1982.^
+300  _a[ ] p.^
+900  _aABE^
+952  _a31897_cR_dABE^`
+LDR00236nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAbe Lincoln goes to Washington.^
+260  _a[Washington, D.C.] :_bNational Geographic Society,_c1996.^
+300  _a[ ] p.^
+900  _aABE^
+952  _a25846_cR_dABE^`
+LDR00199nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAbigail Adams :_bdear partner.^
+260  _bChelsea House,_c1991.^
+300  _a[ ] p.^
+900  _aABI^
+952  _a25333_cR_dABI^`
+LDR00169nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAbiyoyo.^
+260  _bPuffin,_c1986.^
+300  _a[ ] p.^
+900  _aABI^
+952  _a2000_cR_dABI^`
+LDR00203nam  22     2  4500^
+00520011119075709.0^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 3_aAn aboriginal family.^
+260  _bLerner,_c1985.^
+300  _a[ ] p.^
+900  _aABO^
+952  _a32051_cR_dABO^`
+LDR00202nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAbracadabra kid :_ba writer's life.^
+260  _bGreenwillow,_c1996.^
+300  _a[ ] p.^
+900  _aABR^
+952  _a25847_cR_dABR^`
+LDR00183nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAbraham Lincoln.^
+260  _bBridgestone,_c1998.^
+300  _a[ ] p.^
+900  _aABR^
+952  _a35259_cR_dABR^`
+LDR00178nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAbraham Lincoln.^
+260  _bPebble,_c1998.^
+300  _a[ ] p.^
+900  _aABR^
+952  _a35258_cR_dABR^`
+LDR00197nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAbraham Lincoln :_bfor the people.^
+260  _bChelsea,_c1991.^
+300  _a[ ] p.^
+900  _aABR^
+952  _a25334_cR_dABR^`
+LDR00237nam  22     2  4500^
+00520011119075709.0^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 4_aThe absoluetly true story - how I visted Yellow Stone P^
+260  _bAladdin,_c1994.^
+300  _a[ ] p.^
+900  _aABS^
+952  _a2207_cR_dABS^`
+LDR00178nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAbsolute rulers.^
+260  _bGarret,_c1992.^
+300  _a[ ] p.^
+900  _aABS^
+952  _a35154_cR_dABS^`
+LDR00189nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAbuelitas paradise.^
+260  _a[S.l. :_bs.n.],_c1992.^
+300  _a[ ] p.^
+900  _aABU^
+952  _a25189_cR_dABU^`
+LDR00177nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAce defense men.^
+260  _bRourke,_c1994.^
+300  _a[ ] p.^
+900  _aACE^
+952  _a1223_cR_dACE^`
+LDR00181nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAcross the lines.^
+260  _bAtheneum,_c1997.^
+300  _a[ ] p.^
+900  _aACR^
+952  _a25848_cR_dACR^`
+LDR00180nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAcross the stream.^
+260  _bMulberry,_c1986.^
+300  _a[ ] p.^
+900  _aACR^
+952  _a777_cR_dACR^`
+LDR00170nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aActor.^
+260  _bCapstone,_c1998.^
+300  _a[ ] p.^
+900  _aACT^
+952  _a35392_cR_dACT^`
+LDR00182nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAddie meets Max.^
+260  _bHarper Trophy,_c1985.^
+300  _a[ ] p.^
+900  _aADD^
+952  _a41_cR_dADD^`
+LDR00179nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAddition Annie.^
+260  _bChildrens,_c1991.^
+300  _a[ ] p.^
+900  _aADD^
+952  _a2001_cR_dADD^`
+LDR00189nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAddy learns a lesson.^
+260  _bPleasant Co.,_c1993.^
+300  _a[ ] p.^
+900  _aADD^
+952  _a26006_cR_dADD^`
+LDR00187nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAddy saves the day.^
+260  _bPleasant Co.,_c1994.^
+300  _a[ ] p.^
+900  _aADD^
+952  _a25849_cR_dADD^`
+LDR00199nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAddy's surprise :_ba Christmas.^
+260  _bPleasant Co.,_c1993.^
+300  _a[ ] p.^
+900  _aADD^
+952  _a26007_cR_dADD^`
+LDR00209nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAdopted by the eagles.^
+260  _bMaxwell Macmillan International,_c1994.^
+300  _a[ ] p.^
+900  _aADO^
+952  _a25703_cR_dADO^`
+LDR00193nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAdoption is for always.^
+260  _bAlbert Whitman,_c1986.^
+300  _a[ ] p.^
+900  _aADO^
+952  _a20181_cR_dADO^`
+LDR00199nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAdventures of a 2-minute werewolf.^
+260  _bDoubleday,_c1983.^
+300  _a[ ] p.^
+900  _aADV^
+952  _a31944_cR_dADV^`
+LDR00197nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAdventures of Captain Underpants.^
+260  _bBlue Sky,_c1997.^
+300  _a[ ] p.^
+900  _aADV^
+952  _a26039_cR_dADV^`
+LDR00221nam  22     2  4500^
+00520011119075709.0^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 4_aThe adventures of High John.^
+260  _bOrchard Conqueror,_c1989.^
+300  _a[ ] p.^
+900  _aADV^
+952  _a20515_cR_dADV^`
+LDR00187nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAdventures with a string.^
+260  _bDutton,_c1965.^
+300  _a[ ] p.^
+900  _aADV^
+952  _a30147_cR_dADV^`
+LDR00187nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAdventurs of a paper cup.^
+260  _bDutton,_c1968.^
+300  _a[ ] p.^
+900  _aADV^
+952  _a30076_cR_dADV^`
+LDR00179nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAdvertising.^
+260  _bGarrett Ed.,_c1990.^
+300  _a[ ] p.^
+900  _aADV^
+952  _a35155_cR_dADV^`
+LDR00187nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAesop for children.^
+260  _bRand McNally,_c1919.^
+300  _a[ ] p.^
+900  _aAES^
+952  _a32780_cR_dAES^`
+LDR00182nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAesop's fables.^
+260  _bJunior Bks.,_c1988.^
+300  _a[ ] p.^
+900  _aAES^
+952  _a20118_cR_dAES^`
+LDR00202nam  22     2  4500^
+00520011119075709.0^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 4_aThe African rhinos.^
+260  _bMaxwell,_c1992.^
+300  _a[ ] p.^
+900  _aAFR^
+952  _a25190_cR_dAFR^`
+LDR00205nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAfter the goat man.^
+260  _bPuffin,_c1974.^
+300  _a[ ] p.^
+900  _aAFT^
+952  _a42_t1_cR_dAFT^
+952  _a31583_t2_cR_dAFT^`
+LDR00198nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAge of Aquarius; you and astrology.^
+260  _bCrowell,_c1979.^
+300  _a[ ] p.^
+900  _aAGE^
+952  _a31791_cR_dAGE^`
+LDR00197nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAids :_bhow it works in the body.^
+260  _bF. Watts,_c1992.^
+300  _a[ ] p.^
+900  _aAID^
+952  _a25191_cR_dAID^`
+LDR00175nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAir.^
+260  _bChildrens Press,_c1982.^
+300  _a[ ] p.^
+900  _aAIR^
+952  _a25020_cR_dAIR^`
+LDR00182nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAir assault teams.^
+260  _bCapstone,_c1996.^
+300  _a[ ] p.^
+900  _aAIR^
+952  _a33001_cR_dAIR^`
+LDR00179nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAircraft carriers.^
+260  _bWatts,_c1986.^
+300  _a[ ] p.^
+900  _aAIR^
+952  _a20403_cR_dAIR^`
+LDR00182nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAircraft carriers.^
+260  _bCapstone,_c1998.^
+300  _a[ ] p.^
+900  _aAIR^
+952  _a35000_cR_dAIR^`
+LDR00171nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAirliners.^
+260  _bWatts,_c1984.^
+300  _a[ ] p.^
+900  _aAIR^
+952  _a30798_cR_dAIR^`
+LDR00177nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAirplanes.^
+260  _bCopper Beech,_c1995.^
+300  _a[ ] p.^
+900  _aAIR^
+952  _a1161_cR_dAIR^`
+LDR00172nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlabama.^
+260  _bCapstone,_c1998.^
+300  _a[ ] p.^
+900  _aALA^
+952  _a35393_cR_dALA^`
+LDR00194nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlabama in words and pictures.^
+260  _bChildren,_c1980.^
+300  _a[ ] p.^
+900  _aALA^
+952  _a31850_cR_dALA^`
+LDR00181nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlarming animals.^
+260  _bRaintree,_c1994.^
+300  _a[ ] p.^
+900  _aALA^
+952  _a25509_cR_dALA^`
+LDR00171nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlaska.^
+260  _bCapstone,_c1998.^
+300  _a[ ] p.^
+900  _aALA^
+952  _a35394_cR_dALA^`
+LDR00182nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlbert Schweitzer.^
+260  _bBardett,_c[19--]^
+300  _a[ ] p.^
+900  _aALB^
+952  _a21033_cR_dALB^`
+LDR00181nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlberts ballgame.^
+260  _bAtheneum,_c1996.^
+300  _a[ ] p.^
+900  _aALB^
+952  _a25757_cR_dALB^`
+LDR00200nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlbum or rocks and minerals.^
+260  _bCheckboard Press,_c1987.^
+300  _a[ ] p.^
+900  _aALB^
+952  _a25023_cR_dALB^`
+LDR00239nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlexander and the terrible, horrible, no good very bad^
+260  _bAladdin,_c1972.^
+300  _a[ ] p.^
+900  _aALE^
+952  _a44_t1_cR_dALE^
+952  _a781_t2_cR_dALE^`
+LDR00204nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlexander who used to be rich last Sunday.^
+260  _bMacmillan,_c1988.^
+300  _a[ ] p.^
+900  _aALE^
+952  _a45_cR_dALE^`
+LDR00185nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlfonse, where are you?.^
+260  _bCrown,_c1996.^
+300  _a[ ] p.^
+900  _aALF^
+952  _a26008_cR_dALF^`
+LDR00214nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAl Gore, vice president.^
+260  _bMillbrook,_c1994.^
+300  _a[ ] p.^
+900  _aALG^
+952  _a25508_t1_cR_dALG^
+952  _a764_t2_cR_dALG^`
+LDR00173nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlgeria.^
+260  _bChildrens,_c1990.^
+300  _a[ ] p.^
+900  _aALG^
+952  _a25026_cR_dALG^`
+LDR00191nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAli Baba & the forty thieves.^
+260  _bAbrams,_c1988.^
+300  _a[ ] p.^
+900  _aALI^
+952  _a20480_cR_dALI^`
+LDR00200nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlice and the boa constrictor.^
+260  _a[S.l. :_bs.n.],_c1983.^
+300  _a[ ] p.^
+900  _aALI^
+952  _a30725_cR_dALI^`
+LDR00202nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlice Nizzy Nazzy, the witch of Santa Fe.^
+260  _bPutnam,_c1995.^
+300  _a[ ] p.^
+900  _aALI^
+952  _a2002_cR_dALI^`
+LDR00190nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAliens don't wear braces.^
+260  _bScholastic,_c1993.^
+300  _a[ ] p.^
+900  _aALI^
+952  _a2003_cR_dALI^`
+LDR00186nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAliens for breakfast.^
+260  _bRandom House,_c1988.^
+300  _a[ ] p.^
+900  _aALI^
+952  _a46_cR_dALI^`
+LDR00182nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAliens for lunch.^
+260  _bRandom House,_c1991.^
+300  _a[ ] p.^
+900  _aALI^
+952  _a47_cR_dALI^`
+LDR00179nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAll aboard!.^
+260  _bGreenwillow,_c1995.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a25631_cR_dALL^`
+LDR00187nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAll about alligators.^
+260  _bScholastic,_c1994.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a25623_cR_dALL^`
+LDR00174nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAll about Stacey.^
+260  _bDell,_c1988.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a49_cR_dALL^`
+LDR00180nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAll about whales.^
+260  _bHoliday,_c1987.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a20571_cR_dALL^`
+LDR00183nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAll about where.^
+260  _bGreenwillow,_c1991.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a21379_cR_dALL^`
+LDR00218nam  22     2  4500^
+00520011119075709.0^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 4_aThe all around Cristmas.^
+260  _bRinehart & Winston,_c1982.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a30716_cR_dALL^`
+LDR00206nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAll God's critters got a place in the choir.^
+260  _bDutton,_c1978.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a20516_cR_dALL^`
+LDR00173nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAll I see.^
+260  _bOrchard,_c1988.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a20275_cR_dALL^`
+LDR00181nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAll Joseph Wanted.^
+260  _bMacmillan,_c1991.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a536_cR_dALL^`
+LDR00215nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAll night, all day :_ba child's first-- spirituals.^
+260  _bAtheneum,_c1991.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a25851_cR_dALL^`
+LDR00208nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAll of our noses are here & other tales.^
+260  _bHarper & Row,_c1985.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a32095_cR_dALL^`
+LDR00190nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAll the colors of the earth.^
+260  _bMorrow,_c1994.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a25510_cR_dALL^`
+LDR00184nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAll-terrian bicyclaling.^
+260  _bHolt,_c1987.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a20911_cR_dALL^`
+LDR00170nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlligators.^
+260  _bAbdo,_c1994.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a1160_cR_dALL^`
+LDR00200nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlligators and others all year long!.^
+260  _bMaxwell,_c1993.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a25402_cR_dALL^`
+LDR01079pam  22     4a 4500^
+003IMchF^
+00519900517135337.0^
+008890912r1990    maua   j      000 1 eng  ^
+010  _a   89013282 /AC^
+020  _a0316034134 :_c$12.95^
+040  _aDLC_cDLC_dDLC_dICrlF^
+05000_aPZ7.A4277_bWh 1990^
+08200_a[Fic]_220^
+1001 _aAllen, Linda.^
+24010_aParrot in the house^
+24510_aWhen grandfather's parrot inherited Kennington Court /_cby Linda Allen ; illustrated by Katinka Kew.^
+250  _a1st U.S. ed.^
+260  _aBoston :_bJoy Street Books,_c1990.^
+300  _a68 p. :_bill. ;_c22 cm.^
+500  _aPreviously published under title: A parrot in the house.^
+500  _a"First published in the U.K. in 1988 by Hodder and Stoughton Ltd."--T.p. verso.^
+520  _aAppalled that Grandfather left his inheritance to his parrot, the relatives seek to break the will; but young Miranda, who is caring for the parrot, makes a discovery that settles everything.^
+650 1_aMystery and detective stories.^
+650 1_aParrots_xFiction.^
+650 7_aMystery and detective stories._2sears^
+650 7_aParrots_xFiction._2sears^
+651 1_aEngland_xFiction.^
+651 7_aEngland_xFiction._2sears^
+70011_aKew, Katinka,_eill.^
+900  _aALL^
+952  _a21117_cR_dALL^`
+LDR00178nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlmost good-bye.^
+260  _bDutton,_c1990.^
+300  _a[ ] p.^
+900  _aALM^
+952  _a21497_cR_dALM^`
+LDR00186nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlmost starring skinnybones.^
+260  _bKnopf,_c1988.^
+300  _a[ ] p.^
+900  _aALM^
+952  _a51_cR_dALM^`
+LDR00186nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlmost the real thing.^
+260  _bBradbury,_c1991.^
+300  _a[ ] p.^
+900  _aALM^
+952  _a21369_cR_dALM^`
+LDR00185nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlong came a dog.^
+260  _bHarper & Trophy,_c1958.^
+300  _a[ ] p.^
+900  _aALO^
+952  _a52_cR_dALO^`
+LDR00176nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlphabet city.^
+260  _bViking,_c1995.^
+300  _a[ ] p.^
+900  _aALP^
+952  _a25758_cR_dALP^`
+LDR00201nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlzheimer's disease :_bsilent epidemic.^
+260  _bLerner,_c1985.^
+300  _a[ ] p.^
+900  _aALZ^
+952  _a32074_cR_dALZ^`
+LDR00191nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAmanda Pig and her big brother.^
+260  _bDial,_c1982.^
+300  _a[ ] p.^
+900  _aAMA^
+952  _a32294_cR_dAMA^`

Added: packages/libmarc-record-perl/branches/upstream/current/t/sample20.lif
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/sample20.lif	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/sample20.lif	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,181 @@
+header 20 rec MicroLIF file                                                     
+LDR00180nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAll about whales.^
+260  _bHoliday,_c1987.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a20571_cR_dALL^`
+LDR00183nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAll about where.^
+260  _bGreenwillow,_c1991.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a21379_cR_dALL^`
+LDR00218nam  22     2  4500^
+00520011119075709.0^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 4_aThe all around Cristmas.^
+260  _bRinehart & Winston,_c1982.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a30716_cR_dALL^`
+LDR00206nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAll God's critters got a place in the choir.^
+260  _bDutton,_c1978.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a20516_cR_dALL^`
+LDR00173nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAll I see.^
+260  _bOrchard,_c1988.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a20275_cR_dALL^`
+LDR00181nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAll Joseph Wanted.^
+260  _bMacmillan,_c1991.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a536_cR_dALL^`
+LDR00215nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAll night, all day :_ba child's first-- spirituals.^
+260  _bAtheneum,_c1991.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a25851_cR_dALL^`
+LDR00208nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAll of our noses are here & other tales.^
+260  _bHarper & Row,_c1985.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a32095_cR_dALL^`
+LDR00190nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAll the colors of the earth.^
+260  _bMorrow,_c1994.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a25510_cR_dALL^`
+LDR00184nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAll-terrian bicyclaling.^
+260  _bHolt,_c1987.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a20911_cR_dALL^`
+LDR00170nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlligators.^
+260  _bAbdo,_c1994.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a1160_cR_dALL^`
+LDR00200nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlligators and others all year long!.^
+260  _bMaxwell,_c1993.^
+300  _a[ ] p.^
+900  _aALL^
+952  _a25402_cR_dALL^`
+LDR01079pam  22     4a 4500^
+003IMchF^
+00519900517135337.0^
+008890912r1990    maua   j      000 1 eng  ^
+010  _a   89013282 /AC^
+020  _a0316034134 :_c$12.95^
+040  _aDLC_cDLC_dDLC_dICrlF^
+05000_aPZ7.A4277_bWh 1990^
+08200_a[Fic]_220^
+1001 _aAllen, Linda.^
+24010_aParrot in the house^
+24510_aWhen grandfather's parrot inherited Kennington Court /_cby Linda Allen ; illustrated by Katinka Kew.^
+250  _a1st U.S. ed.^
+260  _aBoston :_bJoy Street Books,_c1990.^
+300  _a68 p. :_bill. ;_c22 cm.^
+500  _aPreviously published under title: A parrot in the house.^
+500  _a"First published in the U.K. in 1988 by Hodder and Stoughton Ltd."--T.p. verso.^
+520  _aAppalled that Grandfather left his inheritance to his parrot, the relatives seek to break the will; but young Miranda, who is caring for the parrot, makes a discovery that settles everything.^
+650 1_aMystery and detective stories.^
+650 1_aParrots_xFiction.^
+650 7_aMystery and detective stories._2sears^
+650 7_aParrots_xFiction._2sears^
+651 1_aEngland_xFiction.^
+651 7_aEngland_xFiction._2sears^
+70011_aKew, Katinka,_eill.^
+900  _aALL^
+952  _a21117_cR_dALL^`
+LDR00178nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlmost good-bye.^
+260  _bDutton,_c1990.^
+300  _a[ ] p.^
+900  _aALM^
+952  _a21497_cR_dALM^`
+LDR00186nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlmost starring skinnybones.^
+260  _bKnopf,_c1988.^
+300  _a[ ] p.^
+900  _aALM^
+952  _a51_cR_dALM^`
+LDR00186nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlmost the real thing.^
+260  _bBradbury,_c1991.^
+300  _a[ ] p.^
+900  _aALM^
+952  _a21369_cR_dALM^`
+LDR00185nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlong came a dog.^
+260  _bHarper & Trophy,_c1958.^
+300  _a[ ] p.^
+900  _aALO^
+952  _a52_cR_dALO^`
+LDR00176nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlphabet city.^
+260  _bViking,_c1995.^
+300  _a[ ] p.^
+900  _aALP^
+952  _a25758_cR_dALP^`
+LDR00201nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAlzheimer's disease :_bsilent epidemic.^
+260  _bLerner,_c1985.^
+300  _a[ ] p.^
+900  _aALZ^
+952  _a32074_cR_dALZ^`
+LDR00191nam  22     2  4500^
+008891207s19xx    xxu           00010 eng d^
+040  _cIMchF^
+245 0_aAmanda Pig and her big brother.^
+260  _bDial,_c1982.^
+300  _a[ ] p.^
+900  _aAMA^
+952  _a32294_cR_dAMA^`

Added: packages/libmarc-record-perl/branches/upstream/current/t/title_proper.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/title_proper.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/title_proper.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,33 @@
+# $Id: title_proper.t,v 1.4 2003/05/08 14:45:46 petdance Exp $
+
+use strict;
+use integer;
+
+use Test::More tests=>14;
+
+BEGIN {
+    use_ok( 'MARC::File::USMARC' );
+}
+
+my @titles = (
+    'Current population reports. Series P-20, Population characteristics.',
+    'Current population reports. Series P-60, Consumer income.',
+    'Physical review. A, Atomic, molecular, and optical physics',
+    'Physical review. B, Condensed matter',
+    'America and the British Labour Party :',
+);
+
+my $file = MARC::File::USMARC->in( 't/title_proper.usmarc' );
+isa_ok( $file, 'MARC::File::USMARC', 'USMARC file' );
+
+while ( my $marc = $file->next() ) {
+    isa_ok( $marc, 'MARC::Record', 'Got a record' );
+
+    my $title = shift @titles;
+    is( $marc->title_proper, $title );
+}
+ok( !$MARC::File::ERROR, "Should have no error" );
+is( scalar @titles, 0, "no titles left to check" );
+
+$file->close;
+


Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/title_proper.t
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/libmarc-record-perl/branches/upstream/current/t/title_proper.usmarc
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/title_proper.usmarc	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/title_proper.usmarc	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1 @@
+02179cas  2200553 a 45e0001000700000005001700007008004100024010001700065035002300082035001400105035001100119040011800130016002000248019003800268022001400306035001800320042001300338043001200351050001600363060001400379074001400393082001000407086001900417086001800436049000900454210004700463222007200510245007500582246003100657260011900688265006500807300003100872362002200903500003500925500007000960510003201030510004101062530007701103651005601180710004201236740003301278780010601311850004901417856005401466891002401520891004101544936002801585994001201613
913380
20030124101153.0
751101c19479999dcuuu1m      f0   a0eng  
  a   52002169 
  a(OCoLC)ocm01768314
  9ADZ9243AM
  a913380
  aDLCcMULdCOOdNSDdDLCdGPOdNSTdDLCdRCSdGPOdAIPdOCLdNSDdOCLdIULdHULdNSTdIULdHULdNSTdMYGdSYSdTXA
7 aC566430002DNLM
  a2260037a2260038a5087003a853216
0 a0363-6836
  a0755033bMULS
  ansdpalc
  an-us---
00aHA195b.A53
0 aW2 A B9CU
  a0142-C-01
0 a312.9
0 aC 56.218:P-20/
0 aC 3.186:P-20/
  aTXAM
0 aCurr. popul. rep., Ser. P-20, Popul. char.
 0aCurrent population reports. Series P-20, Population characteristics
00aCurrent population reports.nSeries P-20,pPopulation characteristics.
10aPopulation characteristics
  a[Washington, D.C.] :bU.S. Dept. of Commerce, Bureau of the Census :bFor sale by the Supt. of Docs., U.S. G.P.O.,
  aSupt. of Docs., U.S. Govt. Print. Off., Washington, DC 20402
  av. :bill., maps ;c27 cm.
1 aBegan with No. 1.
  aDescription based on: No. 352.
  aPrior to January 1976 issues were classified C 56.218:P-20/(nos.)
2 aPopulation indexx0032-4701
0 aAmerican statistics indexx0091-1658
  aSome issues also available online via the World Wide Web, in PDF format.
 0aUnited StatesxPopulationvStatisticsvPeriodicals.
1 aUnited States.bBureau of the Census.
0 aPopulation-special subjects.
05tCurrent population reports. Series P-27, Farm populationx1048-6283w(DLC)sf 87037999w(OCoLC)7226532
  aAUaDLCaInUaMH-KGaMH-PAaMH-SRaMdUaPU-W
41uhttp://www.census.gov/mp/www/pub/pop/mspop01.html
03985381ano.i(year)
40986381a<324>-i<1978>-xprovisional
  aNo. 404 (Nov. 1985) LIC
  aE0bTXA

01858cas  2200457 a 4500001000700000005001700007008004100024010002300065019003300088022001400121035002000135035001400155035001100169040012300180042001300303043001200316049000900328050001800337060001600355069001400371074001400385082002100399086001800420210004900438222006100487245006400548246002000612260011900632265006600751300001700817362002200834500016800856500003501024510004101059530007701100500006201177650002701239650003001266710004201296856006201338
913385
20030124101154.0
790313c19489999dcuuu1m      f0   a0eng  
  a   52002108 //r822
  a01779114a07619124a11810351
0 a0730-4803
  a(OCoLC)04738786
  9ADZ9248AM
  a913385
  aDLCcCPOdNLMdMULdGPOdNSDdGPOdHULdDLCdNSTdDLCdNSTdRCSdOCLdNSDdHULdNSTdDLCdOCLdNSTdDLCdNSTdMYGdTXA
  ansdpalc
  an-us---
  aTXAO
00aHC110.I5bA53
0 aW2 A B9CUBM
1 aC56641000
  a0142-C-07
00a339.2/2/0973219
0 aC 3.186:P-60/
0 aCurr. popul. rep., Ser. P-60, Consum. income
 0aCurrent population reports. Series P-60, Consumer income
00aCurrent population reports.nSeries P-60,pConsumer income.
10aConsumer income
  a[Washington, D.C.?] :bU.S. Dept. of Commerce, Bureau of the Census :bFor sale by the Supt. of Docs, U.S. G.P.O.,
  aSupt. of Docs., U.S. Govt. Print. Off., Washington, DC, 20402
  av. ;c27 cm.
1 aBegan with No. 1.
  aPrior to January 1976 issues were classified C 56.218:P-60/ during the time the Census Bureau was subordinate to the Social and Economic Statistics Administration.
  aDescription based on: No. 115.
0 aAmerican statistics indexx0091-1658
  aSome issues available also online via the World Wide Web, in PDF format.
  aPoverty in the United States is classed under C 3.186/22:
 0aIncomezUnited States.
 0aConsumerszUnited States.
1 aUnited States.bBureau of the Census.
41uhttp://www.census.gov/ftp/pub/mp/www/pub/pop/mspop10.html

01866cas  2200469 a 4500001000800000005001700008008004100025006001900066007000700085010001700092022001400109035002000123035001400143035001200157040002300169042001400192049000900206082001200215130003300227210004700260222007300307245008900380246005300469246000800522246004300530260005000573310001200623500008100635506008800716516010700804530006500911538003600976500003001012650002601042650003401068650003401102655003801136710003101174776006801205780008701273856003601360
1665454
20030124102744.0
970618c199u9999mdumr1p       0   a0eng d
m        d        
crucnu
  asn 97004211 
0 a1094-1622
  a(OCoLC)37142044
  9AHN6270AM
  a1665454
  aNSDcNSDdHLSdOCL
  ansdpalcd
  aTXAM
10a530212
0 aPhysical review.  A (Online)
0 aPhys. rev., A At. mol. opt. phy.b(Online)
 0aPhysical review. A, Atomic, molecular, and optical physicsb(Online)
00aPhysical review.nA,pAtomic, molecular, and optical physicsh[electronic resource].
1 iTitle on "entry" page:aPhysical review A online
3 aPRA
30aAtomic, molecular, and optical physics
  aCollege Park, MD :bAmerican Physical Society
  aMonthly
  aDescription based on: Vol. 55, issue 1 (Jan. 1997); title from title screen.
  aAvailable to those with print subscription; requires special login ID and password.
8 aTable of contents available in HTML and PDF format; articles are Acrobat PDF only (electronic journal)
  aOnline version of the print publication: Physical review. A.
  aMode of access: World Wide Web.
  aText (electronic journal)
 0aPhysicsxPeriodicals.
 0aNuclear physicsxPeriodicals.
 0aPhysical opticsxPeriodicals.
 7aComputer network resources.2lcsh
2 aAmerican Physical Society.
1 tPhysical review. Ax1050-2947w(DLC) 90656533w(OCoLC) 21266025
00tPhysical review.  A, General physicsx0556-2791w(DLC)   75021361w(OCoLC) 1083925
7 uhttp://ojps.aip.org/prao/2http

02267cas  2200517 a 45e0001000800000005001700008006001900025007001500044008004100059010001700100035002300117035002000140035001400160035001200174040002800186022001400214042001400228082001200242049000900254050001900263130005200282210004500334222005100379245006700430246005800497246003100555246000800586246002100594260006000615310001600675362004800691500011900739500008400858500003000942506003600972516012101008530008301129538003601212650003501248710003101283776008601314785009801400856018901498856005001687994001201737
1665455
20030124102745.0
m        d        
cr cnu--------
970826d199u1997mdusr1p s     0   a0eng d
  asn 97004477 
  a(OCoLC)ocm37528569
  a(OCoLC)37528569
  9AHN6271AM
  a1665455
  aNSDcNSDdEYMdOCLdIUL
0 a1095-3795
  ansdpalcd
10a530212
  aTXAM
14aQC176.A1bP513
0 aPhysical review.nB,pCondensed matter (Online)
0 aPhys. rev., B, Condens. matterb(Online)
 0aPhysical review. B, Condensed matterb(Online)
00aPhysical review.nB,pCondensed matterh[electronic resource].
1 iTitle on journal home page:aPhysical review B online
1 iAlso known as:aPRB online
30aPRB
30aCondensed matter
  aCollege Park, Md. :bAmerican Physical Society,c-1997.
  aSemimonthly
1 aCeased with Vol. 56, no. 24 (15 Dec. 1997).
  aDescription based on: Vol. 55, issue 1 (Jan. 1997); title from title screen of HTML file (viewed on June 9, 1998).
  aDescription based on: Vol. 55, issue 1 (Jan. 1, 1997); title from title screen.
  aText (electronic journal)
  aAvailable by subscription only.
8 aTable of contents and abstracts available in HTML and PDF format; articles are Acrobat PDF only (electronic journal)
  aOnline version of print publication including Rapid communications and Briefs.
  aMode of access: World Wide Web.
 0aCondensed mattervPeriodicals.
2 aAmerican Physical Society.
1 tPhysical review. B, Condensed matterx0163-1829w(DLC)   80644831w(OCoLC)4206245
00tPhysical review. B, Condensed matter and materials physicsw(DLC)sn 98034465w(OCoLC)39296657
40uhttp://library.tamu.edu/resources/ASP/track.asp?resource=Physical+Review+Online+Archive+%28PROLA%29zOnline version of articles available through Physical Review Online Archive (PROLA)
40xhttp://ojps.aip.org/journals/doc/PRBMDO-home/
  aE0bTXA

01121nam  2200301 a 4500001000800000005001700008008004100025020001500066035002000081035001400101040001800115043002100133049000900154090002400163100002500187245009500212260005800307300002100365490004500386504005100431651005300482651005300535651004400588651005200632610005700684830005800741948002000799
1665456
19991130062525.0
970908s1997    enk      b    001 0 eng d
  a1860641067
  a(OCoLC)37587441
  9AHN6272AM
  aDGUcDGUdTXA
  ae-uk---an-us---
  aTXAM
  aE183.8.G7bJ65 1997
1 aJones, Peter,d1945-
10aAmerica and the British Labour Party :bthe "special relationship" at work /cPeter Jones.
  aLondon ;aNew York :bTauris Academic Studies,c1997.
  a252 p. ;c22 cm.
1 aLibrary of international relations ;v10
  aIncludes bibliographical references and index.
 0aGreat BritainxForeign relationszUnited States.
 0aUnited StatesxForeign relationszGreat Britain.
 0aGreat BritainxForeign relationsy1945-
 0aUnited StatesxForeign relationsy20th century.
20aLabour Party (Great Britain)xHistoryy20th century.
 0aLibrary of international relations (Series) ;vv. 10.
  ac:cerd20021105


\ No newline at end of file

Added: packages/libmarc-record-perl/branches/upstream/current/t/utf8.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/utf8.t	2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/utf8.t	2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,61 @@
+BEGIN {
+    if ( $] < 5.008 ) { 
+	print "1..0 # Skip Need perl5.8 or greater to test unicode\n";
+	exit;
+    }
+}
+
+use Test::More tests => 2;
+
+use strict;
+use MARC::Record;
+use MARC::File::USMARC;
+
+## MARC::Record is not able to read MARC data back from disk if the
+## record has Unicode (UTF-8) in it. This may be for a variety of
+## reasons: calculating leader lengths based on character rather than
+## byte length; using directory values and substr() to extract fields when
+## substr() uses character lengths rather than byte lengths; open files
+## from disk without using the ':utf8' pragma, etc.
+
+TODO: {
+
+    SKIP: { 
+
+	## only do these tests with the first stable release of perl 
+	## that can do unicode.
+
+	local $TODO = 'utf8 handling';
+
+	## we are going to create a MARC record with a utf8 character in
+	## it (a Hebrew Aleph), write it to disk, and then attempt to
+	## read it back from disk as a MARC::Record.
+	
+	my $aleph = chr(0x05d0); 
+	my $r1 = MARC::Record->new();
+	$r1->append_fields( MARC::Field->new( 245, 0, 0, a => $aleph ) );
+
+	## write record to disk, telling perl (as we should) that we
+	## will be writing utf8 unicode
+	
+	open( OUT, ">t/utf8.marc" );
+	binmode( OUT, ':utf8' );
+	print OUT $r1->as_usmarc();
+	close( OUT );
+
+	## open the file back up, get the record, and see if our Aleph
+	## is there
+	
+	my $f = MARC::File::USMARC->in( 't/utf8.marc' );
+	my $r2 = $f->next();
+	my $a = $r2->field( 245 )->subfield( 'a' );
+	is( length( $a ), length( $aleph ), 'character length' );
+	is( ord( $r2->field( 245 )->subfield( 'a' ) ), ord( $aleph ), 
+	    'character value' );
+
+	unlink( 't/utf8.marc' );
+
+    }
+
+}
+




More information about the Pkg-perl-cvs-commits mailing list