Добавлены модули общего назначения
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
 | 
			
		||||
d-examples
 | 
			
		||||
├── shell           Запуск команд в shell
 | 
			
		||||
│   ├── pipe        Чтение выходных данных на примере ip
 | 
			
		||||
│   └── spinner     Эмуляция статуса выполнения процесса
 | 
			
		||||
└── ncurses         Использование библиотеки ncurses
 | 
			
		||||
    ├── menu        Интерактивное консольное меню
 | 
			
		||||
    └── password    Консольное окно для ввода пароля
 | 
			
		||||
├── common          Общего назначения
 | 
			
		||||
│   ├── isexists    Проверяет наличие исполняемого файла в директориях,указанных в переменной окружения PATH
 | 
			
		||||
├── ncurses         Использование библиотеки ncurses
 | 
			
		||||
│   ├── menu        Интерактивное консольное меню
 | 
			
		||||
│   └── password    Консольное окно для ввода пароля
 | 
			
		||||
└── shell           Запуск команд в shell
 | 
			
		||||
    ├── pipe        Чтение выходных данных на примере ip
 | 
			
		||||
    └── spinner     Эмуляция статуса выполнения процесса
 | 
			
		||||
```
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										4
									
								
								dub.json
									
										
									
									
									
								
							
							
						
						
									
										4
									
								
								dub.json
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -13,6 +13,6 @@
 | 
			
		|||
		"ncurses": "~>1.0.0"
 | 
			
		||||
	},
 | 
			
		||||
	"libs": [
 | 
			
		||||
        "formw"
 | 
			
		||||
    ]
 | 
			
		||||
		"formw"
 | 
			
		||||
	]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										19
									
								
								source/app.d
									
										
									
									
									
								
							
							
						
						
									
										19
									
								
								source/app.d
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										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.shell;
 | 
			
		||||
public import examples.ncurses;
 | 
			
		||||
public import examples.common;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,3 @@
 | 
			
		|||
module examples.version_;
 | 
			
		||||
 | 
			
		||||
enum examplesVersion = "0.2.0";
 | 
			
		||||
enum examplesVersion = "0.3.0";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue