If the origin proposes version 3 and submits a negotiation record of
      this type:
   
   -   The negotiation record should occur in the Other-Information
         parameter of the Init request. 
   
-   If the target responds that version 3 is in force and includes a
         negotiation record of this type it should occur in the Other-
         Information parameter of the Init response.
   
-   If the target responds that version 2 is in force (but still 
         recognizes the Other-Information parameter in the request), and
         includes a negotiation record of this type it should occur within the
         User-Information-field parameter of the Init response. In this case,
         negotiation pertains to language only, and not to character sets. 
 The ASN.1 for this definition follows.
NegotiationRecordDefinition-charSetandLanguageNegotiation-2
{Z39-50-negotiationRecordDefinition CharSetandLanguageNegotiation-2 (1)} 
DEFINITIONS ::= BEGIN
CharSetandLanguageNegotiation ::= CHOICE{
   proposal [1]   IMPLICIT OriginProposal,
   response [2]   IMPLICIT TargetResponse}
--
-- For character sets:
--  Origin proposes one, two, or all three of the following, in order of
--  preference:
--       (a) 2022 character sets.
--       (b) 10646 character set.
--       (c) Private character set.
--
--    The target responds with one of (a), (b), or (c), indicating the 
--    character set(s) to be supported for all name and message strings. 
--
--    If the origin includes (a), 
--     the origin proposes:
--        (1)  A proposed environment: 7-bit, 8-bit, or no-preference.
--        (2)  A set of iso 2022 registration numbers.  
--        (3)  One or more proposed initial sets of registration numbers, 
--             for c0, c1, g0, g1, g2 and g3. These must come from (2).  
--        (4)  The proposed encoding level.  
--      And if the target selects (a), it responds with:
--        (1)  A selected environment: 7-bit or 8-bit.
--        (2)  A subset of the set of iso 2022 registration numbers proposed
--             by the origin. 
--        (3)  The initial set of registrations, which must come from (2)
--             but need not be from the set of initial registrations proposed
--             by the origin.
--        (4)  The encoding level; less than or equal to that proposed. 
--
--    If the origin includes (b),
--     The origin proposes:
--        (1)  A list of collections (i.e. subsets of characters from the
--             complete 10646 definition).
--        (2)  An implementation level. 
--        (3) Syntax/form: e.g. ucs-2, ucs-4, utf-8, utf-16.
--    And if the target selects (b), it responds by choosing a subset of the
--    collections proposed by the origin in (1) and an implementation level less
--    than or equal to that proposed by the origin in (2).
--
--    If the origin includes (c), the origin proposes one of the following:
--        (1)  A list of private character sets, by one or more object
--             identifiers. 
--        (2)  A list of private character sets, by an EXTERNAL.
--        (3)  An indication to use a private, previously agreed upon
--             character set.
--    And if the target selects (c):
--    -  If the origin proposed (1), the target should respond with (1), and
--       the list of object identifiers should be a subset of the list that
--       the origin included.
--    -  If the origin proposed (2), the target should respond with (2), using
--       the same EXTERNAL definition (but not necessarily the same content)
--       used by the origin.
--    -  If the origin proposed (3), the target should respond with (3).
--
--    For Languages: 
--     The origin optionally proposes one or more language codes. The target
--     response may include a single language code, which indicates the
--     language to be used for all message strings. The target may include or
--     omit this, whether or not the origin included a proposed set, and the
--     language code indicated need not be from among those proposed. 
--
--
OriginProposal ::= SEQUENCE {
  proposedCharSets           [1] IMPLICIT SEQUENCE OF CHOICE{
               -- Each should occur at most once, and in order of preference
               -- (the "order of preference" is the reason why this is
               -- "SEQUENCE OF CHOICE" rather than just "SEQUENCE")
                                iso2022        [1] Iso2022,
                                iso10646       [2] IMPLICIT Iso10646,
                                private        [3] PrivateCharacterSet} OPTIONAL,
                                   -- proposedCharSets must be omitted 
                                   -- if origin proposes version 2
  proposedlanguages          [2] IMPLICIT SEQUENCE OF LanguageCode OPTIONAL,
  recordsInSelectedCharSets  [3] IMPLICIT BOOLEAN OPTIONAL
                       -- default 'false'. See rule 6 above.
                       }
TargetResponse ::= SEQUENCE{
  selectedCharSets           [1] CHOICE{
                                   iso2022        [1] Iso2022,
                                   iso10646       [2] IMPLICIT Iso10646,
                                   private        [3] PrivateCharacterSet,
                                   none           [4] IMPLICIT NULL
                                            -- If selected, no negotiation
                                            -- is assumed to be in force 
                                            -- for character sets.
                                                     } OPTIONAL,
                                   -- Omitted if and only if proposedCharSets 
                                   -- was Omitted in the request.
  selectedLanguage           [2] IMPLICIT LanguageCode OPTIONAL,
  recordsInSelectedCharSets  [3] IMPLICIT BOOLEAN OPTIONAL   
                  -- Omitted if and only if 'recordsInSelectedCharSets' was omitted
                  -- in the request.  See rule 6 above.
                       }
  
PrivateCharacterSet ::= CHOICE{
   viaOid                 [1] IMPLICIT SEQUENCE OF OBJECT IDENTIFIER, 
   externallySpecified    [2] IMPLICIT EXTERNAL,
   previouslyAgreedUpon   [3] IMPLICIT NULL}
LanguageCode ::= GeneralString -- from ANSI Z39.53-1994
-- Definition of ISO2022
-- For ISO 2022, the following is negotiated:
--   1)   The environment: 7-bit or 8-bit;
--   2)   a set of registration numbers (from the ISO Register of coded 
--        character sets) for graphical and  control character sets; 
--   3)   g0, g1, g2, g3, c0, c1, the registration numbers of the graphical and
--        control character sets that are  initially designated to g0, g1, etc.  
--       The origin submits one or more sequences of values for 
--        g0, g1, g2, g3, c0, c1 (for each sequence: at least one of 
--        g0 and g1 must be included; g2 and g3 are optional and 
--         may be included only if g1 is included; 
--        c0 should be included; and c1 is optional); the target 
--        selects one of the proposed sequences. 
--   4)   gleft: which of g0, g1, g2 or g3, initially has GL shift status in
--        an 8-bit environment or has shift status in a 7-bit environment; and
--   5)   gright: which of g1, g2 or g3 initially has GR shift status in an
--        8-bit environment. 
Iso2022 ::= CHOICE{
 originProposal   [1] IMPLICIT SEQUENCE{
            proposedEnvironment    [0] Environment OPTIONAL, 
                                         -- omitted means no preference
            proposedSets           [1] IMPLICIT SEQUENCE OF INTEGER,
            proposedInitialSets    [2] IMPLICIT SEQUENCE OF
                                             InitialSet,
            proposedLeftAndRight   [3] IMPLICIT LeftAndRight},
 targetResponse   [2] IMPLICIT SEQUENCE{
            selectedEnvironment    [0] Environment,
            selectedSets           [1] IMPLICIT SEQUENCE OF INTEGER,
            selectedinitialSet     [2] IMPLICIT InitialSet,
            selectedLeftAndRight   [3] IMPLICIT LeftAndRight}}
Environment ::= CHOICE{
   sevenBit    [1] IMPLICIT NULL,
   eightBit    [2] IMPLICIT NULL}
InitialSet::= SEQUENCE{
      g0    [0] IMPLICIT INTEGER OPTIONAL,
      g1    [1] IMPLICIT INTEGER OPTIONAL,
                           -- one of g0 and g1 must be included
      g2    [2] IMPLICIT INTEGER OPTIONAL,
      g3    [3] IMPLICIT INTEGER OPTIONAL,
                           --g2 and/or g3 may be included
                           -- only if g1 was included
      c0    [4] IMPLICIT INTEGER,
      c1    [5] IMPLICIT INTEGER OPTIONAL}
LeftAndRight ::= SEQUENCE{
            gLeft         [3] IMPLICIT INTEGER{
                                   g0 (0),
                                   g1 (1),
                                   g2 (2),
                                   g3 (3)},
            gRight        [4] IMPLICIT INTEGER{
                                   g1 (1),
                                   g2 (2),
                                   g3 (3)} OPTIONAL}
-- Definition of Iso10646
--
-- The 10646 object identifier looks like:
--        1.0.10646.1.implementationLevel.repertoireSubset.arc1.arc2. .... 
--
-- (The second '1' is for "part 1" of 10646.)
--
-- ImplementationLevel is 1-3
--
-- repertoireSubset is 0 or 1, for 'all' or 'collections'.
-- The arcs are present only if repertoireSubset is 'collections', 
-- in which case  arc1, arc2, etc., are the 
-- identifiers of collections of character repertoires.
--
-- There is a second 10646 oid, for specifying syntax/form:
--        1.0.10646.1.0.form
--
-- (The second '0' represents "transfer syntax".)
--
--  where values of form include:
--  2: ucs-2
--  4: ucs-4 
--  5: utf-16
--  8: utf-8
Iso10646 ::= SEQUENCE{
   collections    [1] IMPLICIT OBJECT IDENTIFIER,
                       --oid of form 1.0.10646.1.implementationLevel
                       -- .repertoireSubset.arc1.arc2. .... 
                       -- Target to choose a subset of the collections
                       -- proposed by the origin, and an implementation level
                       -- less than or equal to that proposed. 
   encodingLevel  [2] IMPLICIT OBJECT IDENTIFIER
                       -- oid of form 1.0.10646.1.0.form
                    -- where value of 'form' is 2, 4, 5, or 8 
                      -- for ucs-2, ucs-4, utf-16, utf-8
                                   }
END
 Library 
of Congress
 Library 
of Congress