protected void enterDatum()
        throws IOException {

        if (m_state == ST_INVALID) {
            return;
        }
        else if (iBAIS.available() == 0) {
            m_state = ST_INVALID;
            return;
        }
        else if (Action.isEnd(iRdAction)) {
            // we have read and returned the end point and now there is
            // only another EPT left.
            m_state = ST_INVALID;
            return;
        }
        else if (iRdAction == Action.SPECIAL_TRUNCATION) {
            // we have read the special truncation point and must not wander
            // into the part of the route which have only coordinates around
            // the waypoints.
            m_state = ST_INVALID;
            return;
        }
        else {
            iRdAction = iRDIS.readUnsignedShort();
            // System.out.println("Nav2RouteIterator.enterDatum() action "
            //                    + Nav2Route.datumAction2String(iRdAction)
            //                    + "@" + (iBAIS.getPos() - 2));

            if (Action.isOrigo(iRdAction)) {
                m_currentMiniMap = m_currentMiniMap.getNext();
                m_x = m_currentMiniMap.m_prevPointX;
                m_y = m_currentMiniMap.m_prevPointY;
                iBAIS.setPos(m_currentMiniMap.m_firstDatumBufPos);
                enterDatum();
            }
        }
    } // enterDatum