LINUX.ORG.RU

Сообщения Puzan

 

Отступы для комментариев перед case

Здравствуйте!

Скажите, можно ли исправить отступ для комментариев перед case?

Вот так это выглядит сейчас:

void func(n) {
    /* Comment for switch */
    switch(n) {
        /* Comment 0 */
    case 0: break;
        /* Comment 1 */
    case 1: break;
        /* Comment 2 */
    case 2: break;
        /* Comment X */
    defult: break;
    }
}

А нужно так:

void func(n) {
    /* Comment for switch */
    switch(n) {
    /* Comment 0 */
    case 0: break;
    /* Comment 1 */
    case 1: break;
    /* Comment 2 */
    case 2: break;
    /* Comment X */
    defult: break;
    }
}

 

Puzan
()

Как называется игра?

Помню, на досе играл: http://www.dosbox.com/screenshots/big/18.png

 

Puzan
()

Загадка черно-синего платья

Фак мой мозг! Я только что чуть не поругался с женой из-за спора о цвете платья вот отсюда: http://www.gazeta.ru/science/news/2015/02/27/n_6964937.shtml

Для Ъ: по ссылке фотка платья с пересвеченным фоном и опрос: Какого цвета платье? Черно-синего или Бело-золотого?

Я и дочь видим бело-золотое платье, жена и сын черно-синее.

В тексте ссылка на объяснение, но то-ли я тупой, то-ли автор, в общем я ничего не понял.

PS: может линуксячий пингвин тоже не бело-черно-золотисный?

 ,

Puzan
()

Всё-таки не тихоокеанская группировка спутников?

http://www.gazeta.ru/tech/news/2015/01/22/n_6847657.shtml

Федеральное агентство по связи США (FCC) рассматривает возможность использования российской спутниковой системы ГЛОНАСС для определения местонахождения звонящих в службу спасения 911 с мобильных телефонов.

...

Авторы инициативы надеются, что российская спутниковая система позволит американским полицейским, пожарным и врачам точнее определять местонахождение людей, позвонивших в службу спасения с мобильных телефонов.

Как объяснил Трэй Фогерти из NENA, соответствующие американские системы не покрывают достаточно территории.

Так что, работает таки ГЛОНАСС?

Что характерно, власти США обеспокоены.

 , ,

Puzan
()

Необязательные параметры функции в Scheme

Есть ли общепринятые метода работы с необязательными параметрами в Scheme? Вот, для ясности, пример функции:

;; string-prefix? s1 s2 [start1 [end1 [start2 [end2]]]] -> boolean
(define (string-prefix? s1 s2 . optional) ...)

Можно для каждой функции делать уникальный разбор списка optional, но это не кошерно. Наверняка есть какой-то общепринятый макрос, который все используют?

Я вот попытался написать:

(define-syntax optional-args
  (syntax-rules ()
    ((_ (args (var0 default0) ...) body ...)
     (let-values (((var0 ...)
                   (if (> (length args) (length '(var0 ...)))
                       (syntax-error "too many args")
                       (apply values
                              (let loop ((a args) (d (list default0 ...)) (acc '()))
                                (if (null? d) (reverse acc)
                                    (if (null? a)
                                        (loop '() (cdr d) (cons (car d) acc))
                                        (loop (cdr a) (cdr d) (cons (car a) acc)))))))))
       body ...))))

Применяется так:

(define (string-prefix? prefix str . opt)
  ...
    (optional-args
     (opt (start1 0) (end1 prefix-length)
          (start2 0) (end2 str-length))
      ...)))

Но мне не нравится, что он очень медленно работает. Такой вариант значительно быстрее:

(define (string-prefix1? prefix str . opt)
  (let ((opt-length (length opt))
        ...)
    (let ((start1   (if (> opt-length 0) (nth opt 0) 0))
          (end1     (if (> opt-length 1) (nth opt 1) prefix-length))
          (start2   (if (> opt-length 2) (nth opt 2) 0))
          (end2     (if (> opt-length 3) (nth opt 3) str-length)))
      ...)))

Но я не смог написать макрос, который бы разворачивался в такую конструкцию. Вот заготовка:

(define-syntax optional
  (syntax-rules ()
    ((_ args ((var0 ...) (default0 ...)) body ...)
     '(let ((len (length args)))
        (let ((var0 default0) ...)
          body ...)))))

Должно быть по идее так:

        (let ((var0 (if (> (length args) X) (nth args X) default0)) ...)

где X - порядковый номер подстановки (arg0 ...), но я не нашел способа определить этот номер. Может быть кто-то подскажет? Или скажет, почему это не нужно?

Делается это всё для R7RS на chibi-scheme.

 ,

Puzan
()

Много ли здесь электронщиков?

Навеяно темой про диодный мост.

Много ли здесь инженеров-электронщиков, и какое ПО они используют в Linux?

Я вот, например, из специфичного софта использую (по порядку из меню) KiCad, Quartus, Freescale CodeWarrior, TI CCS, Icarus Verilog, GTKWave, NGSpice, QCAD.

В виртуалочке запускаю три программы - Solidworks, HyperLynx, Cadence Allegro Viewer.

А ты?

 ,

Puzan
()

Консольный тайм-трекер

Тут кто-то спрашивал простой таймер рабочего времени для консоли. Я тоже не нашел, и решил написать. На scheme.

Вот, может кому-то пригодится: https://github.com/punzik/worktimer

За одно и код поругайте.

 , ,

Puzan
()

Линеаризация истории

Здравствуйте!

Есть репозиторий git (кусок истории):

...
* 8
* 7 merge
|\  
| * 6
| * 5
| * 4
* | 3
|/  
* 2
* 1
...

Как слить это раздвоение в одну ветку, чтобы получилось так:

...
* 8
* 6
* 5
* 4
* 3
* 2
* 1
...

Пробовал всяко делать rebase, но ничего не вышло. Он или ругается, или предлагает сделать ручной мерж чего-то с чем-то. Почему он не может разобраться автоматически, ведь все промежуточные шаги ему известны?

В коммите 3 изменения очень незначительные, буквально пять строк изменено (всего в файле 800).

Тот-же вопрос и по mercurial.

 ,

Puzan
()

После русификации kde-3.4 вижу только папки в...

диалоге открытия файлов. Например, если я хочу открыть в конквероре локальный файл, жму "открыть страницу...", появляется диалог с папками и всеми делами, а файлов нету. Если удаляю share/locale/ru, то все нормально. Причем, если диалог вызывается из нерусифицированной программы, тоже проблем нет.

Puzan
()

Linux и Solaris

Возможно кто-то помежет.

Проблема такая: есть десктоп на Solaris и сервер на Linux, на линуксе пускаются X-программы, вывод которых идет на солярисовский X-сервер. Под солярисом настроено переключение раскладок через XIM. Как заставить линуксовые приложения тоже переключать раскладку через XIM?

Puzan
()

XORG и версия GLX

Кто нибудь может точно сказать, какая версия GLX в XORG?

Puzan
()

Права доступа к сетевому интерфейсу.

Вопрос такой: можно ли пользователям/группам запретить/разрешить доступ к сетевому интерфейсу (ethN)? Вообще интересует применительно к Solaris9/Sparc, но для линукса тоже интересно.

Puzan
()

ROX-Filer и не юникодная локаль. Патч

Здравствуйте. Вот помучившись с роксом (2.1.1) решил сам покапаться
в исходниках и поправить ситуацию. Вроде получилось (хотя местами
коряво, но я первый раз смотрел GTK-программу).
Вот патч:

diff -Nu src.old/display.c src/display.c
--- src.old/display.c	2003-08-02 17:01:07.000000000 +0400
+++ src/display.c	2004-02-26 15:27:34.811200504 +0300
@@ -741,20 +741,12 @@
 	}
 	else
 	{
-		PangoAttribute	*attr;
 		gchar *utf8;
 
 		utf8 = to_utf8(item->leafname);
 		view->layout = gtk_widget_create_pango_layout(
 				filer_window->window, utf8);
 		g_free(utf8);
-
-		attr = pango_attr_foreground_new(0xffff, 0, 0);
-		attr->start_index = 0;
-		attr->end_index = -1;
-		if (!list)
-			list = pango_attr_list_new();
-		pango_attr_list_insert(list, attr);
 	}
 
 	if (item->flags & ITEM_FLAG_RECENT)
diff -Nu src.old/filer.c src/filer.c
--- src.old/filer.c	2003-10-26 19:14:28.000000000 +0300
+++ src/filer.c	2004-02-26 15:27:46.764383344 +0300
@@ -2015,11 +2015,6 @@
 		if (info)
 			g_object_unref(info);
 	}
-
-	if (!g_utf8_validate(item->leafname, -1, NULL))
-		g_string_append(tip,
-			_("This filename is not valid UTF-8. "
-			  "You should rename it.\n"));
 }
 
 /* Return the selection as a text/uri-list.
diff -Nu src.old/infobox.c src/infobox.c
--- src.old/infobox.c	2004-01-24 22:00:22.000000000 +0300
+++ src/infobox.c	2004-02-26 15:21:18.581396128 +0300
@@ -122,21 +122,26 @@
 void infobox_new(const gchar *pathname)
 {
 	GtkWidget	*window, *details;
-	gchar		*path;
+	gchar		*path,*utf8_path;
 	GObject		*owindow;
 
 	g_return_if_fail(pathname != NULL);
 
+
 	path = g_strdup(pathname); /* Gets attached to window & freed later */
 
+    	utf8_path=g_strdup(pathname);
+	ensure_utf8(&utf8_path);
+
 	window = gtk_dialog_new_with_buttons(
-			g_utf8_validate(path, -1, NULL) ? path
-							: _("(bad utf-8)"),
+				utf8_path,
 				NULL, GTK_DIALOG_NO_SEPARATOR,
 				GTK_STOCK_CANCEL, GTK_RESPONSE_DELETE_EVENT,
 				GTK_STOCK_REFRESH, GTK_RESPONSE_APPLY,
 				NULL);
 
+	g_free(utf8_path);
+
 	gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE);
 
 	owindow = G_OBJECT(window);
@@ -443,27 +448,28 @@
 
 static gboolean read_du_output(GIOChannel *source, GIOCondition cond, DU *du)
 {
-	GString *line;
 	GIOStatus stat;
 	GError *err = NULL;
 
-	line = g_string_new("");
-	stat = g_io_channel_read_line_string(source, line, NULL, &err);
+	gsize size=250;
+	gchar *line=g_new(gchar,size+1);
+	
+	stat = g_io_channel_read_chars(source, line, size, &size, &err);
 	switch (stat)
 	{
 		case G_IO_STATUS_NORMAL:
-			insert_size(du, line->str);
+			insert_size(du, line);
 			break;
 		case G_IO_STATUS_EOF:
 			break;
 		case G_IO_STATUS_AGAIN:
-			g_string_free(line, TRUE);
+			g_free(line);
 			return TRUE;
 		case G_IO_STATUS_ERROR:
 			set_cell(du->store, du->path, err->message);
 			break;
 	}
-	g_string_free(line, TRUE);
+	g_free(line);
 	
 	return FALSE;
 }
@@ -544,11 +550,13 @@
 	g_object_set_data(G_OBJECT(store), "rox_window", window);
 
 	/* For a symlink to an error, don't show the error */
+/*
 	if (item->base_type == TYPE_ERROR && item->lstat_errno)
 	{
 		add_row(store, _("Error:"), g_strerror(item->lstat_errno));
 		return view;
 	}
+*/
 
 	tmp = g_path_get_dirname(path);
 	tmp2 = pathdup(tmp);
@@ -581,6 +589,7 @@
 		du->path = g_strdup(add_row(store, _("Size:"), _("Scanning")));
 
 		args[2] = (gchar *) path;
+		
 		if (g_spawn_async_with_pipes(NULL, args, NULL,
 					    G_SPAWN_SEARCH_PATH,
 					    NULL, NULL, &du->child,
diff -Nu src.old/menu.c src/menu.c
--- src.old/menu.c	2004-01-21 23:03:15.000000000 +0300
+++ src/menu.c	2004-02-26 15:18:23.410026224 +0300
@@ -744,12 +744,16 @@
 							item->leafname);
 				shade_file_menu_items(FALSE);
 				file_item = filer_selected_item(filer_window);
+				
+				gchar *file_item_leafname=g_strdup(file_item->leafname);
+				ensure_utf8(&file_item_leafname);
+				
 				g_string_printf(buffer, _("%s '%s'"),
 					basetype_name(file_item),
-					g_utf8_validate(file_item->leafname,
-							-1, NULL)
-						? file_item->leafname
-						: _("(bad utf-8)"));
+					file_item_leafname );
+					
+				g_free( file_item_leafname );
+					
 				if (!can_set_run_action(file_item))
 					menu_set_items_shaded(filer_file_menu,
 							TRUE, 9, 1);
@@ -1084,7 +1088,7 @@
 static gboolean copy_cb(GObject *savebox,
 			const gchar *current, const gchar *new)
 {
-	return action_with_leaf(action_copy, current, new);
+	return action_with_leaf(action_copy, current, g_locale_from_utf8(new, -1, NULL, NULL, NULL));
 }
 
 static gboolean action_with_leaf(ActionFn action,
@@ -1137,7 +1141,7 @@
 static gboolean rename_cb(GObject *savebox,
 			  const gchar *current, const gchar *new)
 {
-	return action_with_leaf(action_move, current, new);
+	return action_with_leaf(action_move, current, g_locale_from_utf8(new, -1, NULL, NULL, NULL));
 }
 
 static gboolean link_cb(GObject *savebox,
@@ -1155,7 +1159,7 @@
 	else
 		link_path = g_strdup(initial);
 
-	if (mc_lstat(path, &info) == 0 && S_ISLNK(info.st_mode))
+	if (mc_lstat(g_locale_from_utf8(path, -1, NULL, NULL, NULL), &info) == 0 && S_ISLNK(info.st_mode))
 	{
 		GtkWidget *box, *button;
 		gint ans;
@@ -1188,7 +1192,7 @@
 		unlink(path);
 	}
 
-	err = symlink(link_path, path);
+	err = symlink(link_path, g_locale_from_utf8(path, -1, NULL, NULL, NULL));
 	g_free(link_path);
 			
 	if (err)
@@ -1276,7 +1280,7 @@
 static gboolean new_directory_cb(GObject *savebox,
 				 const gchar *initial, const gchar *path)
 {
-	if (mkdir(path, S_IRWXU | S_IRWXG | S_IRWXO))
+	if (mkdir(g_locale_from_utf8(path, -1, NULL, NULL, NULL), S_IRWXU | S_IRWXG | S_IRWXO))
 	{
 		report_error("mkdir: %s", g_strerror(errno));
 		return FALSE;
@@ -1310,7 +1314,7 @@
 {
 	int fd;
 
-	fd = open(path, O_CREAT | O_EXCL, 0666);
+	fd = open(g_locale_from_utf8(path, -1, NULL, NULL, NULL), O_CREAT | O_EXCL, 0666);
 
 	if (fd == -1)
 	{
diff -Nu src.old/view_details.c src/view_details.c
--- src.old/view_details.c	2003-05-27 16:58:23.000000000 +0400
+++ src/view_details.c	2004-02-26 15:33:23.003267264 +0300
@@ -336,17 +336,8 @@
 			break;
 		case COL_COLOUR:
 			g_value_init(value, GDK_TYPE_COLOR);
-			if (view_item->utf8_name)
-			{
-				GdkColor red;
-				red.red = 0xffff;
-				red.green = 0;
-				red.blue = 0;
-				g_value_set_boxed(value, &red);
-			}
-			else
-				g_value_set_boxed(value,
-						  type_get_colour(item, NULL));
+			g_value_set_boxed(value,
+					  type_get_colour(item, NULL));
 			break;
 		case COL_OWNER:
 			g_value_init(value, G_TYPE_STRING);
Puzan
()

RSS подписка на новые темы