You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
188 lines
5.5 KiB
188 lines
5.5 KiB
/***************************************************************************
|
|
* Copyright (C) 2005 by David Saxton *
|
|
* david@bluehaze.org *
|
|
* *
|
|
* 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 <tdelocale.h>
|
|
#include <tdemessagebox.h>
|
|
#include <kprocess.h>
|
|
#include <tqregexp.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 TQString &message ) const
|
|
{
|
|
return message.contains( "Error", false );
|
|
}
|
|
|
|
|
|
bool Gpasm::isWarning( const TQString &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;
|
|
}
|
|
|