#!/usr/bin/env dart
// Copyright (c) 2016, 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.

// @dart = 2.9

import 'dart:io';

import 'package:kernel/kernel.dart';
import 'package:kernel/src/tool/command_line_util.dart';

void usage() {
  print("Prints a dill file as a textual format.");
  print("");
  print("Usage: dart <script> dillFile.dill [output]");
  print("");
  print("The first given argument should be an existing file");
  print("that is valid to load as a dill file.");
  print("");
  print("The second argument is optional.");
  print("If given, output will be written to this file.");
  print("If not given, output will be written to standard out.");
  exit(1);
}

main(List<String> args) {
  CommandLineHelper.requireVariableArgumentCount([1, 2], args, usage);
  CommandLineHelper.requireFileExists(args[0]);
  var binary = CommandLineHelper.tryLoadDill(args[0]);
  writeComponentToText(binary,
      path: args.length > 1 ? args[1] : null,
      showOffsets: const bool.fromEnvironment("showOffsets"));
}
