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*/;