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

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

View file

@ -13,6 +13,6 @@
"ncurses": "~>1.0.0"
},
"libs": [
"formw"
]
"formw"
]
}

View file

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

View file

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