// 準備の描画 void CStage::FinishStringDraw(){ if (!isFinish)return; m_finish_graph->Draw("Finish", m_finish_pos.x(), m_finish_pos.y(), color256(102, 51, 255)); }
// レディーの描画 void CStage::ReadyStringDraw(){ if (!isReady)return; m_ready_graph->Draw("Ready", m_ready_pos.x(), m_ready_pos.y(), color256(102, 51, 255)); }
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; } } } } }
// スコアの文字描画 void CStage::ScoreStringDraw(){ m_score_graph->Draw(L"SCORE", -CScene::WIDTH / 2, CScene::HEIGHT / 2 - m_score_graph->GetSize() / 1.5, color256(102, 51, 255)); }
/* Change background color */ static void _set_bg(TERM_REC *term, int color) { tput(tparm(term->TI_bg[color256(term, color)])); }