DC-SWAT Forum

Полная версия: DreamShell 4.0 - Module dev
Вы просматриваете yпpощеннyю веpсию форума. Пеpейти к полной веpсии.
Coming soon...
The module dev, it will be posted one day? XD XD
Sorry no time for now. But I'll try to write at least an example.
thanks SWAT youre the best!!, i hope it
SWAT в sdk есть функция
Код:
/* Return the status of the drive as two integers (see constants) */
int cdrom_get_status(int *status, int *disc_type);
не мог бы ты написать пример консольного приложения на си, чтоб вызывалась эта функция и выдавала в консоль полученный результат
А чего тут писать то? Если тебе просто внешняя команда для консоли нужна (не модуль с командой, а просто команда), то выглядит это точно так же как и на любой другой платформе:

Код:
#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-cur...om_8h.html

Если нужен именно модуль с командой, то тут конечно немного по другому, если надо, напишу как.
огромное спасибо. для начала изучений этого более чем достаточно, если дойдет дело до модуля и не будет получаться, то обязательно спрошу.
А в чём разница между модулем и командой? приведённый пример это какаято подпрограмка? как потом компилиться и вызывается? я думал команда это типа в строке набираешь, и исполняется заведомо встроенный код в дримшелл? а тут типа экзешник или ? потом вызывается в консоли типа испольнить (такаоето имя файла) и дримшел грузит с карты этот файл и испоняет?
В целом ты сам ответил на свой вопрос 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
URL ссылки