OberonCore
https://forum.oberoncore.ru/

DIA: BlackBox Component Builder 1.6 + GTK2
https://forum.oberoncore.ru/viewtopic.php?f=134&t=3535
Страница 5 из 6

Автор:  Иван Денисов [ Четверг, 20 Февраль, 2014 19:33 ]
Заголовок сообщения:  Re: DIA: BlackBox Component Builder 1.6rc6 + GTK2

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

Автор:  Евгений Темиргалеев [ Четверг, 20 Февраль, 2014 19:48 ]
Заголовок сообщения:  Re: DIA: BlackBox Component Builder 1.6rc6 + GTK2

Решения, используемые OberonCore документированы с момента появления (уже полтора года прошло). Разбираться там не в чем --- открыл дельту и прочитал.

Автор:  Иван Денисов [ Четверг, 20 Февраль, 2014 20:42 ]
Заголовок сообщения:  Re: DIA: BlackBox Component Builder 1.6rc6 + GTK2

Евгений Темиргалеев писал(а):
Решения, используемые OberonCore документированы с момента появления (уже полтора года прошло). Разбираться там не в чем --- открыл дельту и прочитал.
Евгений, вы имеете в виду дельту к консольной версии или что-то другое? Лады, тут пусть Александр разберется, поскольку скорее всего он чего-то из ваших решений использовал.

Автор:  Евгений Темиргалеев [ Пятница, 21 Февраль, 2014 09:05 ]
Заголовок сообщения:  Re: DIA: BlackBox Component Builder 1.6rc6 + GTK2

Да, речь о дельтах консольной версии.

Автор:  Alexander Shiryaev [ Пятница, 21 Февраль, 2014 23:34 ]
Заголовок сообщения:  Re: DIA: BlackBox Component Builder 1.6rc6 + GTK2

1) Спасибо, учту.

2) А что, должны быть? Какие именно? Ссылки можно поставить.

Автор:  Евгений Темиргалеев [ Суббота, 22 Февраль, 2014 19:44 ]
Заголовок сообщения:  Re: DIA: BlackBox Component Builder 1.6rc6 + GTK2

Alexander Shiryaev писал(а):
2) А что, должны быть? Какие именно? Ссылки можно поставить.
Александр, у Вас высшее образование и работаете Вы в научной сфере. Разве в научных работах не принято ставить как можно более точные ссылки на задействованные источники? А программирование --- "научная и практическая деятельность..." [ГОСТ 19781-90].

Карточка проекта существует (с 01.11.2012): http://oberoncore.ru/projects/bb16lin-console. Названия у дельт есть. Разве что ссылки на заметки непосредственно в карточку только вставил.

Что Вы конкретно использовали --- дельту с описанием решения, исходник, документацию, заметки --- откуда мне знать? Мне виден только факт использования. И я считаю, что в этом случае ссылку ставить нужно.
----

Подходы к работам, конечно, бывают всякие --- кто-то старается указывать ссылки всегда и подробнее, а кто-то может их вообще не указывать. Какого из них придерживаться --- каждый может решить только за себя. Могу разве добавить пару примеров.

Код:
MODULE  i21sysDesktop; (* FVT 2009-03-17; last changed: 2010-09-21 *)
(* Derived from PrivDesktop by
      Bruno Essmann (bessmann@iiic.ethz.ch),
      Guy Laden (laden@math.tau.ac.il),
      Iain Scott (iain.i.scott@gecm.com);
   see also Desktop at http://www.zinnamturm.eu.
   This version by Fyodor Tkachov is an attempt to simpify and clarify the original. *)

   IMPORT  Strings,  Files,  Stores,  Views,  TextViews,  TextControllers, 
...
Код:
MODULE  i21sysCalls; (** 22.10.2010 (0014) **)
(*
2010-10-18 Е.Э.Темиргалеев -- исправления для корректной работы под wine+linux
2008-05-19 Ф.В.Ткачев
-- собрано из примеров в сообщениях рассылки BlackBox-Mailing List
*)
   IMPORT  SYSTEM,  WinApi,  HostDialog,  Services, i21sysInfo;
...


http://oberoncore.ru/projects/ta /bblin20/Ta_/tarun.c
Код:
/*
 *                      ***** TA BlackBox DLL Runner *****
 *
 *                      Transparent Architecture
 *
 *   Copyright (c) 2012 Dmitry Dagaev. All rights reserved.
 *
 */
...
/* ------------------------------------------------------- */
#ifndef _WIN32
void ParsToEnv(int argc, char **argv)
{
   const char * const argcId = "bb-argc";
   const char * const argvId = "bb-argv";
   int res, ok;
   char argcS[9], argvS[9];
   
   res = sprintf(argcS, "%08X", argc);
   ok = res > 0;
   if (ok) {
      res = sprintf(argvS, "%08X", (unsigned)argv);
      ok = res == 8;
   }
   if (ok) {
      res = setenv(argcId, argcS, 1);
      ok = res == 0;
   }
   if (ok) {
      res = setenv(argvId, argvS, 1);
      ok = res == 0;
   }
   if (!ok) {
      fprintf(stderr, "Failed to setenv \"%s\" & \"%s\"\n",
         argcId, argvId);
   }
}
#endif

/* ------------------------------------------------------- */
int main(int argc, char **argv)
{
   ...
#else
   ParsToEnv(argc, argv);
   strcat(modname, ".so");
   dlerror();
   plib = dlopen(libname, RTLD_NOW);
   if (!plib) {
      printf("* dlopen %s: %s\n", libname, dlerror());
      return 2;
   }
   dlerror();
   initLib = (TaInitLibStationData *) dlsym(plib,
      "taGetLibStationData");
   if (!initLib) {
      printf("* dlsym taGetLibStationData: %s\n", dlerror());
      return 2;
       }

   skbsProc = (Procedure1)dlsym(plib, "SetKernelBaseStack");
   if (!skbsProc) {
      printf("* dlsym SetKernelBaseStack: %s\n", dlerror());
      return 2;
       }
   asm ("movl %%esp, %[res]" : [res] "=m" (res) );
   skbsProc(res - 8);
#endif
   i =
   (*initLib)(NULL);
   if (i < 0)
      printf("taGetLibStationData return:%d\n", i);
   return 0;
}
http://oberoncore.ru/projects/bb16lin-simple-console /BlackBox.c (viewtopic.php?p=66916#p66916)
Код:
// Idea of the C-starter comes from the OpenBUGS project. See: http://www.mathstat.helsinki.fi/openbugs/LinBUGS.html
// Refinement: Eugene Temirgaleev (http://forum.oberoncore.ru/memberlist.php?mode=viewprofile&u=7)

#include …

#define BEGIN {


void ParsToEnv (int argc, char **argv)
BEGIN
   const char * const argcId = "bb-argc";
   const char * const argvId = "bb-argv";
   int res, ok;
   char argcS[9], argvS[9];

   res = sprintf(argcS, "%08X", argc); dprintf("1: %i\n", res);
   ok = res > 0;
   IF ok THEN
      res = sprintf(argvS, "%08X", (unsigned)argv); dprintf("2: %i\n", res);
      ok = res == 8
   END;
   IF ok THEN
      res = setenv(argcId, argcS, 1); dprintf("3: %i\n", res);
      ok = res == 0
   END;
   IF ok THEN
      res = setenv(argvId, argvS, 1); dprintf("4: %i\n", res);
      ok = res == 0
   END;
   IF !ok THEN
      fprintf(stderr, "Failed to setenv \"%s\" & \"%s\"\n", argcId, argvId)
   END;
   dprintf("%s=%s\n%s=%s\n", argcId, getenv(argcId), argvId, getenv(argvId))
END /*ParsToEnv*/;

void MakeLibFName (char *argv0, const char *name, char *lib, int len) ...

int main (int argc, char *argv[])
BEGIN
   const char * const libName = "libBB.so";
   const char * const mainProcId = "Init";
   const char * const skbsProcId = "SetKernelBaseStack";

   typedef void (*Procedure) (void) __attribute ((stdcall));
   typedef void (*Procedure1) (int) __attribute ((stdcall));

   int res, res2;
   void *handle;
   Procedure mainProc; Procedure1 skbsProc;
   const char *error;
   char lib[1024];

   const int LENlib = sizeof(lib) / sizeof(lib[0]);

   // (!) The variables bb-argc & bb-argv will be used when Kernel is initializing during library loading
   ParsToEnv(argc, argv);
   // Load
   MakeLibFName(argv[0], libName, lib, LENlib); dprintf("lib: \"%s\"\n", lib);
   dlerror();   // clear prev error state
   handle = dlopen(lib, RTLD_LAZY); res = (handle != NULL) ? 0 : 1;
   IF res != 0 THEN fprintf(stderr, "dlopen failed on \"%s\": %s\n", lib, dlerror()) END;
   // Get main
   IF res == 0 THEN
      dlerror();   // clear prev error state
      mainProc = (Procedure)dlsym(handle, mainProcId);
      error = dlerror();
      res = (error == NULL && mainProc != NULL) ? 0 : 2;
      IF res != 0 THEN
         fprintf(stderr, "\"%s\" not found in \"%s\": %s\n", mainProcId, lib, error)
      END
   END;
   // Get Kernel_so_init.SetKernelBaseStack
   IF res == 0 THEN
      dlerror();   // clear prev error state
      skbsProc = (Procedure1)dlsym(handle, skbsProcId);
      error = dlerror();
      res = (error == NULL && skbsProc != NULL) ? 0 : 3;
      IF res != 0 THEN
         fprintf(stderr, "\"%s\" not found in \"%s\": %s\n", skbsProcId, lib, error)
      END
   END;
   // Execute main
   IF res == 0 THEN
      asm ("movl %%esp, %[res]" : [res] "=m" (res) );
      skbsProc(res - 8);
      // <return adr> <caller ebp> -> base stack = locals of main proc
      mainProc()
   END;
   // Unload
   IF handle != NULL THEN
      dlerror();   // clear prev error state
      res2 = dlclose(handle);
      IF res2 != 0 THEN fprintf(stderr, "dlclose failed on \"%s\": %s\n", lib, dlerror()) END;
      handle = NULL
   END;
   RETURN res
END /*main*/;

Автор:  Alexander Shiryaev [ Суббота, 22 Февраль, 2014 21:20 ]
Заголовок сообщения:  Re: DIA: BlackBox Component Builder 1.6rc6 + GTK2

Евгений Темиргалеев писал(а):
Alexander Shiryaev писал(а):
2) А что, должны быть? Какие именно? Ссылки можно поставить.
Александр, у Вас высшее образование и работаете Вы в научной сфере. Разве в научных работах не принято ставить как можно более точные ссылки на задействованные источники? А программирование --- "научная и практическая деятельность..." [ГОСТ 19781-90].

Я работаю не в научной сфере.
И государственными стандартами, как правило, не пользуюсь.

Евгений Темиргалеев писал(а):
Карточка проекта существует (с 01.11.2012): http://oberoncore.ru/projects/bb16lin-console. Названия у дельт есть. Разве что ссылки на заметки непосредственно в карточку только вставил.

Что Вы конкретно использовали --- дельту с описанием решения, исходник, документацию, заметки --- откуда мне знать? Мне виден только факт использования. И я считаю, что в этом случае ссылку ставить нужно.

Посмотрел дельты и не нашёл, что я использовал. Здесь, в подразделах Files.modified и Files.new, указаны все мои правки, не связанные с графическим пользовательским интерфейсом.

Поэтому не знаю, где ставить ссылки, и на что.

Автор:  Евгений Темиргалеев [ Воскресенье, 23 Февраль, 2014 19:41 ]
Заголовок сообщения:  Re: DIA: BlackBox Component Builder 1.6rc6 + GTK2

https://github.com/aixp/BlackBox/blob/master/README
Код:
   _Linux_/Host/Mod/Files.odc:
server configuration via BB_PRIMARY_DIR and BB_SECONDARY_DIR environment variables (not command line)
filenames encoding translation implemented

   Command line support removed because there is no easy way to access argc argv from outside main()
Environment variables supported instead:
...
Дельта KernelCmdline, решение 4. Дельта HostFilesCmdline.

Дельта HostFilesMbUcs2 как пример применения системных средств преобразования литер прямо из HostFiles... тоже вроде как просто идея...

Автор:  Alexander Shiryaev [ Вторник, 25 Февраль, 2014 00:46 ]
Заголовок сообщения:  Re: DIA: BlackBox Component Builder 1.6rc6 + GTK2

Чтение аргументов командной строки правильнее сделать через отдельный модуль, типа SystemCmdline (с реализацией в HostCmdline). И чтение переменных окружения тоже...

Для преобразования кодировок предпочитаю функции iconv (а не mbrtowc/wcrtomb), так как они работают быстрее и на практике поддерживаются в большем количестве операционных систем.

http://oberoncore.ru/_media/library/temir_primery_preobrazovaniya_mnogobajtovy_x_kodirovok_v_ucs-2_sredstvami_libc.pdf писал(а):
...не имеется библиотечных средств, связующих стандартные системные настройки пользователя с именем внешней многобайтовой кодировки
Не библиотечных, но имеется -- через переменную окружения LANG.

Автор:  Евгений Темиргалеев [ Вторник, 25 Февраль, 2014 16:44 ]
Заголовок сообщения:  Re: DIA: BlackBox Component Builder 1.6rc6 + GTK2

Alexander Shiryaev писал(а):
Для преобразования кодировок предпочитаю функции iconv (а не mbrtowc/wcrtomb), так как они работают быстрее и на практике поддерживаются в большем количестве операционных систем.

http://oberoncore.ru/_media/library/temir_primery_preobrazovaniya_mnogobajtovy_x_kodirovok_v_ucs-2_sredstvami_libc.pdf писал(а):
...не имеется библиотечных средств, связующих стандартные системные настройки пользователя с именем внешней многобайтовой кодировки
Не библиотечных, но имеется -- через переменную окружения LANG.
Эти детали уже обсуждались (viewtopic.php?p=75670#p75670); Вы, кстати, сначала кое-что другое предпочитали.
Alexander Shiryaev писал(а):
Чтение аргументов командной строки правильнее сделать через отдельный модуль, типа SystemCmdline (с реализацией в HostCmdline). И чтение переменных окружения тоже...
И вообще... мне не понятны эти рассуждения (в будущем времени и о деталях) в ответ на viewtopic.php?p=86184#p86184:

Вы использовали (другими словами --- почти полтора года как используете)
1) общее решение: Дельта KernelCmdline, решение 4
2) частное: дельта HostFilesCmdline
Утверждаю это как практически достоверное событие.

Речь собственно о том (viewtopic.php?p=86104#p86104, 2), что нет ссылок на эти решения.
---
Вы не согласны с утверждением, что использовали эти решения?

Автор:  Alexander Shiryaev [ Вторник, 25 Февраль, 2014 21:28 ]
Заголовок сообщения:  Re: DIA: BlackBox Component Builder 1.6rc6 + GTK2

Так это же решение (идея), а не конкретная реализация. В то время у меня было несколько вариантов, как сделать лучше, и Вы предложили как раз один из них. Ну раз не только я так решил, то я так и реализовал. И названия переменных окружения (BB_PRIMARY_DIR и BB_SECONDARY_DIR), как Вы предлагали, так я и назвал. А зачем по-другому называть? В описании к ссылке о чём писать? Что названия переменных такие же? Или что было выбрано такое же решение?

Автор:  Евгений Темиргалеев [ Четверг, 27 Февраль, 2014 16:56 ]
Заголовок сообщения:  Re: DIA: BlackBox Component Builder 1.6rc6 + GTK2

Alexander Shiryaev писал(а):
В то время у меня было несколько вариантов, как сделать лучше, и Вы предложили как раз один из них.
К сожалению, Вы нам об этом не написали. А решение, про которое писал я не увидели до сих пор (viewtopic.php?p=86104#p86104, 1). Но всё это издержки коллективной работы, которую наладить не удалось...

Alexander Shiryaev писал(а):
Так это же решение (идея), а не конкретная реализация. ... Ну раз не только я так решил, то я так и реализовал. И названия переменных окружения (BB_PRIMARY_DIR и BB_SECONDARY_DIR), как Вы предлагали, так я и назвал. А зачем по-другому называть?
Конкретная реализация (HostFiles.Init)
https://github.com/aixp/BlackBox/tree/f ... 28f34b1bdf
почти до буквы совпадает с дельтой HostFilesCmdline. Вероятность такого совпадения при независимой реализации почти равна нулю.

Alexander Shiryaev писал(а):
В описании к ссылке о чём писать? Что названия переменных такие же? Или что было выбрано такое же решение?
Поэтому, если Вы использовали этот код из дельты HostFilesCmdline, то так и напишите: "чч.чч.чччч была использована дельта HostFilesCmdline". Если не использовали, не пишите; значит просто совпало, а я ошибся в предположении.

Про решение --- "используется (выбрано) такое же решение, как и в дельте KernelCmdline (решение 4)".

Автор:  Alexander Shiryaev [ Четверг, 27 Февраль, 2014 19:22 ]
Заголовок сообщения:  Re: DIA: BlackBox Component Builder 1.6rc6 + GTK2

Евгений Темиргалеев писал(а):
Alexander Shiryaev писал(а):
В то время у меня было несколько вариантов, как сделать лучше, и Вы предложили как раз один из них.
К сожалению, Вы нам об этом не написали.

Ну я же не записываю свои мысли...

Евгений Темиргалеев писал(а):
А решение, про которое писал я не увидели до сих пор (viewtopic.php?p=86104#p86104, 1). Но всё это издержки коллективной работы, которую наладить не удалось...

Это про другое. Я только недавно увидел Ваш документ, в котором написано, как можно сделать. wiki ещё не изменил, времени не хватает.

Евгений Темиргалеев писал(а):
Alexander Shiryaev писал(а):
Так это же решение (идея), а не конкретная реализация. ... Ну раз не только я так решил, то я так и реализовал. И названия переменных окружения (BB_PRIMARY_DIR и BB_SECONDARY_DIR), как Вы предлагали, так я и назвал. А зачем по-другому называть?
Конкретная реализация (HostFiles.Init)
https://github.com/aixp/BlackBox/tree/f ... 28f34b1bdf
почти до буквы совпадает с дельтой HostFilesCmdline. Вероятность такого совпадения при независимой реализации почти равна нулю.

Alexander Shiryaev писал(а):
В описании к ссылке о чём писать? Что названия переменных такие же? Или что было выбрано такое же решение?
Поэтому, если Вы использовали этот код из дельты HostFilesCmdline, то так и напишите: "чч.чч.чччч была использована дельта HostFilesCmdline". Если не использовали, не пишите; значит просто совпало, а я ошибся в предположении.

Про решение --- "используется (выбрано) такое же решение, как и в дельте KernelCmdline (решение 4)".

Хорошо, добавлю ссылку.

Автор:  Евгений Темиргалеев [ Четверг, 27 Февраль, 2014 22:20 ]
Заголовок сообщения:  Re: DIA: BlackBox Component Builder 1.6rc6 + GTK2

Alexander Shiryaev писал(а):
Евгений Темиргалеев писал(а):
Alexander Shiryaev писал(а):
В то время у меня было несколько вариантов, как сделать лучше, и Вы предложили как раз один из них.
К сожалению, Вы нам об этом не написали.

Ну я же не записываю свои мысли...

Евгений Темиргалеев писал(а):
А решение, про которое писал я не увидели до сих пор (viewtopic.php?p=86104#p86104, 1). Но всё это издержки коллективной работы, которую наладить не удалось...

Это про другое. Я только недавно увидел Ваш документ, в котором написано, как можно сделать. wiki ещё не изменил, времени не хватает.
я и не говорил, что про тоже, но про коллективную работу...

Автор:  Alexander Shiryaev [ Вторник, 25 Март, 2014 23:58 ]
Заголовок сообщения:  Re: DIA: BlackBox Component Builder 1.6rc6 + GTK2

Евгений Темиргалеев писал(а):
Иван Денисов писал(а):
...подготовлена сборка для Ubuntu и аннотация:
Вложение:
linproj140214.7z
Пара замечаний по аннотации.

1)
Цитата:
Второй способ не работает в операционной системе Ubuntu (по крайней мере, если программу компилировать системным компилятором GCC), если явно не выполняется ни одна из экспортируемых процедур библиотеки, т.е. конструктор библиотеки в этом случае не срабатывает.
Этот способ в Убунту работает. В 10-й версии сам по себе, в 12-версии с указанием ключа. О чём было подробно написано: http://oberoncore.ru/library/temir_orga ... biblioteki

Ещё надо добавить "-Wl,-z,'origin'" -- без этого "-Wl,-rpath,'$ORIGIN'" работает не везде.

Автор:  Евгений Темиргалеев [ Среда, 26 Март, 2014 11:41 ]
Заголовок сообщения:  Re: DIA: BlackBox Component Builder 1.6rc6 + GTK2

Alexander Shiryaev писал(а):
Ещё надо добавить "-Wl,-z,'origin'" -- без этого "-Wl,-rpath,'$ORIGIN'" работает не везде.
Спасибо за уточнение. Внёс.

Автор:  Иван Денисов [ Среда, 26 Март, 2014 16:00 ]
Заголовок сообщения:  Re: DIA: BlackBox Component Builder 1.6rc6 + GTK2

Сегодня поработал над CloseDialog и привязками к вариантам кнопок на диалоге, немного над RadioButtons

Тут diff изменений:
http://redmine.molpit.com/projects/blac ... 14920f1282

Автор:  Дмитрий Дагаев [ Четверг, 27 Март, 2014 10:24 ]
Заголовок сообщения:  Re: DIA: BlackBox Component Builder 1.6rc6 + GTK2

Евгений Темиргалеев писал(а):
а кто-то может их вообще не указывать

Евгений, спасибо за тактичную критику, закачаю с очередным обновлением.
Код:
 * Idea of the C-starter comes from the OpenBUGS project. See: http://www.mathstat.helsinki.fi/openbugs/LinBUGS.html
 * Refinement: Eugene Temirgaleev (http://forum.oberoncore.ru/memberlist.php?mode=viewprofile&u=7)
 *
 *   Dmitry Dagaev 2012.

Автор:  Иван Денисов [ Четверг, 27 Март, 2014 12:13 ]
Заголовок сообщения:  Re: DIA: BlackBox Component Builder 1.6rc6 + GTK2

Дмитрий Дагаев писал(а):
Евгений Темиргалеев писал(а):
а кто-то может их вообще не указывать

Евгений, спасибо за тактичную критику, закачаю с очередным обновлением.
Код:
 * Idea of the C-starter comes from the OpenBUGS project. See: http://www.mathstat.helsinki.fi/openbugs/LinBUGS.html
 * Refinement: Eugene Temirgaleev (http://forum.oberoncore.ru/memberlist.php?mode=viewprofile&u=7)
 *
 *   Dmitry Dagaev 2012.

Добавил пару ссылок:
http://gitlab.molpit.com/oberon/blackbo ... wikis/home

Сложность добавления ссылок заключается в том, что часть разработки проходила скрытой от меня, я не могу знать кто и что делал. Я получил архив версии Оминк и с ним работал, и версия Димыча была тогда доступна и мне известна. На том все. Потом на подмогу пришел Александр, но у него пока нет времени про всех припомнить, да и некоторые вещи очевидно забываются. Поэтому прошу самих авторов как-то о себе напомнить, а не копить обиду или негодование. Я физически не смогу ничего написать про вклад Игоря и подобных разработчиков, так как только догадываюсь и точно написать не могу. Впредь просьба о своем вкладе писать в модуле вверху в специальной секции кто чего и когда сделал, это сильно облегчит задачу на будущее.

Автор:  Евгений Темиргалеев [ Пятница, 28 Март, 2014 08:43 ]
Заголовок сообщения:  Re: DIA: BlackBox Component Builder 1.6rc6 + GTK2

Иван Денисов писал(а):
Добавил пару ссылок:
http://gitlab.molpit.com/oberon/blackbo ... wikis/home
Правильная ссылка на материалы по методу [1]: http://oberoncore.ru/projects/bb16lin-simple-console

Страница 5 из 6 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/