diff options
Diffstat (limited to 'src/languages/gpasm.cpp')
-rw-r--r-- | src/languages/gpasm.cpp | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/src/languages/gpasm.cpp b/src/languages/gpasm.cpp new file mode 100644 index 0000000..447354e --- /dev/null +++ b/src/languages/gpasm.cpp @@ -0,0 +1,187 @@ +/*************************************************************************** + * Copyright (C) 2005 by David Saxton * + * [email protected] * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + ***************************************************************************/ + +#include "asmparser.h" +#include "docmanager.h" +#include "gpasm.h" +#include "logview.h" +#include "languagemanager.h" +#include "src/core/ktlconfig.h" + +#include <klocale.h> +#include <kmessagebox.h> +#include <kprocess.h> +#include <qregexp.h> + +Gpasm::Gpasm( ProcessChain *processChain, KTechlab * parent ) + : ExternalLanguage( processChain, parent, "Gpasm" ) +{ + m_successfulMessage = i18n("*** Assembly successful ***"); + m_failedMessage = i18n("*** Assembly failed ***"); +} + + +Gpasm::~Gpasm() +{ +} + + +void Gpasm::processInput( ProcessOptions options ) +{ + resetLanguageProcess(); + m_processOptions = options; + + AsmParser p( options.inputFiles().first() ); + p.parse(); + + *m_languageProcess << ("gpasm"); + + if ( ProcessOptions::ProcessPath::from( options.processPath() ) == ProcessOptions::ProcessPath::AssemblyRelocatable ) + *m_languageProcess << ("--object"); + +// *m_languageProcess << ("--debug-info"); // Debug info + + // Output filename + *m_languageProcess << ("--output"); + *m_languageProcess << ( options.intermediaryOutput() ); + + if ( !options.m_hexFormat.isEmpty() ) + { + *m_languageProcess << ("--hex-format"); + *m_languageProcess << (options.m_hexFormat); + } + + // Radix + if ( !p.containsRadix() ) + { + *m_languageProcess << ("--radix"); + switch( KTLConfig::radix() ) + { + case KTLConfig::EnumRadix::Binary: + *m_languageProcess << ("BIN"); + break; + case KTLConfig::EnumRadix::Octal: + *m_languageProcess << ("OCT"); + break; + case KTLConfig::EnumRadix::Hexadecimal: + *m_languageProcess << ("HEX"); + break; + case KTLConfig::EnumRadix::Decimal: + default: + *m_languageProcess << ("DEC"); + break; + } + } + + // Warning Level + *m_languageProcess << ("--warning"); + switch( KTLConfig::gpasmWarningLevel() ) + { + case KTLConfig::EnumGpasmWarningLevel::Warnings: + *m_languageProcess << ("1"); + break; + case KTLConfig::EnumGpasmWarningLevel::Errors: + *m_languageProcess << ("2"); + break; + default: + case KTLConfig::EnumGpasmWarningLevel::All: + *m_languageProcess << ("0"); + break; + } + + // Ignore case + if ( KTLConfig::ignoreCase() ) + *m_languageProcess << ("--ignore-case"); + + // Dos formatting + if ( KTLConfig::dosFormat() ) + *m_languageProcess << ("--dos"); + + // Force list + if ( options.b_forceList ) + *m_languageProcess << ("--force-list"); + + // Other options + if ( !KTLConfig::miscGpasmOptions().isEmpty() ) + *m_languageProcess << ( KTLConfig::miscGpasmOptions() ); + + // Input Asm file + *m_languageProcess << ( options.inputFiles().first() ); + + if ( !start() ) + { + KMessageBox::sorry( LanguageManager::self()->logView(), i18n("Assembly failed. Please check you have gputils installed.") ); + processInitFailed(); + return; + } +} + + +bool Gpasm::isError( const QString &message ) const +{ + return message.contains( "Error", false ); +} + + +bool Gpasm::isWarning( const QString &message ) const +{ + return message.contains( "Warning", false ); +} + + +ProcessOptions::ProcessPath::Path Gpasm::outputPath( ProcessOptions::ProcessPath::Path inputPath ) const +{ + switch (inputPath) + { + case ProcessOptions::ProcessPath::AssemblyAbsolute_PIC: + return ProcessOptions::ProcessPath::Program_PIC; + + case ProcessOptions::ProcessPath::AssemblyAbsolute_Program: + return ProcessOptions::ProcessPath::None; + + case ProcessOptions::ProcessPath::AssemblyRelocatable_Library: + return ProcessOptions::ProcessPath::Object_Library; + + case ProcessOptions::ProcessPath::AssemblyRelocatable_Object: + return ProcessOptions::ProcessPath::None; + + case ProcessOptions::ProcessPath::AssemblyRelocatable_PIC: + return ProcessOptions::ProcessPath::Object_PIC; + + case ProcessOptions::ProcessPath::AssemblyRelocatable_Program: + return ProcessOptions::ProcessPath::Object_Program; + + case ProcessOptions::ProcessPath::C_AssemblyRelocatable: + case ProcessOptions::ProcessPath::C_Library: + case ProcessOptions::ProcessPath::C_Object: + case ProcessOptions::ProcessPath::C_PIC: + case ProcessOptions::ProcessPath::C_Program: + case ProcessOptions::ProcessPath::FlowCode_AssemblyAbsolute: + case ProcessOptions::ProcessPath::FlowCode_Microbe: + case ProcessOptions::ProcessPath::FlowCode_PIC: + case ProcessOptions::ProcessPath::FlowCode_Program: + case ProcessOptions::ProcessPath::Microbe_AssemblyAbsolute: + case ProcessOptions::ProcessPath::Microbe_PIC: + case ProcessOptions::ProcessPath::Microbe_Program: + case ProcessOptions::ProcessPath::Object_Disassembly: + case ProcessOptions::ProcessPath::Object_Library: + case ProcessOptions::ProcessPath::Object_PIC: + case ProcessOptions::ProcessPath::Object_Program: + case ProcessOptions::ProcessPath::PIC_AssemblyAbsolute: + case ProcessOptions::ProcessPath::Program_Disassembly: + case ProcessOptions::ProcessPath::Program_PIC: + case ProcessOptions::ProcessPath::Invalid: + case ProcessOptions::ProcessPath::None: + return ProcessOptions::ProcessPath::Invalid; + } + + return ProcessOptions::ProcessPath::Invalid; +} + |