#include "Console.h" #include "Interpreter.h" #include "ColumnFormatter.h" #include #include #include #include "Utils.h" const QString Console::PROMPT = ">>> "; const QString Console::MULTILINE_PROMPT = "... "; const QColor Console::NORMAL_COLOR = QColor::fromRgbF( 0, 0, 0 ); const QColor Console::ERROR_COLOR = QColor::fromRgbF( 1.0, 0, 0 ); const QColor Console::OUTPUT_COLOR = QColor::fromRgbF( 0, 0, 1.0 ); Console::Console( QWidget* parent ): QTextEdit( parent ), m_interpreter( new Interpreter ) { QFont font; font.setFamily("Courier New"); setFont(font); m_parseHelper.subscribe( this ); displayPrompt( ); } Console::~Console( ) { delete m_interpreter; } void Console::keyPressEvent( QKeyEvent* e ) { switch ( e->key() ) { case Qt::Key_Return: handleReturnKeyPress( ); return; case Qt::Key_Tab: autocomplete( ); return; case Qt::Key_Backspace: if ( ! canBackspace( ) ) return; break; case Qt::Key_Up: previousHistory( ); return; case Qt::Key_Down: nextHistory( ); return; case Qt::Key_Left: if ( ! canGoLeft( ) ) return; } QTextEdit::keyPressEvent( e ); } void Console::handleReturnKeyPress( ) { if ( ! cursorIsOnInputLine( ) ) { return; } QString line = getLine( ); m_parseHelper.process( line.toStdString( ) ); if ( m_parseHelper.buffered( ) ) { append(""); displayPrompt( ); } if ( line.size( ) ) { m_historyBuffer.push_back( line.toStdString( ) ); m_historyIt = m_historyBuffer.end(); } moveCursorToEnd( ); } void Console::parseEvent( const ParseMessage& message ) { // handle invalid user input if ( message.errorCode ) { setTextColor( ERROR_COLOR ); append(message.message.c_str()); setTextColor( NORMAL_COLOR ); append(""); displayPrompt( ); return; } // interpret valid user input int errorCode; std::string res; if ( message.message.size() ) res = m_interpreter->interpret( message.message, &errorCode ); if ( errorCode ) { setTextColor( ERROR_COLOR ); } else { setTextColor( OUTPUT_COLOR ); } if ( res.size( ) ) { append(res.c_str()); } setTextColor( NORMAL_COLOR ); // set up the next line on the console append(""); displayPrompt( ); } QString Console::getLine( ) { QTextCursor cursor = textCursor(); cursor.movePosition( QTextCursor::StartOfLine ); cursor.movePosition( QTextCursor::Right, QTextCursor::MoveAnchor, Console::PROMPT.size( ) ); cursor.movePosition( QTextCursor::EndOfLine, QTextCursor::KeepAnchor ); QString line = cursor.selectedText( ); cursor.clearSelection( ); return line; } bool Console::cursorIsOnInputLine( ) { int cursorBlock = textCursor( ).blockNumber( ); QTextCursor bottomCursor = textCursor( ); bottomCursor.movePosition( QTextCursor::End ); int bottomBlock = bottomCursor.blockNumber( ); return ( cursorBlock == bottomBlock ); } bool Console::inputLineIsEmpty( ) { QTextCursor bottomCursor = textCursor( ); bottomCursor.movePosition( QTextCursor::End ); int col = bottomCursor.columnNumber( ); return ( col == Console::PROMPT.size( ) ); } bool Console::canBackspace( ) { if ( ! cursorIsOnInputLine( ) ) { return false; } if ( inputLineIsEmpty( ) ) { return false; } return true; } bool Console::canGoLeft( ) { if ( cursorIsOnInputLine( ) ) { QTextCursor bottomCursor = textCursor( ); int col = bottomCursor.columnNumber( ); return (col > Console::PROMPT.size( )); } return true; } void Console::displayPrompt( ) { QTextCursor cursor = textCursor(); cursor.movePosition( QTextCursor::End ); if ( m_parseHelper.buffered( ) ) { cursor.insertText( Console::MULTILINE_PROMPT ); } else { cursor.insertText( Console::PROMPT ); } cursor.movePosition( QTextCursor::EndOfLine ); } void Console::autocomplete( ) { if ( ! cursorIsOnInputLine( ) ) return; QString line = getLine( ); const std::list& suggestions = m_interpreter->suggest( line.toStdString( ) ); if (suggestions.siz
//-----------------------------------------------------
// This is simple parity Program
// Design Name : parity
// File Name   : parity.v
// Function    : This program shows how a verilog
//               primitive/module port connection are done
// Coder       : Deepak
//-----------------------------------------------------
module parity (
a      , // First input
b      , // Second input 
c      , // Third Input
d      , // Fourth Input
y        // Parity  output
);

// Input Declaration
input       a       ;
input       b       ;
input       c       ;
input       d       ;
// Ouput Declaration
output      y      ;
// port data types
wire        a        ;
wire        b        ;
wire        c        ;
wire        d        ;
wire        y        ;
// Internal variables
wire        out_0 ;
wire        out_1 ;

// Code starts Here
xor u0 (out_0,a,b);

xor u1 (out_1,c,d);

xor u2 (y,out_0,out_1);

endmodule // End Of Module parity