Добавлены модули общего назначения

This commit is contained in:
Alexander Zhirov 2025-05-15 21:57:17 +03:00
parent 043c0b91f6
commit e753c86eb9
Signed by: alexander
GPG key ID: C8D8BE544A27C511
8 changed files with 63 additions and 15 deletions

View file

@ -6,10 +6,12 @@
```sh ```sh
d-examples d-examples
├── shell Запуск команд в shell ├── common Общего назначения
│ ├── pipe Чтение выходных данных на примере ip │ ├── isexists Проверяет наличие исполняемого файла в директориях,указанных в переменной окружения PATH
│ └── spinner Эмуляция статуса выполнения процесса ├── ncurses Использование библиотеки ncurses
└── ncurses Использование библиотеки ncurses │ ├── menu Интерактивное консольное меню
├── menu Интерактивное консольное меню │ └── password Консольное окно для ввода пароля
└── password Консольное окно для ввода пароля └── shell Запуск команд в shell
├── pipe Чтение выходных данных на примере ip
└── spinner Эмуляция статуса выполнения процесса
``` ```

View file

@ -7,24 +7,31 @@ private string programName = "d-examples";
int main(string[] args) int main(string[] args)
{ {
auto argumets = new Program(programName, examplesVersion) auto argumets = new Program(programName, examplesVersion)
.add(new Command("shell", "Запуск команд в shell") .add(new Command("common", "Общего назначения")
.add(new Command("pipe", "Чтение выходных данных на примере ip")) .add(new Command("isexists",
.add(new Command("spinner", "Эмуляция статуса выполнения процесса")) "Проверяет наличие исполняемого файла в директориях,указанных в переменной окружения PATH"))
) )
.add(new Command("ncurses", "Использование библиотеки ncurses") .add(new Command("ncurses", "Использование библиотеки ncurses")
.add(new Command("menu", "Интерактивное консольное меню")) .add(new Command("menu", "Интерактивное консольное меню"))
.add(new Command("password", "Консольное окно для ввода пароля")) .add(new Command("password", "Консольное окно для ввода пароля"))
) )
.add(new Command("shell", "Запуск команд в shell")
.add(new Command("pipe", "Чтение выходных данных на примере ip"))
.add(new Command("spinner", "Эмуляция статуса выполнения процесса"))
)
.parse(args); .parse(args);
argumets argumets
.on("shell", (shell) { shell .on("common", (common) { common
.on("pipe", (pipe) { pipeShell(); }) .on("isexists", (isexists) { isExists(); });
.on("spinner", (loading) { spinnerShell(); });
}) })
.on("ncurses", (ncurses) { ncurses .on("ncurses", (ncurses) { ncurses
.on("menu", (items) { menuNcurses(); }) .on("menu", (items) { menuNcurses(); })
.on("password", (password) { passwordNcurses(); }); .on("password", (password) { passwordNcurses(); });
})
.on("shell", (shell) { shell
.on("pipe", (pipe) { pipeShell(); })
.on("spinner", (loading) { spinnerShell(); });
}); });
return EXIT_SUCCESS; return EXIT_SUCCESS;

View file

@ -0,0 +1,5 @@
# Общего назначения
## isexists
Функция `isExecutableExists` проверяет наличие исполняемого файла `appName` в директориях, указанных в переменной окружения `PATH`. Разбивает `PATH` на директории, формирует полный путь к файлу и проверяет его существование и тип (файл). Возвращает `true`, если файл найден, иначе `false`. Использует модули `std.process`, `std.file`, `std.path`, `std.array`.

View file

@ -0,0 +1,30 @@
module examples.common.isexists;
import std.process : environment;
import std.file : exists, isFile;
import std.path : pathSeparator, buildPath;
import std.array : split;
import std.stdio : writefln;
// Проверка существования утилиты в PATH
private bool isExecutableExists(string appName) {
auto path = environment.get("PATH");
if (path is null) return false;
foreach (dir; path.split(pathSeparator)) {
auto fullPath = buildPath(dir, appName);
if (exists(fullPath) && isFile(fullPath)) {
return true;
}
}
return false;
}
void isExists() {
foreach (app; ["ls", "mc", "htop", "bash", "nano"]) {
if (isExecutableExists(app))
writefln("Приложение %s найдено", app);
else
writefln("Приложение %s не найдено", app);
}
}

View file

@ -0,0 +1,3 @@
module examples.common;
public import examples.common.isexists;

View file

@ -3,3 +3,4 @@ module examples;
public import examples.version_; public import examples.version_;
public import examples.shell; public import examples.shell;
public import examples.ncurses; public import examples.ncurses;
public import examples.common;

View file

@ -1,3 +1,3 @@
module examples.version_; module examples.version_;
enum examplesVersion = "0.2.0"; enum examplesVersion = "0.3.0";