DC-SWAT Forum
DreamShell 4.0 - Module dev - Версия для печати

+- DC-SWAT Forum (http://www.dc-swat.ru/forum)
+-- Форум: DreamShell (/forum-3.html)
+--- Форум: Programming (/forum-28.html)
+--- Тема: DreamShell 4.0 - Module dev (/thread-77.html)



DreamShell 4.0 - Module dev - SWAT - 18.03.2009 13:02

Coming soon...


RE: DreamShell 4.0 - Module dev - Jirohn - 18.06.2011 13:04

The module dev, it will be posted one day? XD XD


RE: DreamShell 4.0 - Module dev - SWAT - 18.06.2011 15:48

Sorry no time for now. But I'll try to write at least an example.


RE: DreamShell 4.0 - Module dev - Jirohn - 19.06.2011 14:59

thanks SWAT youre the best!!, i hope it


RE: DreamShell 4.0 - Module dev - megavolt85 - 23.12.2013 04:19

SWAT в sdk есть функция
Код:
/* Return the status of the drive as two integers (see constants) */
int cdrom_get_status(int *status, int *disc_type);
не мог бы ты написать пример консольного приложения на си, чтоб вызывалась эта функция и выдавала в консоль полученный результат


RE: DreamShell 4.0 - Module dev - SWAT - 23.12.2013 08:02

А чего тут писать то? Если тебе просто внешняя команда для консоли нужна (не модуль с командой, а просто команда), то выглядит это точно так же как и на любой другой платформе:

Код:
#include "ds.h"

int main(int argc, char *argv[]) {
    
    int status, disc_type;

    if(cdrom_get_status(&status, &disc_type) < 0) {
        return CMD_ERROR;
    }
    
    ds_printf("CDROM: status=%d disc=%02x\n", status, disc_type);
    return CMD_OK;
}

Расшифровку статусов можешь посмотреть здесь (ну и добавить в код по желанию):
http://gamedev.allusion.net/docs/kos-current/cdrom_8h.html

Если нужен именно модуль с командой, то тут конечно немного по другому, если надо, напишу как.


RE: DreamShell 4.0 - Module dev - megavolt85 - 23.12.2013 08:04

огромное спасибо. для начала изучений этого более чем достаточно, если дойдет дело до модуля и не будет получаться, то обязательно спрошу.


RE: DreamShell 4.0 - Module dev - cybdyn - 23.12.2013 11:33

А в чём разница между модулем и командой? приведённый пример это какаято подпрограмка? как потом компилиться и вызывается? я думал команда это типа в строке набираешь, и исполняется заведомо встроенный код в дримшелл? а тут типа экзешник или ? потом вызывается в консоли типа испольнить (такаоето имя файла) и дримшел грузит с карты этот файл и испоняет?


RE: DreamShell 4.0 - Module dev - SWAT - 23.12.2013 13:20

В целом ты сам ответил на свой вопрос Smile Я лишь разверну этот ответ.
Есть команды встроенные, они находятся в самом ядре и доступны всегда. А есть команды внешние, это как у любой другой ОС скомпилированный, исполняемый файл или скрипт. Так как система *nix style, то исполняемые файлы в этом случае являются elf файлами, а скрипты в случае с DS - это lua.

С точки зрения сборки, между модулем и командой разницы нет. Разница только в некотором содержимом и в их использовании.
Модуль загружается один раз и весит в памяти пока его не выгрузить. Он может добавить в консоль команду по необходимости. И у него есть 4 спец. функции для работы с ним:

lib_get_name
lib_get_version
lib_open
lib_close

Думаю пояснять о каждой смысла нет и так понятно.

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

Ну а модуль с командой, делается в следующем случае.
Если в модуле содержится какая-то библиотека, API которой будет доступно при его загрузке. И вместе с этим идет и команда для ее использования из консоли.
Как пример модуля с командой, можно взять bzip2, это и API самой библиотеки и команда для работы с архивами.
А как пример модуля только с API, можно взять допустим модуль tolua. Он не содержит в себе никаких команд, так как это вспомогательный модуль для luaDS, luaKOS и т.п., которые к слову тоже не содержат в себе никаких команд, они просто дополняют lua окружение всякими функциями.
Вот как то так Smile