poshlostios/app/woman/woman.js
2025-03-20 01:28:51 +03:00

242 lines
8.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

async function main(args) {
if (args.length != 2) {
writeStdout(`Использование: woman <статья>
Статьи:
* apps - Создание приложений
* files - Работа файлов в приложениях
* stdin - Чтение ввода пользователя
* stdout - Вывод текста в консоль
* terminal - Работа с остальными функциями консоли
* packaging - Пакетирование приложений
* graphics - Отрисовка графики
* colors - Цвета в консоли
`)
return 1
}
if (args[1] == "apps") {
writeStdout(`# Создание приложений
## Написание программ
Все приложения в PoshlostiOS это JS скрипты
Каждый такой скрипт должен иметь свой entry-point - асинхронная функция
с названием main и единственным аргументом args в
котором хранится список из передаваемых пользователем аргументов
и возвращающая число статус кода
Пример такого скрипта:
async function main(args) {
return 0
}
## Вызов команд
Вот как выглядит функция:
executeCommand(args, read=readStdin, write=writeStdout) -> {"id": string, "name": args.join(" "), "promise": Promise}
Первый аргумент при вызове команды должен быть путем до исполняемого файла
Функция возвращает промис в поле promise, чтобы дождаться конца команды используйте await
Ты чо дебик мог и сам догадаться
все бб
`)
return 0
} else if (args[1] == "files") {
writeStdout(`# Работа файлов в приложениях
Вот описание всех функций для работы с файлами:
readFile(path) -> string - читает контент файла
writeFile(path, content) - записать контент в файл
hasFile(path) -> boolean - узнает существует ли файл
listFiles(path) -> list[string] - выдает список из имен файлов в папке
createFolder(path) - создать папку
removeFile(path) - удалить файл
isFolder(path) -> boolean - узнает это файл или папка
simplifyPath(path) -> string - переделать в абсолютный путь и убрать лишнее
clearFileSystem() - удалить все файлы к чертям собачьим
Всю начинку ФС вы можете увидеть в исходном коде в sys/fs.js
`)
return 0
} else if (args[1] == "stdin") {
writeStdout(`# Чтение ввода пользователя
## Редактирование флагов
setStdinFlag(SILENT_STDIN) // Сделать чтоб при вводе не писались символы
setStdinFlag(RENDER_STDIN) // Сделать чтобы символы при вводе обратно выводились
setStdinFlag(DISABLE_STDIN) // Выключить ввод
setStdinFlag(ENABLE_STDIN) // Включить ввод
## Чтение ввода сырым
Функция:
readStdin() -> string
Она выдает всего один символ:
Чтобы прочитать спец-клавишу, он выдает такие символы по порядку:
"\\r"
int(is_ctrl)
int(is_alt)
int(is_shift)
key
"\\r"
## Чтение ивентов с ввода
Чтобы не читать ввод сырым, вы можете читать ивентами
Функция:
pollStdinEvent() -> event
Ивент при спец-клавише выглядит так:
{
"type": "key",
"ctrl": is_ctrl,
"alt": is_alt,
"shift": is_shift,
"key": key
}
Ивент при обычном символе выглядит так:
{
"type": "char",
"char": char
}
## Чтение строками
Функция:
readLine(on_key=(key, ctrl, alt, shift, content, pos) => [content, pos]) -> string
На спец-клавишу будет вызываться on_key,
единственное что Backspace, ArrowLeft, ArrowRight уже обрабатываются функцией,
и на них on_key не будет вызываться
`)
return 0
} else if (args[1] == "stdout") {
writeStdout(`# Вывод текста в консоль
Функция:
writeStdout(content)
всё
`)
return 0
} else if (args[1] == "terminal") {
writeStdout(`# Работа с остальными функциями консоли
Вот функции остальные:
getTerminal() -> string - получить контент терминала
setTerminal(content) - изменить контент терминала
writeTerminalAtCursor(content) - написать в терминал на курсоре
writeTerminal(content) - написать в терминал в конец
replaceTerminal(content) - изменить терминал и обновить
trimTerminal(length) - обрезать терминал
setCursor(x, y) - установить курсор
clearTerminal() - очистить терминал
updateTerminalWOCursor() - обновить терминал без установки курсора в конец
updateTerminal() - обновить терминал
updateCursor() - обновить курсор
getCursorIndex() -> index - получить индекс курсора в тексте терминала
getCursor() -> [x, y] - получить курсор
`)
return 0
} else if (args[1] == "colors") {
writeStdout(`# Цвета в консоли
Вот как сделать цвет: $##000000
Вот как убрать цвет: $#reset
Чтоб вывести это в консоль как я щас сделал пиши в начале $# вместо просто доллара
Все понятно?
`)
return 0
} else if (args[1] == "packaging") {
writeStdout(`# Пакетирование приложений
Пакет выглядит примерно так в репозитории (package_name для примера):
~ repository/package_name/package.json
{
"name": "package_name",
"version": "0.1.0",
"apps": [ "package_name.js" ],
"configs": [ "package_name.json" ],
"comment": "fields 'name', 'version', 'apps' and 'configs' are required!!! other fields can be used like this:",
"description": "PackageDescription",
"author": "AuthorName",
"license": "MIT",
"home_page": "https://example.com",
"source_code": "https://github.com/example"
}
~ repository/package_name/package_name.json
{
"config_1": "this is your config file",
"config_2": "use it as you need",
}
~ repository/package_name/package_name.js
async function main(args) {
let config = JSON.parse(readFile("/config/package_name.json")) // object
writeStdout("here is your config file content: " + config + "\n")
return 0
}
`)
return 0
} else if (args[1] == "graphics") {
writeStdout(`# Отрисовка графики
Описание использования:
enableGraphics() // включить графику
var graphics = getGraphics() // получить графику
// var ctx = graphics.context // получить контекст чтоб рисоват
// var width = graphics.width // получить ширину
// var height = graphics.height // получить высоту
var window = createWindow(x, y, w, h, title)
// var width = window.width // получить ширину
// var height = window.height // получить высоту
// var x = window.x // получить x
// var y = window.y // получить y
window.move(x, y, w, h)
// var ctx = window.context // получить контекст чтоб рисоват
window.destroy() // удалить окно
disableGraphics() // отключить графику
`)
return 0
}
return 1
}