# File lib/edi4r/edifact.rb, line 403
    def initialize( user_par={} )
      super( user_par ) # just in case...
      if (illegal_keys = user_par.keys - @@interchange_default_keys) != []
        msg = "Illegal parameter(s) found: #{illegal_keys.join(', ')}\n"
        msg += "Valid param keys (symbols): #{@@interchange_default_keys.join(', ')}"
        raise ArgumentError, msg
      end
      par = @@interchange_defaults.merge( user_par )

      @messages_created = @groups_created = 0

      @syntax = 'E' # par[:syntax]      # E = UN/EDIFACT
      @e_iedi = par[:i_edi]
      @charset = par[:charset]
      @version = par[:version]
      @una = UNA.new(self, par[:una_string])
      self.output_mode = par[:output_mode]
      self.show_una = par[:show_una]

      check_consistencies
      init_ndb( @version )

      if @e_iedi  # Interactive EDI

        raise "I-EDI not supported yet"

        # Fill in what we already know about I-EDI:

        @header = new_segment('UIB')
        @trailer = new_segment('UIZ')
        @header.cS001.d0001 = par[:charset]
        @header.cS001.d0002 = par[:version]

        @header.cS002.d0004 = par[:sender] unless par[:sender].nil?
        @header.cS003.d0010 = par[:recipient] unless par[:recip].nil?
        @header.cS302.d0300 = par[:interchange_control_reference]
        # FIXME: More to do in S302...

        x= :test_indicator;           @header.d0035 = par[x] unless par[x].nil?

        t = Time.now
        @header.cS300.d0338 = t.strftime(par[:version]==4 ? '%Y%m%d':'%y%m%d')
        @header.cS300.d0314 = t.strftime("%H%M")
        
        @trailer.d0036 = 0
        ch, ct = @header.cS302, @trailer.cS302
        ct.d0300, ct.d0303, ct.d0051, ct.d0304 = ch.d0300, ch.d0303, ch.d0051, ch.d0304 
      else # Batch EDI

        @header = new_segment('UNB')
        @trailer = new_segment('UNZ')
        @header.cS001.d0001 = par[:charset]
        @header.cS001.d0002 = par[:version]
        @header.cS002.d0004 = par[:sender] unless par[:sender].nil?
        @header.cS003.d0010 = par[:recipient] unless par[:recip].nil?
        @header.d0020 = par[:interchange_control_reference]

        x= :application_reference;    @header.d0026 = par[x] unless par[x].nil?
        x= :acknowledgment_request;   @header.d0031 = par[x] unless par[x].nil?
        x= :interchange_agreement_id; @header.d0032 = par[x] unless par[x].nil?
        x= :test_indicator;           @header.d0035 = par[x] unless par[x].nil?

        t = Time.now
        @header.cS004.d0017 = t.strftime(par[:version]==4 ? '%Y%m%d':'%y%m%d')
        @header.cS004.d0019 = t.strftime("%H%M")
        
        @trailer.d0036 = 0
      end
    end