コード例 #1
0
ファイル: edit.c プロジェクト: Sadzeih/42sh
char		*line_edition(char **env)
{
  int		(*keys_actions[15])(void);
  int		ret;

  if (isatty(0) == 0)
    return (get_next_line(0));
  if ((g_line = malloc(sizeof(t_line))) == NULL)
    return (print_and_return_ptr(NULL, "Allocation error.\n"));
  if ((ret = get_termcaps(env) == 1) || ret == -1 || (set_termcaps(1) == -1))
    return (get_next_line(0));
  g_line->pos = 0;
  g_line->cmd = NULL;
  signal(SIGINT, &free_line);
  init_actions(keys_actions);
  init_keys();
  ret = loop_keys(keys_actions);
  if (set_termcaps(0) == -1)
    return (NULL);
  if (ret == 0)
    {
      if (line_ret() == -1)
	return (NULL);
      return (g_line->cmd);
    }
  return (NULL);
}
コード例 #2
0
ファイル: discdetails.cpp プロジェクト: realbardia/silicon
DiscDetails::DiscDetails( SApplication *parent ) :
    SPage( tr("Disc Details") , parent )
{
    p = new DiscDetailsPrivate;

    p->spacer_widget = new QWidget();
        p->spacer_widget->setSizePolicy( QSizePolicy::MinimumExpanding , QSizePolicy::MinimumExpanding );

    p->slider = new SSliderWidget();
        p->slider->setShowingAll( true );
        p->slider->addWidget( p->spacer_widget );

    p->toolbar = new QToolBar();
        p->toolbar->setToolButtonStyle( Qt::ToolButtonTextBesideIcon );
        p->toolbar->setStyleSheet( "QToolBar{ border-style:solid ; margin:0px }" );

    p->scroll = new QScrollArea();
        p->scroll->setWidget( p->slider );
        p->scroll->setWidgetResizable( true );
        p->scroll->setFrameShadow( QFrame::Plain );
        p->scroll->setFrameShape( QFrame::NoFrame );
        p->scroll->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOn );
        p->scroll->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
        p->scroll->viewport()->setAutoFillBackground( false );

    p->layout = new QVBoxLayout( this );
        //p->layout->addWidget( p->toolbar );
        p->layout->addWidget( p->scroll  );
        p->layout->setContentsMargins( 1 , 1 , 1 , 1 );
        p->layout->setSpacing( 1 );

    init_actions();
    setToolBar( p->toolbar );
    setMinimumSize( QSize(720,350) );
}
コード例 #3
0
static void
create_action_list( void **state ) {
  action_list *ac_list = complete_action_list();

  init_actions();
  *state = ( void * ) ac_list;
}
コード例 #4
0
DJISDKNode::DJISDKNode(ros::NodeHandle& nh, ros::NodeHandle& nh_private)
{
    init_publishers(nh);
    init_services(nh);
    init_actions(nh);
    init_parameters_and_activate(nh_private);
}
コード例 #5
0
ファイル: markdown_viewer.cpp プロジェクト: jingqi/organic
MarkdownViewer::MarkdownViewer(QWidget *parent)
#if MARKDOWN_VIEWER_USE_QTWEBKIT
    : QWebView(parent),
#else
    :QWebEngineView(parent),
#endif
     _preview_generator(new HtmlPreviewGenerator)
{
#if MARKDOWN_VIEWER_USE_QTWEBKIT
    page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
    settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);
#else
    settings()->setAttribute(QWebEngineSettings::AutoLoadImages, true);
    settings()->setAttribute(QWebEngineSettings::JavascriptEnabled, true);
    settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true);
    settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true);
    settings()->setAttribute(QWebEngineSettings::LocalStorageEnabled, true);
#endif

    init_actions();
    init_popup_menu();

    _base_url = QUrl::fromLocalFile(qApp->applicationDirPath());

    // Setup preview
    connect(_preview_generator, SIGNAL(html_result_ready(QString)),
            this, SLOT(html_result_ready(QString)));
    _preview_generator->start();
}
コード例 #6
0
ファイル: niepcewindow.cpp プロジェクト: GNOME/niepce
Gtk::Widget *
NiepceWindow::buildWidget()
{
    if(m_widget) {
        return m_widget;
    }
    Gtk::Window & win(gtkWindow());

    m_widget = &win;

    init_actions();

    m_notifcenter = niepce::NotificationCenter::make(reinterpret_cast<uint64_t>(this));

    Glib::ustring name("camera-photo");
    set_icon_from_theme(name);

    m_notifcenter->signal_lib_notification.connect(
        sigc::mem_fun(*this, &NiepceWindow::on_lib_notification));

    win.set_size_request(600, 400);
    win.show_all_children();
    on_open_library();
    return &win;
}
コード例 #7
0
static void
create_bucket_list( void **state ) {
  bucket_list *bkt_list = create_action_bucket_list();

  action_list *ac_list = complete_action_list();
  const uint16_t weight = WEIGHT;
  const uint32_t watch_port = WATCH_PORT;
  const uint32_t watch_group = WATCH_GROUP;

//  expect_value( mock_is_valid_port_no, port_no, watch_port );
  bucket *bkt = create_action_bucket( weight, watch_port, watch_group, ac_list );
  if ( bkt != NULL ) {
    append_action_bucket( bkt_list, bkt );
  }
  init_actions();
  *state = ( void * ) bkt_list;
}
コード例 #8
0
ファイル: directory_tree.cpp プロジェクト: jingqi/organic
DirectoryTree::DirectoryTree(QWidget *parent)
    : QTreeView(parent)
{
    assert(NULL != parent);

    // model
    PkmPlugin *plugin = dynamic_cast<PkmPlugin*>(get_plugin().pointer());
    assert(NULL != plugin);
    DirectoryTreeModel *model = new DirectoryTreeModel(plugin->get_data_source()->get_db(), parent);
    connect(this, SIGNAL(expanded(QModelIndex)), model, SLOT(on_expanded(QModelIndex)));
    connect(this, SIGNAL(collapsed(QModelIndex)), model, SLOT(on_collapsed(QModelIndex)));
    setModel(model);

    // actions
    init_actions();

    // menus
    init_menus();

    // 双击展开而非进入编辑模式
    setExpandsOnDoubleClick(true);
    setAutoExpandDelay(600); // 拖拽时自动展开节点的延时(ms)
    setEditTriggers(EditKeyPressed);
    setMinimumWidth(140);

    // 隐藏首部
    setHeaderHidden(true);

    // 拖拽相关
    setSelectionMode(QAbstractItemView::SingleSelection); // 单选
    setDragEnabled(true); // 允许"拖"
    setAcceptDrops(true); // 允许"放"
    setDropIndicatorShown(true); // ?
    setDragDropMode(QAbstractItemView::DragDrop);
    setDefaultDropAction(Qt::MoveAction);

    // signals
    connect(this, SIGNAL(activated(QModelIndex)), this, SLOT(on_item_activated(QModelIndex)));
    // connect(this, SIGNAL(clicked(QModelIndex)), this, SLOT(on_item_activated(QModelIndex)));
    connect(selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(on_item_selected(QModelIndex,QModelIndex)));
    plugin->locate_directory.connect(this, &DirectoryTree::on_locate_directory);
}
コード例 #9
0
ファイル: item_list.cpp プロジェクト: jingqi/organic
ItemList::ItemList(QWidget *parent)
    : QTableView(parent)
{
    // model
    PasspotPlugin *plugin = dynamic_cast<PasspotPlugin*>(get_plugin().pointer());
    assert(NULL != plugin);
    QAbstractItemModel *model = new ItemListModel(plugin->get_datasource()->get_db(), parent);
    setModel(model);

    // actions
    init_actions();

    // menus
    init_menus();

    // 设置列宽
    setMinimumWidth(40);
    setColumnWidth(ItemListModel::COLUMN_TITLE, 140);
    setColumnWidth(ItemListModel::COLUMN_USER_NAME, 110);
    setColumnWidth(ItemListModel::COLUMN_PASSWORD, 90);
    setColumnWidth(ItemListModel::COLUMN_URL, 150);
    setColumnWidth(ItemListModel::COLUMN_COMMENT, 200);
#if QT_VERSION >= 0x050000
    horizontalHeader()->setSectionResizeMode(ItemListModel::COLUMN_COMMENT, QHeaderView::Stretch); // 伸缩
#endif

    // 拖拽相关
    setSelectionMode(QAbstractItemView::SingleSelection); // 单选
    setSelectionBehavior(QAbstractItemView::SelectRows);
    setDragEnabled(true); // 允许"拖"
    setAcceptDrops(false); // 不允许"放"
    setDropIndicatorShown(true); // ?
    setDragDropMode(QAbstractItemView::DragDrop); // 如果仅内部使用则使用 QAbstractItemView::InternalMove

    // event
    connect(this, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(on_double_click(QModelIndex)));
    connect(this, SIGNAL(activated(QModelIndex)), this, SLOT(on_item_activated(QModelIndex)));
    plugin->directory_activated.connect(this, &ItemList::on_directory_activated);
}
コード例 #10
0
ファイル: service.cpp プロジェクト: cloudmus/cloudmus
void Service::loadFinished(bool ok)
{
    if (!ok) return;

    frame_->addToJavaScriptWindowObject("QCloudmusDescriptor", &descriptor_);
    frame_->addToJavaScriptWindowObject("QCloudmusService", this);

    QString init_js = ""
                      "CloudmusService = {QObject: QCloudmusService, descriptor: QCloudmusDescriptor};"
                      "CloudmusService.actions = {}; CloudmusService.custom_actions = {}; "
                      "delete window.QCloudmusService;"
                      "delete window.QCloudmusDescriptor;"
                      ""
                      "CloudmusService.addAction = function(action, text, icon, func){"
                      "  CloudmusService.QObject.addCustomAction(action, text,  icon);"
                      "  CloudmusService.custom_actions[action].triggered.connect(func);"
                      "}";

    frame_->evaluateJavaScript(init_js);
    init_actions();
    frame_->evaluateJavaScript(service_);
}
コード例 #11
0
ファイル: mainpage.cpp プロジェクト: realbardia/silicon
MainPage::MainPage( SApplication *parent )
    : SPage( tr("Disc Eraser") , parent , SPage::WindowedPage )
{
    p = new MainPagePrivate;

    p->device_list = new SDeviceList( this );

    p->dst_combo = new SComboBox();
        p->dst_combo->setIconSize( QSize(22,22) );

    p->toolbar = new QToolBar();
        p->toolbar->setToolButtonStyle( Qt::ToolButtonTextBesideIcon );
        p->toolbar->setStyleSheet( "QToolBar{ border-style:solid ; margin:0px }" );

    p->options_widget = new QWidget();
    p->options_ui = new Ui::OptionsUi;
        p->options_ui->setupUi( p->options_widget );

    p->layout = new QVBoxLayout( this );
        p->layout->addWidget( p->dst_combo      );
        p->layout->addWidget( p->options_widget );
        p->layout->addWidget( p->toolbar        );
        p->layout->setContentsMargins( 10 , 10 , 10 , 10 );

    setFixedWidth( 373 );
    setFixedHeight( EXPANDED_HEIGHT );

    p->dst_combo->setCurrentIndex( 0 );

    connect( p->device_list , SIGNAL(deviceDetected(SDeviceItem)) , SLOT(deviceDetected(SDeviceItem)) );

    p->device_list->refresh();

    init_actions();
    more_prev();
}
コード例 #12
0
ファイル: clamav-milter.c プロジェクト: Distrotech/clamav
int main(int argc, char **argv) {
    char *my_socket, *pt;
    const struct optstruct *opt;
    struct optstruct *opts;
    time_t currtime;
    mode_t umsk;
    int ret;

    cl_initialize_crypto();

    memset(&descr, 0, sizeof(struct smfiDesc));
    descr.xxfi_name = "ClamAV";			/* filter name */
    descr.xxfi_version = SMFI_VERSION;		/* milter version */
    descr.xxfi_flags = SMFIF_QUARANTINE;	/* flags */
    descr.xxfi_connect = clamfi_connect;	/* connection info filter */
    descr.xxfi_envfrom = clamfi_envfrom;	/* envelope sender filter */
    descr.xxfi_envrcpt = clamfi_envrcpt;	/* envelope recipient filter */
    descr.xxfi_header = clamfi_header;		/* header filter */
    descr.xxfi_body = clamfi_body;		/* body block */
    descr.xxfi_eom = clamfi_eom;		/* end of message */
    descr.xxfi_abort = clamfi_abort;		/* message aborted */

    opts = optparse(NULL, argc, argv, 1, OPT_MILTER, 0, NULL);
    if (!opts) {
	mprintf("!Can't parse command line options\n");
	return 1;
    }

    if(optget(opts, "help")->enabled) {
	printf("Usage: %s [-c <config-file>]\n\n", argv[0]);
	printf("    --help                   -h       Show this help\n");
	printf("    --version                -V       Show version and exit\n");
	printf("    --config-file <file>     -c       Read configuration from file\n\n");
	optfree(opts);
	return 0;
    }

    if(opts->filename) {
	int x;
	for(x = 0; opts->filename[x]; x++)
	    mprintf("^Ignoring option %s\n", opts->filename[x]);
    }

    if(optget(opts, "version")->enabled) {
	printf("clamav-milter %s\n", get_version());
	optfree(opts);
	return 0;
    }

    pt = strdup(optget(opts, "config-file")->strarg);
    if (pt == NULL) {
	printf("Unable to allocate memory for config file\n");
	return 1;
    }
    if((opts = optparse(pt, 0, NULL, 1, OPT_MILTER, 0, opts)) == NULL) {
	printf("%s: cannot parse config file %s\n", argv[0], pt);
	free(pt);
	return 1;
    }
    free(pt);

    if((opt = optget(opts, "Chroot"))->enabled) {
	if(chdir(opt->strarg) != 0) {
	    logg("!Cannot change directory to %s\n", opt->strarg);
	    return 1;
	}
	if(chroot(opt->strarg) != 0) {
	    logg("!chroot to %s failed. Are you root?\n", opt->strarg);
	    return 1;
	}
    }

    pt = optget(opts, "AddHeader")->strarg;
    if (strcasecmp(pt, "No")) {
	char myname[255];

	if (((opt = optget(opts, "ReportHostname"))->enabled &&
	     strncpy(myname, opt->strarg, sizeof(myname))) ||
	    !gethostname(myname, sizeof(myname))) {

	    myname[sizeof(myname)-1] = '\0';
	    snprintf(xvirushdr, sizeof(xvirushdr), "clamav-milter %s at %s",
		     get_version(), myname);
	} else {
	    snprintf(xvirushdr, sizeof(xvirushdr), "clamav-milter %s",
		     get_version());
	}
	xvirushdr[sizeof(xvirushdr)-1] = '\0';

	descr.xxfi_flags |= SMFIF_ADDHDRS;

	if (strcasecmp(pt, "Add")) { /* Replace or Yes */
	    descr.xxfi_flags |= SMFIF_CHGHDRS;
	    addxvirus = 1;
	} else { /* Add */
	    addxvirus = 2;
	}
    }

    if(!(my_socket = optget(opts, "MilterSocket")->strarg)) {
	logg("!Please configure the MilterSocket directive\n");
	logg_close();
	optfree(opts);
	return 1;
    }

    if(smfi_setconn(my_socket) == MI_FAILURE) {
	logg("!smfi_setconn failed\n");
	logg_close();
	optfree(opts);
	return 1;
    }
    if(smfi_register(descr) == MI_FAILURE) {
	logg("!smfi_register failed\n");
	logg_close();
	optfree(opts);
	return 1;
    }
    opt = optget(opts, "FixStaleSocket");
    umsk = umask(0777); /* socket is created with 000 to avoid races */
    if(smfi_opensocket(opt->enabled) == MI_FAILURE) {
	logg("!Failed to create socket %s\n", my_socket);
	logg_close();
	optfree(opts);
	return 1;
    }
    umask(umsk); /* restore umask */
    if(strncmp(my_socket, "inet:", 5) && strncmp(my_socket, "inet6:", 6)) {
	/* set group ownership and perms on the local socket */
	char *sock_name = my_socket;
	mode_t sock_mode;
	if(!strncmp(my_socket, "unix:", 5))
	    sock_name += 5;
	if(!strncmp(my_socket, "local:", 6))
	    sock_name += 6;
	if(*my_socket == ':')
	    sock_name ++;

	if(optget(opts, "MilterSocketGroup")->enabled) {
	    char *gname = optget(opts, "MilterSocketGroup")->strarg, *end;
	    gid_t sock_gid = strtol(gname, &end, 10);
	    if(*end) {
		struct group *pgrp = getgrnam(gname);
		if(!pgrp) {
		    logg("!Unknown group %s\n", gname);
		    logg_close();
		    optfree(opts);
		    return 1;
		}
		sock_gid = pgrp->gr_gid;
	    }
	    if(chown(sock_name, -1, sock_gid)) {
		logg("!Failed to change socket ownership to group %s\n", gname);
		logg_close();
		optfree(opts);
		return 1;
	    }
	}

	if ((opt = optget(opts, "User"))->enabled) {
	    struct passwd *user;
	    if ((user = getpwnam(opt->strarg)) == NULL) {
		logg("ERROR: Can't get information about user %s.\n",
			opt->strarg);
		logg_close();
		optfree(opts);
		return 1;
	    }

	    if(chown(sock_name, user->pw_uid, -1)) {
		logg("!Failed to change socket ownership to user %s\n", user->pw_name);
		optfree(opts);
		logg_close();
		return 1;
	    }
	}

	if(optget(opts, "MilterSocketMode")->enabled) {
	    char *end;
	    sock_mode = strtol(optget(opts, "MilterSocketMode")->strarg, &end, 8);
	    if(*end) {
		logg("!Invalid MilterSocketMode %s\n", optget(opts, "MilterSocketMode")->strarg);
		logg_close();
		optfree(opts);
		return 1;
	    }
	} else
	    sock_mode = 0777 & ~umsk;

	if(chmod(sock_name, sock_mode & 0666)) {
	    logg("!Cannot set milter socket permission to %s\n", optget(opts, "MilterSocketMode")->strarg);
	    logg_close();
	    optfree(opts);
	    return 1;
	}
    }

    if(geteuid() == 0 && (opt = optget(opts, "User"))->enabled) {
        struct passwd *user = NULL;
	if((user = getpwnam(opt->strarg)) == NULL) {
	    fprintf(stderr, "ERROR: Can't get information about user %s.\n", opt->strarg);
	    optfree(opts);
	    return 1;
	}

	if(optget(opts, "AllowSupplementaryGroups")->enabled) {
#ifdef HAVE_INITGROUPS
	    if(initgroups(opt->strarg, user->pw_gid)) {
		fprintf(stderr, "ERROR: initgroups() failed.\n");
		optfree(opts);
		return 1;
	    }
#else
	    mprintf("!AllowSupplementaryGroups: initgroups() is not available, please disable AllowSupplementaryGroups\n");
	    optfree(opts);
	    return 1;
#endif
	} else {
#ifdef HAVE_SETGROUPS
	    if(setgroups(1, &user->pw_gid)) {
		fprintf(stderr, "ERROR: setgroups() failed.\n");
		optfree(opts);
		return 1;
	    }
#endif
	}

	if(setgid(user->pw_gid)) {
	    fprintf(stderr, "ERROR: setgid(%d) failed.\n", (int) user->pw_gid);
	    optfree(opts);
	    return 1;
	}

	if(setuid(user->pw_uid)) {
	    fprintf(stderr, "ERROR: setuid(%d) failed.\n", (int) user->pw_uid);
	    optfree(opts);
	    return 1;
	}
    }

    logg_lock = !optget(opts, "LogFileUnlock")->enabled;
    logg_time = optget(opts, "LogTime")->enabled;
    logg_size = optget(opts, "LogFileMaxSize")->numarg;
    logg_verbose = mprintf_verbose = optget(opts, "LogVerbose")->enabled;
    if (logg_size)
        logg_rotate = optget(opts, "LogRotate")->enabled;

    if((opt = optget(opts, "LogFile"))->enabled) {
	logg_file = opt->strarg;
	if(!cli_is_abspath(logg_file)) {
	    fprintf(stderr, "ERROR: LogFile requires full path.\n");
	    logg_close();
	    optfree(opts);
	    return 1;
	}
    } else
	logg_file = NULL;

#if defined(USE_SYSLOG) && !defined(C_AIX)
    if(optget(opts, "LogSyslog")->enabled) {
	int fac;

	opt = optget(opts, "LogFacility");
	if((fac = logg_facility(opt->strarg)) == -1) {
	    logg("!LogFacility: %s: No such facility.\n", opt->strarg);
	    logg_close();
	    optfree(opts);
	    return 1;
	}

	openlog("clamav-milter", LOG_PID, fac);
	logg_syslog = 1;
    }
#endif

    time(&currtime);
    if(logg("#+++ Started at %s", ctime(&currtime))) {
	fprintf(stderr, "ERROR: Can't initialize the internal logger\n");
	logg_close();
	optfree(opts);
	return 1;
    }
    if((opt = optget(opts, "TemporaryDirectory"))->enabled)
	tempdir = opt->strarg;

    if(localnets_init(opts) || init_actions(opts)) {
	logg_close();
	optfree(opts);
	return 1;
    }

    if((opt = optget(opts, "Whitelist"))->enabled && whitelist_init(opt->strarg)) {
	localnets_free();
	logg_close();
	optfree(opts);
	return 1;
    }

    if((opt = optget(opts, "SkipAuthenticated"))->enabled && smtpauth_init(opt->strarg)) {
	localnets_free();
	whitelist_free();
	logg_close();
	optfree(opts);
	return 1;
    }

    multircpt = optget(opts, "SupportMultipleRecipients")->enabled;
    
    if(!optget(opts, "Foreground")->enabled) {
	if(daemonize() == -1) {
	    logg("!daemonize() failed\n");
	    localnets_free();
	    whitelist_free();
	    cpool_free();
	    logg_close();
	    optfree(opts);
	    return 1;
	}
	if(chdir("/") == -1)
	    logg("^Can't change current working directory to root\n");
    }

    maxfilesize = optget(opts, "MaxFileSize")->numarg;
    if(!maxfilesize) {
	logg("^Invalid MaxFileSize, using default (%d)\n", CLI_DEFAULT_MAXFILESIZE);
	maxfilesize = CLI_DEFAULT_MAXFILESIZE;
    }
    readtimeout = optget(opts, "ReadTimeout")->numarg;

    cpool_init(opts);
    if (!cp) {
	logg("!Failed to init the socket pool\n");
	localnets_free();
	whitelist_free();
	logg_close();
	optfree(opts);
	return 1;
    }	

    if((opt = optget(opts, "PidFile"))->enabled) {
	FILE *fd;
	mode_t old_umask = umask(0002);

	if((fd = fopen(opt->strarg, "w")) == NULL) {
	    logg("!Can't save PID in file %s\n", opt->strarg);
	} else {
	    if (fprintf(fd, "%u\n", (unsigned int)getpid())<0) {
	    	logg("!Can't save PID in file %s\n", opt->strarg);
	    }
	    fclose(fd);
	}
	umask(old_umask);
    }

    ret = smfi_main();

    optfree(opts);

    logg_close();
    cpool_free();
    localnets_free();
    whitelist_free();

    return ret;
}
コード例 #13
0
ファイル: converterpage.cpp プロジェクト: realbardia/silicon
ConverterPage::ConverterPage( SApplication *parent , SConverter *converter ) :
    SPage( tr("Converter") , parent , SPage::WindowedPage )
{
    p = new ConverterPagePrivate;
    p->converter = converter;

    p->spacer_widget = new QWidget();
        p->spacer_widget->setSizePolicy( QSizePolicy::MinimumExpanding , QSizePolicy::MinimumExpanding );

    p->src_line = new QLineEdit();
        p->src_line->setReadOnly( true );
        p->src_line->setFocusPolicy( Qt::NoFocus );

    p->src_button = new QToolButton();
        p->src_button->setAutoRaise( true );
        p->src_button->setFixedSize( 26 , 26 );
        p->src_button->setIcon( SMasterIcons::icon( ICON_SIZE , "document-open.png" ) );
        p->src_button->setToolButtonStyle( Qt::ToolButtonTextBesideIcon );

    p->src_label = new QLabel( tr("Source:") );
    p->src_layout = new QHBoxLayout();
        p->src_layout->addWidget( p->src_line );
        p->src_layout->addWidget( p->src_button );


    p->dst_line = new QLineEdit();
        p->dst_line->setReadOnly( true );
        p->dst_line->setFocusPolicy( Qt::NoFocus );

    p->dst_button = new QToolButton();
        p->dst_button->setAutoRaise( true );
        p->dst_button->setFixedSize( 26 , 26 );
        p->dst_button->setIcon( SMasterIcons::icon( ICON_SIZE , "document-open.png" ) );
        p->dst_button->setToolButtonStyle( Qt::ToolButtonTextBesideIcon );

    p->dst_label = new QLabel( tr("Destination:") );
    p->dst_layout = new QHBoxLayout();
        p->dst_layout->addWidget( p->dst_line );
        p->dst_layout->addWidget( p->dst_button );


    p->toolbar = new QToolBar();
        p->toolbar->setToolButtonStyle( Qt::ToolButtonTextBesideIcon );
        p->toolbar->setIconSize( QSize(22,22) );

    p->cline = new ConverterLine( p->converter );

    p->options_widget = new QWidget();
    p->options_ui = new Ui::OptionsUi;
        p->options_ui->setupUi( p->options_widget );
        p->options_widget->hide();

    p->layout = new QVBoxLayout( this );
        p->layout->addWidget( p->src_label      );
        p->layout->addLayout( p->src_layout     );
        p->layout->addWidget( p->dst_label      );
        p->layout->addLayout( p->dst_layout     );
        p->layout->addWidget( p->cline          );
        p->layout->addWidget( p->options_widget );
        p->layout->addWidget( p->toolbar        );
        p->layout->setSpacing( 1 );

    init_actions();
    setFixedSize( 373,UNEXPANDED_HEIGHT );

    connect( p->src_button , SIGNAL(clicked()) , SLOT(setSource())      );
    connect( p->dst_button , SIGNAL(clicked()) , SLOT(setDestination()) );
    connect( p->cline      , SIGNAL(updated()) , SLOT(updated())        );

}
コード例 #14
0
ファイル: clamav-milter.c プロジェクト: OPSF/uClinux
int main(int argc, char **argv) {
    char *my_socket, *pt;
    const struct optstruct *opt;
    struct optstruct *opts;
    time_t currtime;
    int ret;

    memset(&descr, 0, sizeof(struct smfiDesc));
    descr.xxfi_name = "ClamAV";			/* filter name */
    descr.xxfi_version = SMFI_VERSION;		/* milter version */
    descr.xxfi_flags = SMFIF_QUARANTINE;	/* flags */
    descr.xxfi_connect = clamfi_connect;	/* connection info filter */
    descr.xxfi_envfrom = clamfi_envfrom;	/* envelope sender filter */
    descr.xxfi_envrcpt = clamfi_envrcpt;	/* envelope recipient filter */
    descr.xxfi_header = clamfi_header;		/* header filter */
    descr.xxfi_body = clamfi_body;		/* body block */
    descr.xxfi_eom = clamfi_eom;		/* end of message */
    descr.xxfi_abort = clamfi_abort;		/* message aborted */

    opts = optparse(NULL, argc, argv, 1, OPT_MILTER, 0, NULL);
    if (!opts) {
	mprintf("!Can't parse command line options\n");
	return 1;
    }

    if(optget(opts, "help")->enabled) {
	printf("Usage: %s [-c <config-file>]\n\n", argv[0]);
	printf("    --help                   -h       Show this help\n");
	printf("    --version                -V       Show version and exit\n");
	printf("    --config-file <file>     -c       Read configuration from file\n\n");
	optfree(opts);
	return 0;
    }

    if(opts->filename) {
	int x;
	for(x = 0; opts->filename[x]; x++)
	    mprintf("^Ignoring option %s\n", opts->filename[x]);
    }

    if(optget(opts, "version")->enabled) {
	printf("clamav-milter %s\n", get_version());
	optfree(opts);
	return 0;
    }

    pt = strdup(optget(opts, "config-file")->strarg);
    if((opts = optparse(pt, 0, NULL, 1, OPT_MILTER, 0, opts)) == NULL) {
	printf("%s: cannot parse config file %s\n", argv[0], pt);
	free(pt);
	return 1;
    }
    free(pt);

    if((opt = optget(opts, "Chroot"))->enabled) {
	if(chdir(opt->strarg) != 0) {
	    logg("!Cannot change directory to %s\n", opt->strarg);
	    return 1;
	}
	if(chroot(opt->strarg) != 0) {
	    logg("!chroot to %s failed. Are you root?\n", opt->strarg);
	    return 1;
	}
    }

    if(geteuid() == 0 && (opt = optget(opts, "User"))->enabled) {
        struct passwd *user = NULL;
	if((user = getpwnam(opt->strarg)) == NULL) {
	    fprintf(stderr, "ERROR: Can't get information about user %s.\n", opt->strarg);
	    optfree(opts);
	    return 1;
	}

	if(optget(opts, "AllowSupplementaryGroups")->enabled) {
#ifdef HAVE_INITGROUPS
	    if(initgroups(opt->strarg, user->pw_gid)) {
		fprintf(stderr, "ERROR: initgroups() failed.\n");
		optfree(opts);
		return 1;
	    }
#else
	    mprintf("!AllowSupplementaryGroups: initgroups() is not available, please disable AllowSupplementaryGroups\n");
	    optfree(opts);
	    return 1;
#endif
	} else {
#ifdef HAVE_SETGROUPS
	    if(setgroups(1, &user->pw_gid)) {
		fprintf(stderr, "ERROR: setgroups() failed.\n");
		optfree(opts);
		return 1;
	    }
#endif
	}

	if(setgid(user->pw_gid)) {
	    fprintf(stderr, "ERROR: setgid(%d) failed.\n", (int) user->pw_gid);
	    optfree(opts);
	    return 1;
	}

	if(setuid(user->pw_uid)) {
	    fprintf(stderr, "ERROR: setuid(%d) failed.\n", (int) user->pw_uid);
	    optfree(opts);
	    return 1;
	}
    }

    logg_lock = !optget(opts, "LogFileUnlock")->enabled;
    logg_time = optget(opts, "LogTime")->enabled;
    logg_size = optget(opts, "LogFileMaxSize")->numarg;
    logg_verbose = mprintf_verbose = optget(opts, "LogVerbose")->enabled;

    if((opt = optget(opts, "LogFile"))->enabled) {
	logg_file = opt->strarg;
	if(strlen(logg_file) < 2 || logg_file[0] != '/') {
	    fprintf(stderr, "ERROR: LogFile requires full path.\n");
	    logg_close();
	    optfree(opts);
	    return 1;
	}
    } else
	logg_file = NULL;

#if defined(USE_SYSLOG) && !defined(C_AIX)
    if(optget(opts, "LogSyslog")->enabled) {
	int fac;

	opt = optget(opts, "LogFacility");
	if((fac = logg_facility(opt->strarg)) == -1) {
	    logg("!LogFacility: %s: No such facility.\n", opt->strarg);
	    logg_close();
	    optfree(opts);
	    return 1;
	}

	openlog("clamav-milter", LOG_PID, fac);
	logg_syslog = 1;
    }
#endif

    time(&currtime);
    if(logg("#+++ Started at %s", ctime(&currtime))) {
	fprintf(stderr, "ERROR: Can't initialize the internal logger\n");
	logg_close();
	optfree(opts);
	return 1;
    }
    if((opt = optget(opts, "TemporaryDirectory"))->enabled)
	tempdir = opt->strarg;

    if(localnets_init(opts) || init_actions(opts)) {
	logg_close();
	optfree(opts);
	return 1;
    }

    if((opt = optget(opts, "Whitelist"))->enabled && whitelist_init(opt->strarg)) {
	localnets_free();
	logg_close();
	optfree(opts);
	return 1;
    }

    if((opt = optget(opts, "SkipAuthenticated"))->enabled && smtpauth_init(opt->strarg)) {
	localnets_free();
	whitelist_free();
	logg_close();
	optfree(opts);
	return 1;
    }

    pt = optget(opts, "AddHeader")->strarg;
    if(strcasecmp(pt, "No")) {
	char myname[255];

	if(!gethostname(myname, sizeof(myname))) {
	    myname[sizeof(myname)-1] = '\0';
	    snprintf(xvirushdr, sizeof(xvirushdr), "clamav-milter %s at %s", get_version(), myname);
	    xvirushdr[sizeof(xvirushdr)-1] = '\0';
	} else {
	    snprintf(xvirushdr, sizeof(xvirushdr), "clamav-milter %s", get_version());
	    xvirushdr[sizeof(xvirushdr)-1] = '\0';
	}

	descr.xxfi_flags |= SMFIF_ADDHDRS;

	if(strcasecmp(pt, "Add")) { /* Replace or Yes */
	    descr.xxfi_flags |= SMFIF_CHGHDRS;
	    addxvirus = 1;
	} else { /* Add */
	    addxvirus = 2;
	}
    }
    
    if(!(my_socket = optget(opts, "MilterSocket")->strarg)) {
	logg("!Please configure the MilterSocket directive\n");
	localnets_free();
	whitelist_free();
	logg_close();
	optfree(opts);
	return 1;
    }

    if(!optget(opts, "Foreground")->enabled) {
	if(daemonize() == -1) {
	    logg("!daemonize() failed\n");
	    localnets_free();
	    whitelist_free();
	    cpool_free();
	    logg_close();
	    optfree(opts);
	    return 1;
	}
	if(chdir("/") == -1)
	    logg("^Can't change current working directory to root\n");
    }

    if(smfi_setconn(my_socket) == MI_FAILURE) {
	logg("!smfi_setconn failed\n");
	localnets_free();
	whitelist_free();
	logg_close();
	optfree(opts);
	return 1;
    }
    if(smfi_register(descr) == MI_FAILURE) {
	logg("!smfi_register failed\n");
	localnets_free();
	whitelist_free();
	logg_close();
	optfree(opts);
	return 1;
    }
    opt = optget(opts, "FixStaleSocket");
    if(smfi_opensocket(opt->enabled) == MI_FAILURE) {
	logg("!Failed to create socket %s\n", my_socket);
	localnets_free();
	whitelist_free();
	logg_close();
	optfree(opts);
	return 1;
    }

    maxfilesize = optget(opts, "MaxFileSize")->numarg;
    readtimeout = optget(opts, "ReadTimeout")->numarg;

    cpool_init(opts);
    if (!cp) {
	logg("!Failed to init the socket pool\n");
	localnets_free();
	whitelist_free();
	logg_close();
	optfree(opts);
	return 1;
    }	

    if((opt = optget(opts, "PidFile"))->enabled) {
	FILE *fd;
	mode_t old_umask = umask(0006);

	if((fd = fopen(opt->strarg, "w")) == NULL) {
	    logg("!Can't save PID in file %s\n", opt->strarg);
	} else {
	    if (fprintf(fd, "%u", (unsigned int)getpid())<0) {
	    	logg("!Can't save PID in file %s\n", opt->strarg);
	    }
	    fclose(fd);
	}
	umask(old_umask);
    }

    ret = smfi_main();

    optfree(opts);

    logg_close();
    cpool_free();
    localnets_free();
    whitelist_free();

    return ret;
}
コード例 #15
0
ファイル: lr_parser.cpp プロジェクト: sten1ee/cpp
lr_symbol* lr_parser::parse()
{
  /* set up direct reference to tables to drive the parser */
  production_tab = production_table();
  action_tab     = action_table();
  reduce_tab     = reduce_table();

  /* initialize the action encapsulation object */
  init_actions();

  /* do user initialization */
  user_init();

  /* get the first token */
  cur_token = scan();

  /* push dummy symbol with start state to get us underway */
  stack.remove_all_elements();
  lr_symbol dummy_sym(0, start_state());
  stack.push(&dummy_sym);

  /* continue until accept or fatal error */
  while (true)
    {
      /* Check current token for freshness. */
      assert(-1 == cur_token->parse_state);

      /* current state is always on the top of the stack */

      /* look up action out of the current state with the current input */
      int act = get_action(stack.peek()->parse_state, cur_token->sym);

      /* decode the action -- > 0 encodes shift */
      if (act > 0)
        {
          act = act - 1;

          DEBUG_LOG("Shift and goto " << act);

          /* shift to the encoded state by pushing it on the stack */
          cur_token->parse_state = act;
          stack.push(cur_token);

          /* advance to the next Symbol */
          cur_token = scan();
        }
      /* if its less than zero, then it encodes a reduce action */
      else if (act < 0)
        {
          act = (-act) - 1;

          DEBUG_LOG("Reduce by rule " << act);

          /* perform the action for the reduce */
          lr_symbol* lhs_sym = do_action(act);

          /* check for accept indication */
          if (lhs_sym == 0)
            {
              return stack.peek();
            }

          /* look up information about the production */

          lhs_sym->sym      = production_tab[act].lhs_sym;
          short handle_size = production_tab[act].rhs_size;

          /* pop the handle off the stack */
          stack.npop(handle_size);

          /* look up the state to go to from the one popped back to */
          act = get_reduce(stack.peek()->parse_state, lhs_sym->sym);

          /* shift to that state */
          lhs_sym->parse_state = act;
          stack.push(lhs_sym);

          DEBUG_LOG("      and goto " << act);
        }
      /* finally if the entry is zero, we have an error */
      else if (act == 0)
        {
          DEBUG_LOG("Error");

          /* call user syntax error reporting routine */
          syntax_error(cur_token);

          /* try to error recover */
          switch (error_recovery())
            {
            case ERS_FAIL:
              /* if that fails give up with a fatal syntax error */
              unrecovered_syntax_error(cur_token);
              return 0;
            case ERS_SUCCESS:
              break;
            case ERS_ACCEPT:
              return stack.peek();
            default:
              assert(0);
            }
        }
    }

}
コード例 #16
0
ファイル: main-window.c プロジェクト: trhura/rookie
void create_main_window ()
{
	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

	GtkUIManager		*ui_manager		= gtk_ui_manager_new ();
	GtkActionGroup		*action_group	= create_action_group ();

	GError	 *error	= NULL;
	gchar	 *ui_path = rookie_misc_get_ui_path ("AppUI.ui");

	gtk_ui_manager_insert_action_group (ui_manager, action_group, 0);
	gtk_ui_manager_add_ui_from_file (ui_manager, ui_path, &error);
	handle_critical_error (error);
	g_free (ui_path);

	eggicon = gtk_status_icon_new_from_icon_name ("rookie");
	init_actions (action_group);

	menubar = gtk_ui_manager_get_widget (ui_manager, "/menubar");
	toolbar = gtk_ui_manager_get_widget (ui_manager, "/toolbar");
	statbar = create_statusbar ();
	mainbox = gtk_vbox_new (FALSE, 0);

	mainpopup = gtk_ui_manager_get_widget (ui_manager, "/m_popup");
	viewpopup = gtk_ui_manager_get_widget (ui_manager, "/v_popup");
	statpopup = gtk_ui_manager_get_widget (ui_manager, "/s_popup");

	gtk_toolbar_set_icon_size (GTK_TOOLBAR(toolbar),
							   GTK_ICON_SIZE_LARGE_TOOLBAR);
	gtk_toolbar_set_style (GTK_TOOLBAR(toolbar), GTK_TOOLBAR_BOTH);

	sw1	= gtk_scrolled_window_new (NULL, NULL);
	sw2 = gtk_scrolled_window_new (NULL, NULL);

	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(sw1), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(sw2), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);

	sidepane = create_sidepane ();
	gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(sw1), sidepane);

	view	= g_download_list_controller_get_view ();
	gtk_container_add (GTK_CONTAINER (sw2), view);

	bottompane = create_bottom_pane ();

	vpaned = gtk_vpaned_new ();
	gtk_paned_add1 (GTK_PANED(vpaned), sw2);
	gtk_paned_add2 (GTK_PANED(vpaned), bottompane);

	hpaned = gtk_hpaned_new ();
	gtk_paned_add1 (GTK_PANED(hpaned), sw1);
	gtk_paned_add2 (GTK_PANED(hpaned), vpaned);

	gtk_paned_set_position (GTK_PANED(hpaned), rookie_settings_get_sidepane_width ());
	gtk_paned_set_position (GTK_PANED(vpaned), rookie_settings_get_bottompane_width ());

	gtk_window_add_accel_group (GTK_WINDOW(window), gtk_ui_manager_get_accel_group(ui_manager));
	gtk_window_set_title (GTK_WINDOW(window), _("Rookie Download Manager"));
	gtk_window_set_icon_name (GTK_WINDOW(window), "rookie");

	gtk_box_pack_start (GTK_BOX(mainbox), menubar, FALSE, FALSE, 0);
	gtk_box_pack_start (GTK_BOX(mainbox), toolbar, FALSE, FALSE, 0);
	gtk_box_pack_start (GTK_BOX(mainbox), hpaned, TRUE, TRUE, 0);
	gtk_box_pack_end (GTK_BOX(mainbox), statbar, FALSE, FALSE, 0);

	relayout_mainbox ();
	gtk_container_add (GTK_CONTAINER(window), mainbox);
	gtk_window_set_geometry_hints (GTK_WINDOW (window), window, NULL,
								   GDK_HINT_USER_SIZE | GDK_HINT_USER_POS | GDK_HINT_POS);

	gtk_window_resize (GTK_WINDOW(window),
					   rookie_settings_get_window_width (),
					   rookie_settings_get_window_height());

	rookie_settings_bind (ROOKIE_TOOLBAR_VISIBLE, toolbar, "visible");
	rookie_settings_bind (ROOKIE_STATUSBAR_VISIBLE, statbar, "visible");

	/* Signals */
	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(view));

	g_download_list_foreach ((GFunc)g_downloadable_connect_signals, NULL);

	g_signal_connect (eggicon, "activate",
					  G_CALLBACK(on_egg_icon_activate), NULL);
	g_signal_connect (eggicon, "popup-menu",
					  G_CALLBACK(on_egg_icon_popup_menu), NULL);
	g_signal_connect (window, "delete-event",
					  G_CALLBACK(on_window_delete), NULL);

	g_signal_connect (g_download_list_get (), "download-added",
					  G_CALLBACK (on_download_added), NULL);
	g_signal_connect (g_download_list_get (), "download-removed",
					  G_CALLBACK (on_download_removed), NULL);
	g_signal_connect (view, "button-press-event",
					  G_CALLBACK(on_view_button_press), selection);

	g_signal_connect (selection, "changed",
					  G_CALLBACK(on_selection_change), NULL);
}
コード例 #17
0
MainWindow2::MainWindow2( QWidget *owner ):QMainWindow(owner)
{
	statusBar();
	init_actions();
	init_gui();
}
コード例 #18
0
ファイル: mainpage.cpp プロジェクト: realbardia/silicon
MainPage::MainPage( SApplication *parent )
    : SPage( tr("Disc Imaging") , parent , SPage::WindowedPage )
{
    p = new MainPagePrivate;

    p->device_list = new SDeviceList( this );

    p->dst_line = new QLineEdit();
        p->dst_line->setReadOnly( true );
        p->dst_line->setFixedHeight( 28 );
        p->dst_line->setPlaceholderText( tr("Please select a Disc Image") );
        p->dst_line->setFocusPolicy( Qt::NoFocus );

    p->open_btn = new QToolButton();
        p->open_btn->setIcon( SMasterIcons::icon( ICON_SIZE , "document-open.png" ) );
        p->open_btn->setFixedSize( 28 , 28 );

    p->image_layout = new QHBoxLayout();
        p->image_layout->addWidget( p->dst_line );
        p->image_layout->addWidget( p->open_btn );

    p->src_combo = new SComboBox();
        p->src_combo->setIconSize( QSize(22,22) );

    p->label = new QLabel();
        p->label->setText( tr("To") );

    p->toolbar = new QToolBar();
        p->toolbar->setToolButtonStyle( Qt::ToolButtonTextBesideIcon );
        p->toolbar->setStyleSheet( "QToolBar{ border-style:solid ; margin:0px }" );

    p->options_widget = new QWidget();
    p->options_ui = new Ui::OptionsUi;
        p->options_ui->setupUi( p->options_widget );

    p->layout = new QVBoxLayout( this );
        p->layout->addWidget( p->src_combo      );
        p->layout->addWidget( p->label          );
        p->layout->addLayout( p->image_layout   );
        p->layout->addWidget( p->options_widget );
        p->layout->addWidget( p->toolbar        );
        p->layout->setContentsMargins( 10 , 10 , 10 , 10 );

    setFixedWidth( 413 );
    setFixedHeight( EXPANDED_HEIGHT );

    p->src_combo->setCurrentIndex( 0 );

    connect( p->device_list , SIGNAL(deviceDetected(SDeviceItem)) , SLOT(deviceDetected(SDeviceItem)) );
    connect( p->open_btn    , SIGNAL(clicked())                   , SLOT(select_dst_image())          );


    connect( p->options_ui->library_check  , SIGNAL(toggled(bool))     , p->options_ui->library_widget , SLOT(setVisible(bool))       );
    connect( p->options_ui->scan_check     , SIGNAL(toggled(bool))     , p->options_ui->scan_widget    , SLOT(setVisible(bool))       );
    connect( p->options_ui->custom_check   , SIGNAL(toggled(bool))     , p->options_ui->custom_widget  , SLOT(setVisible(bool))       );
    connect( p->options_ui->custom_check   , SIGNAL(toggled(bool))     , this                          , SLOT(setDefaultOptions())  );
    connect( p->options_ui->custom_to_spin , SIGNAL(valueChanged(int)) , this                          , SLOT(to_spin_changed(int)) );

    p->options_ui->library_check->setChecked( false );
    p->options_ui->scan_check->setChecked( false );
    p->options_ui->custom_check->setChecked( false );

    init_actions();
    more_prev();

    p->device_list->refresh();
    setAcceptDrops( true );
}
コード例 #19
0
ファイル: topwindow.c プロジェクト: laubstein/pw3270
 int CreateTopWindow(void)
 {
#ifdef MOUSE_POINTER_CHANGE

	#ifdef WIN32

		static const gchar *cr[CURSOR_MODE_3270] = {	"arrow",
														"wait",
														"arrow",

														"sizenwse",	// Top-left
														"sizenesw",	// Top-right
														"sizens",	// Top
														"sizenesw",	// Bottom-left
														"sizenwse",	// Bottom-right
														"sizens",	// Bottom
														"sizewe",	// Left
														"sizewe",	// Right
														"sizeall"	// Inside

													};

	#else

		static int 		cr[CURSOR_MODE_3270] = { 	GDK_XTERM,
														GDK_WATCH,
														GDK_X_CURSOR,

														GDK_TOP_LEFT_CORNER, 		// Top-left
														GDK_TOP_RIGHT_CORNER,		// Top-right
														GDK_TOP_SIDE,				// Top
														GDK_BOTTOM_LEFT_CORNER,		// Bottom-left
														GDK_BOTTOM_RIGHT_CORNER,	// Bottom-right
														GDK_BOTTOM_SIDE,			// Bottom
														GDK_LEFT_SIDE,				// Left
														GDK_RIGHT_SIDE,				// Right
														GDK_FLEUR					// Inside

													};

	#endif // WIN32

	int f;

#endif // MOUSE_POINTER_CHANGE

	 static const struct ui_menu_setup_table widget_setup[] =
	 {
		{ "fontselect",		setup_font_select_menu		},
		{ "inputmethod",	setup_input_methods_menu	},
		{ "screensizes",	setup_screen_size_menu		},
	 	{ NULL,				NULL						}
	 };

	gchar		*ptr;

	init_actions();

#ifdef MOUSE_POINTER_CHANGE

	// Load mouse pointers
	#ifdef WIN32
		for(f=0;f<CURSOR_MODE_3270;f++)
			wCursor[f] = gdk_cursor_new_from_name(gdk_display_get_default(), cr[f]);
	#else
		for(f=0;f<CURSOR_MODE_3270;f++)
			wCursor[f] = gdk_cursor_new(cr[f]);
	#endif

#endif // MOUSE_POINTER_CHANGE

	if(!CreateTerminalWindow())
		return -1;

	// Load UI - Create toplevel window
	ptr = g_build_filename(program_data,"ui",NULL);
	topwindow = create_window_from_ui_files(ptr,terminal,widget_setup);
	g_free(ptr);

	// Load program logo
	load_icon();

/*
	if(program_logo && g_file_test(program_logo,G_FILE_TEST_IS_REGULAR))
	{
		pix = gdk_pixbuf_new_from_file(program_logo,NULL);
	}
	else
	{
		gchar *filename = g_build_filename(program_data,PROGRAM_LOGO,NULL);

		if(g_file_test(filename,G_FILE_TEST_IS_REGULAR))
			pix = gdk_pixbuf_new_from_file(filename, NULL);

		Trace("pixbuf(%s): %p",filename,pix);
		g_free(filename);
	}

	if(pix)
	{
		gtk_window_set_icon(GTK_WINDOW(topwindow),pix);
		g_object_set_data_full(G_OBJECT(topwindow),"logo",pix,g_object_unref);

#if defined( HAVE_IGEMAC )
		gtk_osxapplication_set_dock_icon_pixbuf(osxapp,pix);
#endif

	}
*/

	gtk_action_set_sensitive(action_by_id[ACTION_RESELECT],FALSE);

	g_signal_connect(G_OBJECT(topwindow),"destroy",G_CALLBACK(action_quit),0);

//	gtk_window_set_icon_list(GTK_WINDOW(topwindow),main_icon);

	gtk_window_set_default_size(GTK_WINDOW(topwindow),590,430);
	ptr = GetString("TopWindow","Title","");
	settitle(ptr);
	g_free(ptr);

	action_restore(0);

	gtk_window_set_position(GTK_WINDOW(topwindow),GTK_WIN_POS_CENTER);

	return 0;
 }