# File lib/rfm_error.rb, line 43
    def self.getError(code, message = nil)
      if @@default_messages == nil or @@default_messages.size == 0
        (0..99).each{|i| @@default_messages[i] = 'SystemError occurred.'}
        (100..199).each{|i| @@default_messages[i] = 'MissingError occurred.'}
        @@default_messages[102] = 'FieldMissingError occurred.'
        @@default_messages[104] = 'ScriptMissingError occurred.'
        @@default_messages[105] = 'LayoutMissingError occurred.'
        @@default_messages[106] = 'TableMissingError occurred.'
        (200..299).each{|i| @@default_messages[i] = 'SecurityError occurred.'}
        @@default_messages[200] = 'RecordAccessDeniedError occurred.'
        @@default_messages[201] = 'FieldCannotBeModifiedError occurred.'
        @@default_messages[202] = 'FieldAccessIsDeniedError occurred.'
        (300..399).each{|i| @@default_messages[i] = 'ConcurrencyError occurred.'}
        @@default_messages[301] = 'RecordInUseError occurred.'
        @@default_messages[302] = 'TableInUseError occurred.'
        @@default_messages[306] = 'RecordModIdDoesNotMatchError occurred.'
        (400..499).each{|i| @@default_messages[i] = 'GeneralError occurred.'}
        @@default_messages[401] = 'NoRecordsFoundError occurred.'
        (500..599).each{|i| @@default_messages[i] = 'ValidationError occurred.'}
        @@default_messages[500] = 'DateValidationError occurred.'
        @@default_messages[501] = 'TimeValidationError occurred.'
        @@default_messages[502] = 'NumberValidationError occurred.'
        @@default_messages[503] = 'RangeValidationError occurred.'
        @@default_messages[504] = 'UniqueValidationError occurred.'
        @@default_messages[505] = 'ExistingValidationError occurred.'
        @@default_messages[506] = 'ValueListValidationError occurred.'
        @@default_messages[507] = 'ValidationCalculationError occurred.'
        @@default_messages[508] = 'InvalidFindModeValueError occurred.'
        @@default_messages[511] = 'MaximumCharactersValidationError occurred.'
        (800..899).each{|i| @@default_messages[i] = 'FileError occurred.'}
        @@default_messages[802] = 'UnableToOpenFileError occurred.'
      end 
      
      message = @@default_messages[code] if message == nil || message.strip == ''
      message += " (FileMaker Error ##{code})"
      
      if 0 <= code and code <= 99
        err = SystemError.new(message)
      elsif 100 <= code and code <= 199
        if code == 101
          err = RecordMissingError.new(message)
        elsif code == 102
          err = FieldMissingError.new(message)
        elsif code == 104
          err = ScriptMissingError.new(message)
        elsif code == 105
          err = LayoutMissingError.new(message)
        elsif code == 106
          err = TableMissingError.new(message)
        else
          err = MissingError.new(message)
        end
      elsif 200 <= code and code <= 299
        if code == 200
          err = RecordAccessDeniedError.new(message)
        elsif code == 201
          err = FieldCannotBeModifiedError.new(message)
        elsif code == 202
          err = FieldAccessIsDeniedError.new(message)
        else
          err = SecurityError.new(message)
        end
      elsif 300 <= code and code <= 399
        if code == 301
          err = RecordInUseError.new(message)
        elsif code == 302
          err = TableInUseError.new(message)
        elsif code == 306
          err = RecordModIdDoesNotMatchError.new(message)
        else
          err = ConcurrencyError.new(message)
        end
      elsif 400 <= code and code <= 499
        if code == 401
          err = NoRecordsFoundError.new(message)
        else
          err = GeneralError.new(message)
        end
      elsif 500 <= code and code <= 599
        if code == 500
          err = DateValidationError.new(message)
        elsif code == 501
          err = TimeValidationError.new(message)
        elsif code == 502
          err = NumberValidationError.new(message)
        elsif code == 503
          err = RangeValidationError.new(message)
        elsif code == 504
          err = UniqueValidationError.new(message)
        elsif code == 505
          err = ExistingValidationError.new(message)
        elsif code == 506
          err = ValueListValidationError.new(message)
        elsif code == 507
          err = ValidationCalculationError.new(message)
        elsif code == 508
          err = InvalidFindModeValueError.new(message)
        elsif code == 511
          err = MaximumCharactersValidationError.new(message)
        else
          err = ValidationError.new(message)
        end
      elsif 800 <= code and code <= 899
        if code == 802
          err = UnableToOpenFileError.new(message)
        else
          err = FileError.new(message)
        end
      else 
        # called for code == -1 or any other code not handled above.
        err = UnknownError.new(message)
      end
      err.code = code
      return err
    end