diff --git a/ChangeLog b/ChangeLog index 7eb1e501..7258dc13 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2017-07-08 Markus Gans + * Extension of the unit test of FOptiMove + 2017-07-01 Markus Gans * All in FOptiMove required termcap values can now be passed with a single struct diff --git a/examples/opti-move.cpp b/examples/opti-move.cpp index bf15f2cd..5afcbc52 100644 --- a/examples/opti-move.cpp +++ b/examples/opti-move.cpp @@ -98,7 +98,8 @@ void move (int xold, int yold, int xnew, int ynew) "NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "BEL", "BS", "Tab", "LF", "VT", "FF", "CR", "SO", "SI", "DLE", "DC1", "DC2", "DC3", "DC4", "NAK", "SYN", "ETB", - "CAN", "EM", "SUB", "Esc", "FS", "GS", "RS", "US" + "CAN", "EM", "SUB", "Esc", "FS", "GS", "RS", "US", + "Space" }; term_boundaries(xold, yold); @@ -117,7 +118,7 @@ void move (int xold, int yold, int xnew, int ynew) { char ch = buffer[i]; - if ( ch < 0x20 ) + if ( ch < 0x21 ) sequence += ctrl_character[uInt(ch)]; else sequence += ch; diff --git a/include/final/fapplication.h b/include/final/fapplication.h index cdeb8494..f27fbacf 100644 --- a/include/final/fapplication.h +++ b/include/final/fapplication.h @@ -142,8 +142,8 @@ class FApplication : public FWidget ssize_t readKey(); FWidget* findKeyboardWidget(); bool getKeyPressedState(); - void keyboardBufferTimeout (FWidget*); - void parseKeyPuffer (FWidget*); + void emptyKeyBufferOnTimeout(); + void parseKeyBuffer (FWidget*); void performKeyboardAction (FWidget*); void sendEscapeKeyPressEvent (FWidget*); bool sendKeyDownEvent (FWidget*); diff --git a/include/final/ftermios.h b/include/final/ftermios.h index 33246af7..e0575c2d 100644 --- a/include/final/ftermios.h +++ b/include/final/ftermios.h @@ -38,7 +38,6 @@ #include #include -#include "final/fterm.h" #include "final/ftypes.h" diff --git a/src/fapplication.cpp b/src/fapplication.cpp index 11cf41ca..7433187e 100644 --- a/src/fapplication.cpp +++ b/src/fapplication.cpp @@ -566,10 +566,10 @@ inline bool FApplication::getKeyPressedState() } //---------------------------------------------------------------------- -inline void FApplication::keyboardBufferTimeout (FWidget*) +inline void FApplication::emptyKeyBufferOnTimeout() { // Empty the buffer on timeout - if ( fifo_in_use && isKeypressTimeout(&time_keypressed) ) + if ( fifo_in_use && isKeypressTimeout(&time_keypressed) ) { fifo_offset = 0; key = 0; @@ -579,7 +579,7 @@ inline void FApplication::keyboardBufferTimeout (FWidget*) } //---------------------------------------------------------------------- -inline void FApplication::parseKeyPuffer (FWidget* widget) +inline void FApplication::parseKeyBuffer (FWidget* widget) { register ssize_t bytesread; getCurrentTime (&time_keypressed); @@ -746,12 +746,12 @@ inline void FApplication::sendKeyboardAccelerator() void FApplication::processKeyboardEvent() { FWidget* widget = findKeyboardWidget(); - keyboardBufferTimeout(widget); + emptyKeyBufferOnTimeout(); flush_out(); bool isKeyPressed = getKeyPressedState(); if ( isKeyPressed ) - parseKeyPuffer (widget); + parseKeyBuffer (widget); // special case: Esc key sendEscapeKeyPressEvent (widget); diff --git a/src/fterm.cpp b/src/fterm.cpp index 2f77abfd..343e1036 100644 --- a/src/fterm.cpp +++ b/src/fterm.cpp @@ -262,12 +262,11 @@ int FTerm::parseKeyString ( char buffer[] , int buf_size , timeval* time_keypressed ) { - int key; uChar firstchar = uChar(buffer[0]); if ( firstchar == ESC[0] ) { - key = getMouseProtocolKey(buffer); + int key = getMouseProtocolKey(buffer); if ( key > 0 ) return key; diff --git a/src/ftermios.cpp b/src/ftermios.cpp index eec21abb..4bd1115e 100644 --- a/src/ftermios.cpp +++ b/src/ftermios.cpp @@ -21,6 +21,7 @@ ***********************************************************************/ #include "final/ftermios.h" +#include "final/fterm.h" // static class attributes int FTermios::stdin_no; diff --git a/src/test/foptimove-test.cpp b/src/test/foptimove-test.cpp index 7a9cd6fc..bc421240 100644 --- a/src/test/foptimove-test.cpp +++ b/src/test/foptimove-test.cpp @@ -79,6 +79,7 @@ class FOptiMoveTest : public CPPUNIT_NS::TestFixture void cygwinTest(); void puttyTest(); void teratermTest(); + void wyse50Test(); private: std::string printSequence (const std::string&); @@ -99,6 +100,7 @@ class FOptiMoveTest : public CPPUNIT_NS::TestFixture CPPUNIT_TEST (cygwinTest); CPPUNIT_TEST (puttyTest); CPPUNIT_TEST (teratermTest); + CPPUNIT_TEST (wyse50Test); // End of test suite definition CPPUNIT_TEST_SUITE_END(); @@ -638,10 +640,6 @@ void FOptiMoveTest::teratermTest() om.setTermEnvironment(optimove_env); - //std::cout << "\nSequence: " - // << printSequence(om.moveCursor (1, 2, 3, 4)) - // << "\n"; - CPPUNIT_ASSERT_CSTRING (om.moveCursor (0, 0, 5, 5), C_STR(CSI "6;6H")); CPPUNIT_ASSERT_CSTRING (om.moveCursor (5, 5, 0, 0), C_STR(CSI "H")); CPPUNIT_ASSERT_CSTRING (om.moveCursor (79, 1, 0, 1), C_STR("\r")); @@ -677,6 +675,64 @@ void FOptiMoveTest::teratermTest() CPPUNIT_ASSERT_CSTRING (om.moveCursor (53, 2, 53, -3), C_STR(CSI "1d")); } + +//---------------------------------------------------------------------- +void FOptiMoveTest::wyse50Test() +{ + FOptiMove om; + om.setTermSize (80, 25); + om.setBaudRate (38400); + om.set_auto_left_margin (true); + om.set_tabular (C_STR("\t")); + om.set_back_tab (C_STR(ESC "I")); + om.set_cursor_home (C_STR("\036")); + om.set_cursor_to_ll (C_STR("\036\v")); + om.set_carriage_return (C_STR("\r")); + om.set_cursor_up (C_STR("\v")); + om.set_cursor_down (C_STR("\n")); + om.set_cursor_right (C_STR("\f")); + om.set_cursor_left (C_STR("\b")); + om.set_cursor_address (C_STR(ESC "=%p1%' '%+%c%p2%' '%+%c")); + + //std::cout << "\nSequence: " + // << printSequence(om.moveCursor (1, 2, 3, 4)) + // << "\n"; + + CPPUNIT_ASSERT_CSTRING (om.moveCursor (0, 0, 5, 5), C_STR(ESC "=%%")); + CPPUNIT_ASSERT_CSTRING (om.moveCursor (5, 5, 0, 0), C_STR("\036")); + CPPUNIT_ASSERT_CSTRING (om.moveCursor (79, 1, 0, 1), C_STR("\r")); + CPPUNIT_ASSERT_CSTRING (om.moveCursor (79, 1, 0, 2), C_STR("\r\n")); + CPPUNIT_ASSERT_CSTRING (om.moveCursor (9, 4, 10, 4), C_STR("\f")); + CPPUNIT_ASSERT_CSTRING (om.moveCursor (10, 4, 9, 4), C_STR("\b")); + CPPUNIT_ASSERT_CSTRING (om.moveCursor (9, 4, 11, 4), C_STR("\f\f")); + CPPUNIT_ASSERT_CSTRING (om.moveCursor (11, 4, 9, 4), C_STR("\b\b")); + CPPUNIT_ASSERT_CSTRING (om.moveCursor (1, 0, 8, 0), C_STR(ESC "= (")); + CPPUNIT_ASSERT_CSTRING (om.moveCursor (16, 0, 16, 1), C_STR("\n")); + CPPUNIT_ASSERT_CSTRING (om.moveCursor (16, 1, 16, 0), C_STR("\v")); + CPPUNIT_ASSERT_CSTRING (om.moveCursor (16, 0, 16, 2), C_STR("\n\n")); + CPPUNIT_ASSERT_CSTRING (om.moveCursor (16, 2, 16, 0), C_STR("\v\v")); + CPPUNIT_ASSERT_CSTRING (om.moveCursor (3, 2, 79, 2), C_STR("\r\b\n")); + CPPUNIT_ASSERT_CSTRING (om.moveCursor (5, 5, 75, 20), C_STR(ESC "=4k")); + CPPUNIT_ASSERT_CSTRING (om.moveCursor (39, 0, 32, 0), C_STR(ESC "= @")); + CPPUNIT_ASSERT_CSTRING (om.moveCursor (10, 0, 8, 0), C_STR("\b\b")); + + // xold is outside screen + CPPUNIT_ASSERT_CSTRING (om.moveCursor (99, 10, 79, 10), C_STR(ESC "=*o")); + CPPUNIT_ASSERT_CSTRING (om.moveCursor (-3, 33, 50, 10), C_STR(ESC "=*R")); + + // ynew is outside screen + CPPUNIT_ASSERT_CSTRING (om.moveCursor (23, 33, 23, 10), C_STR(ESC "=*7")); + CPPUNIT_ASSERT_CSTRING (om.moveCursor (23, -3, 12, 10), C_STR(ESC "=*,")); + + // xnew is outside screen + CPPUNIT_ASSERT_CSTRING (om.moveCursor (53, 22, 100, 22), C_STR("\r\b\n")); + CPPUNIT_ASSERT_CSTRING (om.moveCursor (3, 22, -5, 22), C_STR("\r")); + + // ynew is outside screen + CPPUNIT_ASSERT_CSTRING (om.moveCursor (53, 23, 53, 40), C_STR("\n")); + CPPUNIT_ASSERT_CSTRING (om.moveCursor (53, 2, 53, -3), C_STR("\v\v")); +} + //---------------------------------------------------------------------- std::string FOptiMoveTest::printSequence (const std::string& s) {