// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
//
// Utility script to echo strings in various formats to stdout or
// stderr.

// @dart = 2.9

import "dart:convert";
import "dart:io";

writeData(data, encoding, stream) {
  if (stream == "stdout") {
    if (encoding == null) {
      stdout.add(data);
    } else {
      stdout.encoding = encoding;
      stdout.write(data);
    }
  } else if (stream == "stderr") {
    if (encoding == null) {
      stderr.add(data);
    } else {
      stderr.encoding = encoding;
      stderr.write(data);
    }
  }
}

main(List<String> arguments) {
  var asciiString = 'abc';
  var latin1String = 'æøå';
  var utf8String = new String.fromCharCodes([955]);
  var binary = [0, 1, 2];
  if (arguments.length > 1) {
    var stream = arguments[1];
    if (arguments[0] == "ascii") {
      writeData(asciiString, ascii, stream);
    } else if (arguments[0] == "latin1") {
      writeData(latin1String, latin1, stream);
    } else if (arguments[0] == "utf8") {
      writeData(utf8String, utf8, stream);
    } else if (arguments[0] == "binary") {
      writeData(binary, null, stream);
    }
  }
}
