Добавлены модули общего назначения
This commit is contained in:
parent
043c0b91f6
commit
e753c86eb9
8 changed files with 63 additions and 15 deletions
14
README.md
14
README.md
|
@ -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 Эмуляция статуса выполнения процесса
|
||||||
```
|
```
|
||||||
|
|
4
dub.json
4
dub.json
|
@ -13,6 +13,6 @@
|
||||||
"ncurses": "~>1.0.0"
|
"ncurses": "~>1.0.0"
|
||||||
},
|
},
|
||||||
"libs": [
|
"libs": [
|
||||||
"formw"
|
"formw"
|
||||||
]
|
]
|
||||||
}
|
}
|
19
source/app.d
19
source/app.d
|
@ -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;
|
||||||
|
|
5
source/examples/common/README.md
Normal file
5
source/examples/common/README.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
# Общего назначения
|
||||||
|
|
||||||
|
## isexists
|
||||||
|
|
||||||
|
Функция `isExecutableExists` проверяет наличие исполняемого файла `appName` в директориях, указанных в переменной окружения `PATH`. Разбивает `PATH` на директории, формирует полный путь к файлу и проверяет его существование и тип (файл). Возвращает `true`, если файл найден, иначе `false`. Использует модули `std.process`, `std.file`, `std.path`, `std.array`.
|
30
source/examples/common/isexists.d
Normal file
30
source/examples/common/isexists.d
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
3
source/examples/common/package.d
Normal file
3
source/examples/common/package.d
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
module examples.common;
|
||||||
|
|
||||||
|
public import examples.common.isexists;
|
|
@ -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;
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
module examples.version_;
|
module examples.version_;
|
||||||
|
|
||||||
enum examplesVersion = "0.2.0";
|
enum examplesVersion = "0.3.0";
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue