/*
* Copyright 2018 faddenSoft
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Collections.Generic;
using System.ComponentModel;
namespace SourceGen.AsmGen {
///
/// Common interface for executing assemblers.
///
public interface IAssembler {
///
/// Gets identification strings for the executable. These are used when browsing for
/// the assembler binary.
///
/// Human-readable name to show in the "open" dialog.
/// Name of executable to find, without ".exe".
void GetExeIdentifiers(out string humanName, out string exeName);
///
/// Queries the assembler for its default configuration.
///
/// Config object with default values.
AssemblerConfig GetDefaultConfig();
///
/// Queries the assembler for its version. Assembler executable paths are queried from
/// the global settings object.
///
/// Assembler version info, or null if query failed.
AssemblerVersion QueryVersion();
///
/// Configures the object. Pass in the list of pathnames returned by IGenerator.Run(),
/// and the working directory to use for the shell command.
///
/// Assembler source pathnames.
/// Working directory for shell command.
void Configure(List pathNames, string workDirectory);
///
/// Executes the assembler. Must call Configure() first. Executed on background thread.
///
/// Async work object, used to report progress updates and
/// check for cancellation.
/// Execution results, or null on internal failure.
AssemblerResults RunAssembler(BackgroundWorker worker);
}
///
/// Set of values returned by the assembler.
///
public class AssemblerResults {
public string CommandLine { get; private set; }
public int ExitCode { get; private set; }
public string Stdout { get; private set; }
public string Stderr { get; private set; }
public string OutputPathName { get; private set; }
public AssemblerResults(string commandLine, int exitCode, string stdout, string stderr,
string outputFile) {
CommandLine = commandLine;
ExitCode = exitCode;
Stdout = stdout;
Stderr = stderr;
OutputPathName = outputFile;
}
}
}