Exemple #1
0
static list<accepting> insert(list<accepting> const & l, unsigned priority, list<action> const & p, expr const & a) {
    if (!l) {
        return to_list(accepting(priority, p, a));
    } else if (priority <= head(l).get_prio()) {
        return cons(accepting(priority, p, a), l);
    } else {
        return cons(head(l), insert(tail(l), priority, p, a));
    }
}
Exemple #2
0
parse_table parse_table::add_core(unsigned num, transition const * ts, expr const & a,
                                  unsigned priority, bool overload, buffer<action> & post_buffer) const {
    parse_table r(new cell(*m_ptr));
    if (num == 0) {
        list<action> postponed = to_list(post_buffer);
        if (!overload) {
            r.m_ptr->m_accept = to_list(accepting(priority, postponed, a));
        } else {
            auto new_accept   = filter(r.m_ptr->m_accept, [&](accepting const & p) {
                    return p.get_expr() != a || p.get_postponed() != postponed;
                });
            r.m_ptr->m_accept = insert(new_accept, priority, postponed, a);
        }
    } else {
        list<pair<action, parse_table>> const * it = r.m_ptr->m_children.find(ts->get_token());
        action const & ts_act = ts->get_action();
        action_kind k = ts_act.kind();
        if (k == action_kind::Exprs || k == action_kind::ScopedExpr)
            post_buffer.push_back(ts_act);
        list<pair<action, parse_table>> new_lst;
        if (it) {
            if (contains_equivalent_action(*it, ts_act)) {
                buffer<pair<action, parse_table>> tmp;
                to_buffer(*it, tmp);
                for (pair<action, parse_table> & p : tmp) {
                    if (p.first.is_equivalent(ts_act)) {
                        p.second = p.second.add_core(num-1, ts+1, a, priority, overload, post_buffer);
                        break;
                    }
                }
                new_lst = to_list(tmp);
            } else {
                // remove incompatible actions
                new_lst = filter(*it, [&](pair<action, parse_table> const & p) {
                        return p.first.is_compatible(ts_act);
                    });
                parse_table new_child = parse_table().add_core(num-1, ts+1, a, priority, overload, post_buffer);
                new_lst   = cons(mk_pair(ts_act, new_child), new_lst);
            }
        } else {
            parse_table new_child = parse_table().add_core(num-1, ts+1, a, priority, overload, post_buffer);
            new_lst   = to_list(mk_pair(ts_act, new_child));
        }
        r.m_ptr->m_children.insert(ts->get_token(), new_lst);
    }
    return r;
}
Exemple #3
0
void MainWindow::init(bool is_development) {
    //qApp->installEventFilter(this);
  
    setWindowTitle(settings->value("window_title").toString());

    if (settings->value("minified_state").toString() == "true") {
        setWindowState(Qt::WindowMinimized);
    }

    this->setMinimumWidth(430);
    this->setMinimumHeight(430);

    webView = new QWebView(this);
    if (settings->value("context_menu").toString() == "false") {
        webView->setContextMenuPolicy(Qt::NoContextMenu);
    }
    this->setCentralWidget(webView);

    m_network_manager = new QNetworkAccessManager(this);

    QWebPage *webPage = webView->page();
    webPage->setNetworkAccessManager(m_network_manager);
    webPage->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
    connect(webPage, &QWebPage::linkClicked, this, &MainWindow::onLinkClicked);
    connect(webPage->mainFrame(), &QWebFrame::javaScriptWindowObjectCleared, this, &MainWindow::attachJsApi);

    webView->show();

    bootstrap(is_development);

    // restore saved window geometry from .ini file
    QVariant size = settings->value("main_window_geometry");
    if ( size.isNull() ) {
        this->setGeometry(QRect(500, 100, 700, 500));
    } else {
        this->setGeometry(size.toRect());
    }

    // restore saved zoom factor from .ini file
    qreal z = settings->value("zoom_factor").toReal();
    if ( z ) webView->page()->mainFrame()->setZoomFactor(z);

    m_jsApi = new JsApi(this);

    optionsDialog = new OptionsDialog(this);
    optionsDialog->m_version = m_version;
    connect(optionsDialog, SIGNAL(accepting()), m_jsApi, SLOT(onOptionsDialogAccepted()));

    QShortcut *zoomin = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Plus), this);
    connect(zoomin, &QShortcut::activated, this, &MainWindow::onZoomIn);

    QShortcut *zoomout = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Minus), this);
    connect(zoomout, &QShortcut::activated, this, &MainWindow::onZoomOut);

    QShortcut *shutdown = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q), this);
    connect(shutdown, &QShortcut::activated, m_jsApi, &JsApi::shutdown);

    QWebSettings::setObjectCacheCapacities(0, 0, 0);

    if (settings->value("webinspector").toString() == "true") {
        QWebSettings::globalSettings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);

        QWebInspector *inspector;
        inspector = new QWebInspector();
        inspector->setPage(webView->page());
        inspector->setGeometry(QRect(500, 10, 1000, 700));
        inspector->show();
    }

    QIcon icon = QIcon(application_path + "/" + APPNAME + ".png");
    m_trayIcon = new QSystemTrayIcon(this);
    m_trayIcon->setIcon(icon);
    m_trayIcon->show();
    connect(m_trayIcon, &QSystemTrayIcon::messageClicked, m_jsApi, &JsApi::onTrayMessageClicked);
    connect(m_trayIcon, &QSystemTrayIcon::activated, m_jsApi, &JsApi::onTrayIconActivated);
}
Exemple #4
0
void main(void){
	WSADATA wsaData;
	SOCKET listeningSocket;
	SOCKET newConnection;
	struct sockaddr_in serverAddr, tempAddr;
	struct sockaddr_storage clientAddr;
	int clientAddrLen;
	int port = 5150;
	int returnValue, tempAddrLen;
	char dataBuffer[666], ansiBuffer[666];

	// Инициализация Winsock версии 2.2
	if ((returnValue = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0){
		myprintf("WSAStartup ошибка %s\n", encodeWSAGetLastError(returnValue));
		return;
	}
	///////////////////////////////////////////////////////////////////////////////////////////////////
	// Создаём новый TCP сокет для приёма запросов на соединение от клиентов.
	listeningSocket = getSocket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

	// Заполняем   struct sockaddr_in serverAddr, которая скажет функции bind, что мы хотим
	// слушать соединения на всех интерфейсах (INADDR_ANY), используя порт 5150. 
	// Мы преобразуем порядок байт  из системного в сетевой (htons и htonl)
	serverAddr.sin_family = AF_INET;
	serverAddr.sin_port = htons(port);
	serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);

	// bind привязывает адресную информацию, определённую  в serverAddr к сокету  listeningSocket
	bindSocket(listeningSocket, serverAddr);

	// Сокет пасивный для прослушивания (приёма) TCP соединений. Длина очереди запросов на соединение = 5
	setListen(listeningSocket, 5);
	tempAddrLen = sizeof(tempAddr);
	
	getsockname(listeningSocket, (struct sockaddr *)&tempAddr, &tempAddrLen);
	myprintf("Локальный адрес:%s и порт:%d \n", inet_ntoa(tempAddr.sin_addr), ntohs(tempAddr.sin_port));
	tempAddrLen = sizeof(tempAddr);
	getpeername(listeningSocket, (struct sockaddr *)&tempAddr, &tempAddrLen);
	myprintf("Удалённый адрес:%s и порт:%d \n", inet_ntoa(tempAddr.sin_addr), ntohs(tempAddr.sin_port));

	myprintf("Ожидаем соединение на порту %d.\n", port);
	// Принимаеи новое соединение, когда оно возникнет
	clientAddrLen = sizeof(clientAddr);
	clientAddr.__ss_align = 0;
	newConnection = accepting(listeningSocket, &clientAddr, clientAddrLen);
	
	getsockname(newConnection, (struct sockaddr *)&tempAddr, &tempAddrLen);
	myprintf("Локальный адрес:%s и порт:%d сокета сервера\n", inet_ntoa(tempAddr.sin_addr), ntohs(tempAddr.sin_port));
	getpeername(newConnection, (struct sockaddr *)&tempAddr, &tempAddrLen);
	myprintf("Удаленный адрес:%s и порт:%d сокета клиента\n", inet_ntoa(tempAddr.sin_addr), ntohs(tempAddr.sin_port));
	
	// Далее мы можем снова ожидать на сокете listeningSocket новые соединения снова вызывая accept
	// и/или начать передавать и принимать данные на сокете newConnection. 
	// Для простоты остановим прослушивание, закрывая сокет listeningSocket. 
	// Можно начнинать приём и предачу данных на сокете newConnection.

	closesocket(listeningSocket);

	myprintf("Ждём данные для получения..\n");
	/*if ((returnValue = recv(newConnection, dataBuffer, sizeof(dataBuffer), 0)) == SOCKET_ERROR){
		myprintf("Ошибка recv %s\n", encodeWSAGetLastError(WSAGetLastError()));
		closesocket(newConnection);
		WSACleanup();
		exit(1);
	}*/
	if ((returnValue = recv(newConnection, u1.c, sizeof(u1), 0)) == SOCKET_ERROR){
		myprintf("Ошибка recv %s\n", encodeWSAGetLastError(WSAGetLastError()));
		closesocket(newConnection);
		WSACleanup();
		exit(1);
	}
	// Делаем из полученных данных строку на С
	//dataBuffer[returnValue] = '\0';
	//OemToChar(dataBuffer, ansiBuffer);
	int offset = 0, result1=1, result2=1;
	
	printf("%e", u1.d);
		//int operationIndex = switchOperation(ansiBuffer, &offset);
	/*if (operationIndex == -1){
		myprintf("Получено %d байтов в сообщении  %s\n", returnValue, ansiBuffer);
		myprintf("\nОбратная передача сообщения...\n");
		returnValue = sendMessage(newConnection, ansiBuffer, strlen(ansiBuffer));
		myprintf("Передано %d байтов.\n", returnValue);
	}
	else{
		BOOL flagAnswer = FALSE;
		int answer = 0;
		myprintf("%s\n", ansiBuffer);
		switch (operationIndex)
		{
		case 0:
			myprintf("Принята команда <qs> на закрытие...\n");
			break;
		case 1:
			if (getNumber(ansiBuffer, offset, &result1, &result2))
				flagAnswer = TRUE;
				answer = result1 + result2;
				myprintf("%d\n", answer);
			break;
		case 2:
			if (getNumber(ansiBuffer, offset, &result1, &result2))
				flagAnswer = TRUE;
				answer = result1 - result2;
				myprintf("%d\n", answer);
			break;
		case 3:
			if (getNumber(ansiBuffer, offset, &result1, &result2))
				flagAnswer = TRUE;
				answer = result1 * result2;
				myprintf("%d\n", answer);
			break;
		case 4:
			if (getNumber(ansiBuffer, offset, &result1, &result2))
			if (result2 != 0){
				flagAnswer = TRUE;
				answer = result1 / result2;
				myprintf("%d\n", answer);
			}else myprintf("Деление на 0!\n");
			break;
		default:
			break;
		}
		if (flagAnswer){
			myprintf("\nОбратная передача сообщения...\n");
			char temp[666];
			_itoa_s(answer, temp, 666, 10);
			returnValue = sendMessage(newConnection, temp, strlen(temp));
			myprintf("Передано %d байтов.\n", returnValue);
		}
	}*/
	myprintf("Закрываем соединение с клиентом.\n");
	closesocket(newConnection);
	WSACleanup();
	system("pause");
}
void ObjectSimpleViewer::
addObject(
  WoolzObject * object,
  bool doViewAll,
  ObjectView *previousView)
{
  if(accepting(object))
  {
    ObjectView *view;
    view = Factory(this, object);

    //if object has no data or can not be visualised
    //then generate no view
    if(!view)
    {
        return;
    }
    views.append(view);
    if (object->isWarped())
    {
      views_root_s->insertChild(view->getSceneGraph(true),0);
    }
    else
    {
      views_root_t->insertChild(view->getSceneGraph(true),0);
    }

    if(previousView)
    {
        view->setVisibility(previousView->getVisibility());
        view->setTransparency(previousView->getTransparency());
    }
    else
    {
      int transparency = initialTransparency(object);
      if(transparency != 100)
      {
        view->setVisibility(true);
        view->setTransparency(transparency);
      }
      else
      {
        view->setVisibility(false);
        view->setTransparency(0);
      }
    }

    connect(view, SIGNAL(viewPropertyChanged()),
            this, SLOT(viewPropertyChanged()));
    connect(view, SIGNAL(regerateView()),
            this, SLOT(regerateView()));
    emit addedView(view);
    if(m_viewAll)
    {
      m_viewer->viewAll();
      if(doViewAll)
      {
	m_viewAll = false;
      }
    }
  }
}