Example #1
0
void VT100Parser::decodeOSC(uchar character)
{

    if (!parameters.size() &&
            character >= 0x30 && character <= 0x3f) {

        decodeParameters(character);
    }
    else
    {
        if (decodeOscState ==  None) {
            appendParameter();
            if (parameters.size() != 1) {
                tokenFinished();
                return;
            }
            oscData.clear();
            switch (parameters.at(0)) {
            case 0:
                decodeOscState = ChangeWindowAndIconName;
                break;
            case 1:
                decodeOscState = ChangeIconTitle;
                break;
            case 2:
                decodeOscState = ChangeWindowTitle;
                break;
            case 4:
                // TODO: set 256-color palette
                decodeOscState = Other;
                break;
            case 105:
                decodeOscState = ExTermBlock;
                break;
            default:
                qDebug() << parameters;

                decodeOscState = Other;
            }
            oscData.append(QChar(character));
        }
        else if (character == 0x07 || (decodeOscState == Other && character == 0x5c)) {
            if (decodeOscState == ChangeWindowAndIconName || decodeOscState == ChangeWindowTitle) {
                //m_screen->setTitle(title);
            }
            else if(decodeOscState == ExTermBlock) {
                int index = oscData.indexOf(QChar(';'));
                QStringRef type = oscData.leftRef(index);
                QStringRef data = oscData.midRef(index+1);
                if(type.compare("HTML") == 0) {
                    int argIndexes[2] = {0,};
                    int argN = 0;
                    for(int i = 0; i < data.length(); ++i) {
                        if(data.at(i) == QChar(';')) {
                            argIndexes[argN++] = i;
                        }
                        if(argN == 2)
                            break;
                    }
                    QStringRef objectId = oscData.midRef(index + 1, argIndexes[0]);
                    QStringRef numLines = oscData.midRef(index + 1 + argIndexes[0] + 1,  argIndexes[1] - argIndexes[0] - 1);
                    QStringRef actualData = oscData.midRef(index + 1 + argIndexes[1] + 1);
                    int lines = numLines.toString().toInt();
                    for(int i = 0; i < lines-1; ++i)
                        screen.lineFeed();
                    emit htmlBlock(objectId.toString(), lines, actualData.toString());
                }
                else if(type.compare("JS")) {

                }
            }
            tokenFinished();
        }
        else {
            oscData.append(QChar(character));
        }
    }
}
/*
 * Asynchronous object call for
 * operation 'odbcas_ASSvc_WouldLikeToLive'
 */
extern CEE_status
odbcas_ASSvc_WouldLikeToLive_pst_(
    /* In    */ const CEE_handle_def *ph_
  , /* In    */ CEE_tag_def tag_
  , /* In    */ odbcas_ASSvc_WouldLikeToLive_cct_ rtn_
  , /* In    */ IDL_long srvrType
  , /* In    */ const IDL_char *srvrObjRef
  )
{
	CEE_status retcode = CEE_SUCCESS;
	bool sts;
	long wlength,rlength;
	char* wbuffer, *rbuffer;

	CFSystemDrvr* FileSystem = GTransport.m_FSystemDrvr_list->ins_node();
	if (FileSystem == NULL)
		return CEE_ALLOCFAIL;

	FileSystem->odbcAPI = AS_API_WOULDLIKETOLIVE;
	FileSystem->dialogueId = 0;
	FileSystem->dwTimeout = 0;
//
// do marshaling of input parameters
//
	retcode = odbcas_ASSvc_WouldLikeToLive_param_pst_(
		  FileSystem
		, wbuffer
		, wlength
		, srvrType
		, srvrObjRef);

	if (retcode != CEE_SUCCESS)
		goto bailout;

	sts = OpenIO (FileSystem,srvrGlobal->ASProcessName);
	if (sts == false)
	{
		retcode = GET_ERROR((long)FileSystem);
		goto bailout;
	}

	sts = DoIO (FileSystem, wbuffer, wlength, rbuffer, rlength);
	if (sts == false)
	{
		retcode = GET_ERROR((long)FileSystem);
		goto bailout;
	}

	CloseIO (FileSystem);
//
// process output parameters
//
	long* param[2];
	retcode = decodeParameters(2, param, rbuffer, rlength);
	if (retcode != CEE_SUCCESS)
	{
//LCOV_EXCL_START
		strcpy( errStrBuf2, "odbcas_drvr.cpp");
		strcpy( errStrBuf3, "SRVR-odbcas_ASSvc_WouldLikeToLive_pst_");
		strcpy( errStrBuf4, "buffer overflow");
		sprintf( errStrBuf5, "retcode <%d>", retcode);
		logError( PROGRAM_ERROR, SEVERITY_MAJOR, CAPTURE_ALL + PROCESS_STOP );
		SRVR::exitServerProcess();
//LCOV_EXCL_STOP
	}

    {
	void *pv_[3] = {0};
	pv_[1] = (void *)param[0];
	pv_[2] = (void *)param[1];
	odbcas_ASSvc_WouldLikeToLive_ccw_(
	    /* In    */ (void *) rtn_
	  , /* In    */ tag_
	  , /* In    */ pv_);
    }
bailout:
	GTransport.m_FSystemDrvr_list->del_node(FileSystem);

	return retcode;
}
Example #3
0
void VT100Parser::decodeCSI(uchar character)
{
    if (character >= 0x30 && character <= 0x3f) {
        decodeParameters(character);
    } else {
        if (character >= 0x20 && character <= 0x2f) {
            if (intermediateChar.unicode())
                qDebug() << "Warning!: double intermediate bytes found in CSI";
            intermediateChar = character;
        } else if (character >= 0x40 && character <= 0x7d) {
            if (intermediateChar.unicode()) {
                switch (character) {
                case FinalBytesSingleIntermediate::SL:
                case FinalBytesSingleIntermediate::SR:
                case FinalBytesSingleIntermediate::GSM:
                case FinalBytesSingleIntermediate::GSS:
                case FinalBytesSingleIntermediate::FNT:
                case FinalBytesSingleIntermediate::TSS:
                case FinalBytesSingleIntermediate::JFY:
                case FinalBytesSingleIntermediate::SPI:
                case FinalBytesSingleIntermediate::QUAD:
                case FinalBytesSingleIntermediate::SSU:
                case FinalBytesSingleIntermediate::PFS:
                case FinalBytesSingleIntermediate::SHS:
                case FinalBytesSingleIntermediate::SVS:
                case FinalBytesSingleIntermediate::IGS:
                case FinalBytesSingleIntermediate::IDCS:
                case FinalBytesSingleIntermediate::PPA:
                case FinalBytesSingleIntermediate::PPR:
                case FinalBytesSingleIntermediate::PPB:
                case FinalBytesSingleIntermediate::SPD:
                case FinalBytesSingleIntermediate::DTA:
                case FinalBytesSingleIntermediate::SHL:
                case FinalBytesSingleIntermediate::SLL:
                case FinalBytesSingleIntermediate::FNK:
                case FinalBytesSingleIntermediate::SPQR:
                case FinalBytesSingleIntermediate::SEF:
                case FinalBytesSingleIntermediate::PEC:
                case FinalBytesSingleIntermediate::SSW:
                case FinalBytesSingleIntermediate::SACS:
                case FinalBytesSingleIntermediate::SAPV:
                case FinalBytesSingleIntermediate::STAB:
                case FinalBytesSingleIntermediate::GCC:
                case FinalBytesSingleIntermediate::TATE:
                case FinalBytesSingleIntermediate::TALE:
                case FinalBytesSingleIntermediate::TAC:
                case FinalBytesSingleIntermediate::TCC:
                case FinalBytesSingleIntermediate::TSR:
                case FinalBytesSingleIntermediate::SCO:
                case FinalBytesSingleIntermediate::SRCS:
                case FinalBytesSingleIntermediate::SCS:
                case FinalBytesSingleIntermediate::SLS:
                case FinalBytesSingleIntermediate::SCP:
                default:
                    qDebug() << "unhandled CSI FinalBytesSingleIntermediate sequence" << character;
                    tokenFinished();
                    break;
                }
            } else {
                switch (character) {
                case FinalBytesNoIntermediate::ICH:
                    qDebug() << "ICH" << parameters;
                    tokenFinished();
                    //qDebug() << parameters[0];
                    //qDebug() << "unhandled CSI FinalBytesNoIntermediate sequence" << character;
                    break;
                case FinalBytesNoIntermediate::CUU: // Cursor Up PS Times
                    appendParameter();
                    if(parameters.size())
                        screen.moveCursorUp(parameters[0]);
                    else
                        screen.moveCursorUp();
                    tokenFinished();
                    break;
                case FinalBytesNoIntermediate::CUD:
                    tokenFinished();
                    qDebug() << "unhandled CSI FinalBytesNoIntermediate sequence" << character;
                    break;
                case FinalBytesNoIntermediate::CUF: {
                    //qDebug() << "CUF";
                    appendParameter();
                    Q_ASSERT(parameters.size() < 2);
                    int count = parameters.size() ? parameters.at(0) : 1;
                    screen.moveCursorRight(count);
                    tokenFinished();
                }
                break;
                case FinalBytesNoIntermediate::CUB:
                case FinalBytesNoIntermediate::CNL:
                case FinalBytesNoIntermediate::CPL:
                case FinalBytesNoIntermediate::CHA:
                    tokenFinished();
                    qDebug() << "unhandled CSI FinalBytesNoIntermediate sequence" << character;
                    break;
                case FinalBytesNoIntermediate::CUP:
                    appendParameter();
                    if (!parameters.size()) {
                        //screen.moveCursorUp();
                        //screen.moveCursorHome();
                        screen.moveCursorTo(QPoint(1, 1));
                    }
                    else if (parameters.size() == 2) {
                        screen.moveCursorTo(QPoint(parameters[1], parameters[0]));
                    }
                    else {
                        qDebug() << "CUP bad parameters" << parameters;
                    }


                    tokenFinished();
                    break;
                case FinalBytesNoIntermediate::CHT:
                    tokenFinished();
                    qDebug() << "unhandled CSI FinalBytesNoIntermediate sequence" << character;
                    break;
                case FinalBytesNoIntermediate::ED:
//                        qDebug() << "ED unimplemented";
                    appendParameter();
                    if (!parameters.size()) {
                        //m_screen->eraseFromCurrentLineToEndOfScreen();
                        screen.clearToEndOfScreen();
                    } else {
                        switch (parameters.at(0)) {
                        case 1:
                            //m_screen->eraseFromCurrentLineToBeginningOfScreen();

                            screen.clearToBeginningOfScreen();
                            break;
                        case 2:
                            screen.clearScreen();
                            break;
                        default:
                            qDebug() << "Invalid parameter value for FinalBytesNoIntermediate::ED";
                        }
                    }

                    tokenFinished();
                    break;
                case FinalBytesNoIntermediate::EL:
                    appendParameter();
                    if (!parameters.size() || parameters.at(0) == 0) {
                        screen.eraseFromCursor();
                    } else if (parameters.at(0) == 1) {
                        qDebug() << "Unimplemented erase cursor to position";
                        //m_screen->eraseToCursorPosition();
                    } else if (parameters.at(0) == 2) {
                        qDebug() << "Unimplemented eraseLine";
                        //m_screen->eraseLine();
                    } else {
                        qDebug() << "Fault when processing FinalBytesNoIntermediate::EL";
                    }
                    tokenFinished();
                    break;
                case FinalBytesNoIntermediate::IL: {
                    appendParameter();
                    int count = 1;
                    if (parameters.size()) {
                        count = parameters.at(0);
                    }
                    qDebug() << "Unimplemented insertLines";
                    //m_screen->insertLines(count);
                    tokenFinished();
                }
                break;
                case FinalBytesNoIntermediate::DL: {
                    appendParameter();
                    int count = 1;
                    if (parameters.size()) {
                        count = parameters.at(0);
                    }
                    qDebug() << "Unimplemented deleteLines";
                    //m_screen->deleteLines(count);
                    tokenFinished();
                }
                break;
                case FinalBytesNoIntermediate::EF:
                case FinalBytesNoIntermediate::EA:
                    qDebug() << "unhandled CSI FinalBytesNoIntermediate sequence" << character;
                    tokenFinished();
                    break;
                case FinalBytesNoIntermediate::DCH:
                {
                    appendParameter();
                    int count = 1;
                    if(parameters.size())
                        count = parameters[0];
                    screen.deleteRight(count);
                    tokenFinished();
                    break;
                }
                case FinalBytesNoIntermediate::SSE:
                case FinalBytesNoIntermediate::CPR:
                case FinalBytesNoIntermediate::SU:
                case FinalBytesNoIntermediate::SD:
                case FinalBytesNoIntermediate::NP:
                case FinalBytesNoIntermediate::PP:
                case FinalBytesNoIntermediate::CTC:
                case FinalBytesNoIntermediate::ECH:
                case FinalBytesNoIntermediate::CVT:
                case FinalBytesNoIntermediate::CBT:
                case FinalBytesNoIntermediate::SRS:
                case FinalBytesNoIntermediate::PTX:
                case FinalBytesNoIntermediate::SDS:
                case FinalBytesNoIntermediate::SIMD:
                case FinalBytesNoIntermediate::HPA:
                case FinalBytesNoIntermediate::HPR:
                case FinalBytesNoIntermediate::REP:
                    qDebug() << "unhandled CSI FinalBytesNoIntermediate sequence" << character;
                    tokenFinished();
                    break;
                case FinalBytesNoIntermediate::DA:
                    appendParameter();
                    if (parameters.size()) {
                        switch (parameters.at(0)) {
                        case -'>':
                            //m_screen->sendSecondaryDA();
                            break;
                        case -'?':
                            qDebug() << "WHAT!!!";
                            break; //ignore
                        case 0:
                        default:
                            ;//m_screen->sendPrimaryDA();
                        }
                    } else {
                        //m_screen->sendPrimaryDA();
                    }
                    tokenFinished();
                    break;
                case FinalBytesNoIntermediate::VPA:
                case FinalBytesNoIntermediate::VPR:
                case FinalBytesNoIntermediate::HVP:
                case FinalBytesNoIntermediate::TBC:
                    qDebug() << "unhandled CSI FinalBytesNoIntermediate sequence" << character;
                    tokenFinished();
                    break;
                case FinalBytesNoIntermediate::SM:
                    appendParameter();
                    if (parameters.size() && parameters.at(0) == -'?') {
                        if (parameters.size() > 1) {
                            switch (parameters.at(1)) {
                            case 1:
                                m_cursorKeyMode =  true;
                                emit cursorKeyModeChanged(true);
                                break;
                            case 12:
                                screen.setCursorBlinking(true);
                                break;
                            case 25:
                                screen.setCursorVisible(true);
                                break;
                            case 1034:
                                //I don't know what this sequence is
                                break;
                            case 1049:
                                qDebug() << "Unimplemented save cursor and save screen data";
                                //m_screen->saveCursor();
                                //m_screen->saveScreenData();
                                break;
                            default:
                                qDebug() << "unhandled CSI FinalBytesNoIntermediate::SM ? with parameter:" << parameters.at(1);
                            }
                        } else {
                            qDebug() << "unhandled CSI FinalBytesNoIntermediate::SM ?";
                        }
                    } else {
                        qDebug() << "unhandled CSI FinalBytesNoIntermediate::SM";
                    }
                    tokenFinished();
                    break;
                case FinalBytesNoIntermediate::MC:
                case FinalBytesNoIntermediate::HPB:
                case FinalBytesNoIntermediate::VPB:
                    qDebug() << "unhandled CSI FinalBytesNoIntermediate sequence" << character;
                    tokenFinished();
                    break;
                case FinalBytesNoIntermediate::RM:
                    appendParameter();
                    if (parameters.size()) {
                        qDebug() << parameters;
                        switch(parameters.at(0)) {
                        case -'?':
                            if (parameters.size() > 1) {
                                switch(parameters.at(1)) {
                                case 1:
                                    m_cursorKeyMode =  false;
                                    emit cursorKeyModeChanged(true);
                                    break;
                                case 12:
                                    screen.setCursorBlinking(false);
                                    break;
                                case 25:
                                    screen.setCursorVisible(false);
                                    break;
                                case 1049:
                                    qDebug() << "Unimplemented restore cursor and restore screen data";
                                    //m_screen->restoreCursor();
                                    //m_screen->restoreScreenData();
                                    break;
                                default:
                                    qDebug() << "unhandled CSI FinalBytesNoIntermediate::RM? with "
                                             "parameter " << parameters.at(1);
                                }
                            } else {
                                qDebug() << "unhandled CSI FinalBytesNoIntermediate::RM";
                            }
                            break;
                        case 4:
                            qDebug() << "REPLACE MODE!";
                        default:
                            qDebug() << "unhandled CSI FinalBytesNoIntermediate::RM";
                            break;
                        }
                    }
                    tokenFinished();
                    break;
                case FinalBytesNoIntermediate::SGR: {
                    appendParameter();

                    if (!parameters.size())
                        parameters << 0;

                    for (int i = 0; i < parameters.size(); i++) {
                        switch(parameters.at(i)) {
                        case 0:
                            screen.style().reset();
                            break;
                        case 1:
                            screen.style().setFlag(ScreenStyle::Bold);
                            break;
                        case 5:
                            screen.style().setFlag(ScreenStyle::Blinking);
                            break;
                        case 4:
                            qDebug() << "Set palette!!";
                            tokenFinished();
                            break;
                        case 7:
                            screen.style().setFlag(ScreenStyle::Inverse);
                            break;
                        case 8:
                        {
                            QColor c = screen.style().fgColor();
                            c.setAlpha(0);
                            screen.style().setFgColor(c);
                            break;
                        }
                        case 22:
                            screen.style().clearFlag(ScreenStyle::Bold);
                            break;
                        case 24:
                            screen.style().clearFlag(ScreenStyle::Underline);
                            break;
                        case 25:
                            screen.style().clearFlag(ScreenStyle::Blinking);
                            break;
                        case 27:
                            screen.style().clearFlag(ScreenStyle::Inverse);
                            break;
                        case 28:
                        {
                            QColor c = screen.style().fgColor();
                            c.setAlpha(255);
                            screen.style().setFgColor(c);
                            break;
                        }
                        case 39:
                            screen.style().setFlag(ScreenStyle::DefaultFg);
                            break;
                        case 49:
                            screen.style().setFlag(ScreenStyle::DefaultBg);
                            break;
                        case 30:
                        case 31:
                        case 32:
                        case 33:
                        case 34:
                        case 35:
                        case 36:
                        case 37:
                            //screen.setFgColor(palette[parameters[i] - 30]);
                            //qDebug() << "Set fg color";
                            if(screen.style().hasFlag(ScreenStyle::Bold))
                                screen.style().setFgColor(brightPalette8[parameters[i] - 30]);
                            else
                                screen.style().setFgColor(darkPalette8[parameters[i] - 30]);
                            break;
                        case 40:
                        case 41:
                        case 42:
                        case 43:
                        case 44:
                        case 45:
                        case 46:
                        case 47:
                            //m_screen->setTextStyleColor(parameters.at(i));
                            //qDebug() << "Set bg color" << parameters[i];
                            screen.style().setBgColor(darkPalette8[parameters[i] - 40]);
                            break;
                        // below is 16-colors xterm support - http://www.xfree86.org/current/ctlseqs.html
                        case 90:
                        case 91:
                        case 92:
                        case 93:
                        case 94:
                        case 95:
                        case 96:
                        case 97:
                            screen.style().setFgColor(brightPalette8[parameters[i] - 90]);
                            break;
                        case 100:
                        case 101:
                        case 102:
                        case 103:
                        case 104:
                        case 105:
                        case 106:
                        case 107:
                            screen.style().setBgColor(brightPalette8[parameters[i] - 100]);
                            break;
                        case 38:
                            appendParameter();
                            qDebug() << "256 colors support fg" << parameters;
                            screen.style().setFgColor(color256(parameters[2]));
                            i = parameters.size();
                            tokenFinished();
                            break;
                        case 48:
                            appendParameter();
                            screen.style().setBgColor(color256(parameters[2]));
                            i = parameters.size();
                            tokenFinished();
                            break;
                        default:
                            qDebug() << "Unknown SGR" << parameters.at(i);
                        }
                    }

                    tokenFinished();
                }
                break;
                case FinalBytesNoIntermediate::DSR:
                    qDebug() << "report";
                case FinalBytesNoIntermediate::DAQ:
                case FinalBytesNoIntermediate::Reserved0:
                case FinalBytesNoIntermediate::Reserved1:
                    qDebug() << "Unhandeled CSI FinalBytesNoIntermediate squence" << character;
                    tokenFinished();
                    break;
                case FinalBytesNoIntermediate::Reserved2:
                    appendParameter();
                    if (parameters.size() == 2) {
                        if (parameters.at(0) >= 0) {
                            qDebug() << "Unimplemented setScrollArea";
                            //m_screen->setScrollArea(parameters.at(0),parameters.at(1));
                        } else {
                            qDebug() << "Unknown value for scrollRegion";
                        }
                    } else {
                        qDebug() << "Unknown parameterset for scrollRegion";
                    }
                    tokenFinished();
                    break;
                case FinalBytesNoIntermediate::Reserved3:
                case FinalBytesNoIntermediate::Reserved4:
                case FinalBytesNoIntermediate::Reserved5:
                case FinalBytesNoIntermediate::Reserved6:
                case FinalBytesNoIntermediate::Reserved7:
                case FinalBytesNoIntermediate::Reserved8:
                case FinalBytesNoIntermediate::Reserved9:
                case FinalBytesNoIntermediate::Reserveda:
                case FinalBytesNoIntermediate::Reservedb:
                case FinalBytesNoIntermediate::Reservedc:
                case FinalBytesNoIntermediate::Reservedd:
                case FinalBytesNoIntermediate::Reservede:
                case FinalBytesNoIntermediate::Reservedf:
                default:
                    qDebug() << "Unhandeled CSI FinalBytesNoIntermediate squence" << character;
                    tokenFinished();
                    break;
                }
            }
        }
    }
}