Здравствуйте, гость ( Вход | Регистрация )

3 страниц V  1 2 3 >  
Ответить в эту темуОткрыть новую тему
> Плагин для работы с файлами
Cockney
сообщение 11.4.2016, 14:24
Сообщение #1


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Плагин дает возможность работать с файлами побайтово.


Актуальная версия : Прикрепленный файл  FilesAPI0000.zip ( 30,63 килобайт ) Кол-во скачиваний: 1692

Минимальная версия пилота : 2.36

Описание функций :

CreateFile

Код
set $a FilesAPI.CreateFile (<имя файла>) - Создает файл и автоматически дает доступ к чтению/записи.


Возвращаемое значения :

-1 - ошибка создания файла
<рандомное число> - хендл файла

OpenFile

Код
set $a FilesAPI.OpenFile (<имя файла> <режим открытия>) - Открывает существующий файл в заданном 
режиме.


Допустимые значения <режим открытия> :

Read
Write
ReadWrite

Возвращаемые значения :

-1 - ошибка открытия файла
-2 - <режим открытия> либо задан некорректно либо вообще не задан
<рандомное число> - хендл файла

CloseFile

Код
set $a FilesAPI.CloseFile (<хендл файла>) - Закрывает файл.


Возвращаемые значения :

-1 - ошибка закрытия ли неправильный хендл
1 - успешно

SetFilePos

Код
set $a FilesAPI.SetFilePos (<хендл файла> <смещение> <позиция>) - Устанавливает указатель в файле на нужное <смещение> относительно <позиция>


Допустимые значения <смещение> :


Любое неотрицательное число (желательно не превышать общий размер файла).


Допустимые значения <позиция> :



FILE_CURRENT - текущая позиция
FILE_BEGIN - начало файла
FILE_END - конец файла

Возвращаемые значения :

-1 - ошибка установки смещения
-2 - некорректное <смещение>
-3 - неккоректное <позиция>
<число> - новая позиция в файле

SetWriteMode

Код
set $a FilesAPI.SetWriteMode (<хендл файла> <режим>) - устанавливает порядок записи байт.


Допустимые значения <режим> :

LE - litle-endian порядок
BE - big-endian порядок

Возвращаемые значения :
-1 - ошибка, возможно некорректный хендл файла
-2 - <режим> либо не задан либо некорректен
1 - успешно

Примечания :

SetWriteMode влияет только на работу функций WriteWORD, WriteDWORD. Остальные функции записи

игнорируют этот параметр.

SetReadMode

Код
set $a FilesAPI.SetReadMode (<хендл файла> <режим>) - устанавливает порядок чтения байт.


Допустимые значения <режим> :

LE - litle-endian порядок
BE - big-endian порядок

Возвращаемые значения :
-1 - ошибка, возможно некорректный хендл файла
-2 - <режим> либо не задан либо некорректен
1 - успешно

Примечания :

SetReadMode влияет только на работу функций ReadWORD, ReadDWORD. Остальные функции чтения

игнорируют этот параметр.

WriteBYTE

Код
set $a FilesAPI.WriteBYTE (<хендл файла> <байт>) - пишет байт в файл в текущую позицию.


Допустимые значения <байт> :

Все числа в диапозоне 0..255.

Возвращаемые значения :

-1 - ошибка записи или некорректный хендл
-2 - некорректный параметр <байт>
1 - успешно

WriteWORD

Код
set $a FilesAPI.WriteWORD (<хендл файла> <слово>) - запись в файл слова в текущую позицию.


Допустимые значения <слово> :

Число, не превышающее 65535.

Возвращаемые значения :

-1 - ошибка записи или неверный хендл.
-2 - некорректный параметр <слово>.
1 - успешно

WriteDWORD

Код
set $a FilesAPI.WriteDWORD (<хендл файла> <дворд>) - запись двойного слова в файл в текущую 
позицию.


Допустимые значения <дворд> :

Число, не превышающее 4294967295.

Возвращаемые значения :

-1 - ошибка записи или неверный хендл.
-2 - некорректный параметр <дворд>.
1 - успешно

WriteArrayOfByte(для версий <= 2.35)

Код
set $a FilesAPI.WriteArrayOfByte (<хендл файла> <байты>) - запись массива байт в файл в 
текущую позицию.


Допустимые значения <байты> :

Массив размерностью [1 N] элементов, содержащих числа в диапозоне 0..255.

Возвращаемые значения :

-1 - ошибка записи или неверный хендл
-2 - некорректный параметр <байты>
<число> - успешно. сколько фактически записано байт.

Примечания :

Перед вызовом функции необходимо установить разделитель элементов массива как пробел.

set delimiter ' '

WriteArrayOfByte(для версий >= 2.36)

Неготово.

ReadBYTE

Код
set $a FilesAPI.ReadBYTE (<хендл файла>) - чтение байта из файла с текущей позиции.


Возвращаемые значения :

-1 - ошибка чтения или неверный хендл.
<число> - успешно. прочитанный байт.

ReadWORD

Код
set %a FilesAPI.ReadWORD (<хендл файла>) - чтение слова из файла с текущей позиции.


Возвращаемые значения :

-1 - ошибка чтения или неверный хендл
Массив размером [1 2] в котором содержаться :
[1 1] - старший байт слова
[1 2] - младший байт слова

Примечания :

Порядок возвращаемых байт зависит от SetReadMode.

ReadDWORD

Код
set %a FilesAPI.ReadDWORD (<хендл файла>) - чтение двойного слова из файла с текущей позиции.


Возвращаемые значения :

-1 - ошибка чтения или неверный хендл
Массив размером [1 2] в котором содержаться :
[1 1] - старшее слово дворда
[1 2] - младшее слово дворда

Примечания :

Порядок возвращаемых слов зависит от SetReadMode.

ReadArrayOfByte (для версий <= 2.35)

Код
set $a FilesAPI.ReadArrayOfByte (<хендл файла> <кол-во байт>) - чтение массива байт из 
файла с текущей позиции.


Допустимые значения <кол-во байт> :

Неотрицательное число до 1048575.

Возвращаемые значения :

-1 - ошибка чтения или неверный хендл
-2 - некорректный параметр <кол-во байт>
Массив размером [1 <кол-во байт>]

ReadArrayOfByte (для версий >= 2.36)

Неготово.

LogicOR

Код
set $a FilesAPI.LogicOR (<операнд 1> <операнд 2>) - логическое ИЛИ.


Допустимые значения <операнд 1> и <операнд 2> :

Числа до 4294967295

Возвращаемые значения :

-1 - ошибка.
-2 - некорректный(е) параметры.
<число> - успешно. Результат.

LogicXOR

Код
set $a FilesAPI.LogicXOR (<операнд 1> <операнд 2>) - логичесоке исключающее ИЛИ.


Допустимые значения <операнд 1> и <операнд 2> :

Числа до 4294967295

Возвращаемые значения :

-1 - ошибка
-2 - некорректный(е) параметры
<число> - успешно. Результат.

LogicSHL

Код
set $a FilesAPI.LogicSHL (<операнд 1> <операнд 2>) - поразрядный сдвиг влево.


Допустимые значения <операнд 1> и <операнд 2> :

Числа до 4294967295

Возвращаемые значения :

-1 - ошибка
-2 - некорректный(е) параметры
<число> - успешно. Результат.

LogicSHR

Код
set $a FilesAPI.LogicSHR (<операнд 1> <операнд 2>) - поразрядный сдвиг вправо.


Допустимые значения <операнд 1> и <операнд 2> :

Числа до 4294967295

Возвращаемые значения :

-1 - ошибка
-2 - некорректный(е) параметры
<число> - успешно. Результат.

LogicAND

Код
set $a FilesAPI.LogicAND (<операнд 1> <операнд 2>) - логичесоке И.


Допустимые значения <операнд 1> и <операнд 2> :

Числа до 4294967295

Возвращаемые значения :

-1 - ошибка
-2 - некорректный(е) параметры
<число> - успешно. Результат.

LowBYTE

Код
set $a FilesAPI.LowBYTE (<слово>) - получение младшего байта из слова.


Допустимые значения <слово>:

Числа до 65535.

Возвращаемые значения :

-1 - ошибка
-2 - некорректный параметр <слово>
<число> - успешно. Результат.

HighBYTE

Код
set $a FilesAPI.HighBYTE (<слово>) - получение старшего байта из слова.


Допустимые значения <слово>:

Числа до 65535.

Возвращаемые значения :

-1 - ошибка
-2 - некорректный параметр <слово>
<число> - успешно. Результат.

LowWORD

Код
set $a FilesAPI.LowWORD (<дворд>) - получение младшего слова из дворд.


Допустимые значения <дворд>:

Числа до 4294967295.

Возвращаемые значения :

-1 - ошибка
-2 - некорректный параметр <дворд>
<число> - успешно. Результат.

HighWORD

Код
set $a FilesAPI.HighWORD (<дворд>) - получение страшего слова из дворд.


Допустимые значения <дворд>:

Числа до 4294967295.

Возвращаемые значения :

-1 - ошибка
-2 - некорректный параметр <дворд>
<число> - успешно. Результат.

BuildWORD

Код
set $a FilesAPI.BuildWORD (<байт> <байт>) - сборка двух байт в одно слово.


Допустимые значения <байт>'ов:

Числа 0..255.

Возвращаемые значения :

-1 - ошибка
-2 - некорректный параметр(ы) <байт>
<число> - успешно. Результат.

BuildDWORD

Код
set $a FilesAPI.BuildDWORD (<слово> <слово>) - сборка двух слов в один дворд.


Допустимые значения <слово>'ов:

Числа до 4294967295.

Возвращаемые значения :

-1 - ошибка
-2 - некорректный параметр(ы) <слово>
<число> - успешно. Результат.


Основные моменты :

1)Все параметры регистрозависимые.
2)Все параметры заключаются с обоих сторон символом '*'.
3)В параметрах допускаются пробелы, но они обрезаются(если с расположены с краев).
4)Все функции чтения/записи меняют значение позиции указателя в файле(указатель на текущий байт).
Имейте это ввиду и контролируйте функций SetFilePos.

5)После окончания работы с файлом необходимо его закрыть.
6)В один файл можно писать/читать из нескольких вкладок(особо не тестил, но вроде работает).
7)Маск. размер файла - 2Гб.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 11.4.2016, 14:59
Сообщение #2


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



А псевдо хекс прикрутишь?) Чтобы записывать типа: 0F15A6B45CC8A21E.

Надо будет еще посмотреть заголовки бмп бинарных и рисунки можно в скрипт прятать.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 11.4.2016, 15:09
Сообщение #3


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Ах да, вместо десятичных чисел можно передавать в шестнадцатеричном виде. т.е. пропускаем через dec2hex и отдаем в плагин. и наоборот,когда получаем из плагина юзаем dec2hex. это имелось ввиду?

числа в 16х должны быть в формате пилота, с 0x.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 11.4.2016, 15:13
Сообщение #4


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Цитата
это имелось ввиду?

Имелось ввиду длинную строку. У меня просто первая мысль которую давно хотел сделать: сейвить бмп внутри скрипта. Если под каждые 4 байта делать вызов, то это будет очень длинно.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 11.4.2016, 15:13
Сообщение #5


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



WriteArrayOfByte/Read....
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 11.4.2016, 15:18
Сообщение #6


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



я походу слепой... два раза смотрел - находил только read...


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 12.4.2016, 11:22
Сообщение #7


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
Плагин дает возможность работать с файлами побайтово.

Для чего это надо?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 12.4.2016, 12:35
Сообщение #8


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Была надобность часто работать именно так с файлами. Лень было таскать с собой иде от нормального языка, сделал плагин. Поделился.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 12.4.2016, 13:20
Сообщение #9


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Цитата
Для чего это надо?

Это надо. Сам хотел) Бывает необходимость поправить пару байт либо считать какой-нибудь формат далекий от синтаксиса загрузки массива.
Кстати из банального - это позволит сделать дописывание текста в файл.

А в чем проблема с плагином для версии 36+? Она вроде вниз полностью совместима при условии использования переноса строк "\r\n".


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 12.4.2016, 13:39
Сообщение #10


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



в 36 будет другой механизм передачи и получения массивов с данными. Что-бы обойти все ограничения, в частности на 32кб возвращаемые.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 12.4.2016, 13:57
Сообщение #11


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Это я догадываюсь. Я не понимаю почему длл в неизменном виде с 2.17 протоколом для 2.35 версии нельзя использовать на 2.36.

Сообщение отредактировал DarkMaster - 12.4.2016, 13:57


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 12.4.2016, 14:01
Сообщение #12


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Можно, только зачем? Это не сложно сделать. Но если есть вариант для 36, зачем использовать урезанный?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 12.4.2016, 14:50
Сообщение #13


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Цитата
Это не сложно сделать.

Меня именно этот момент и интересует. Почему нужно что-то делать, чтобы оно заработало. Изначально планировалась максимальная совместимость вниз, чтобы подобных проблем не возникало. Где лажанули интересно...

Сообщение отредактировал DarkMaster - 12.4.2016, 14:50


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 12.4.2016, 16:14
Сообщение #14


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Так, по порядку.

1)Что бы обеспечить уж полную совместимость - ничего делать и не нужно. Все будет как сейчас.
2)Что мне хотелось бы поправить для 36 : передача данных по ссылке, а не строкой в плагин, что с уменьшит время работы функции при файлах > 10мб.

Выглядеть это будет так :

WriteReadArrayOfByte(<хендл файла> <адрес массива>)

Второй вариант, универсальный для обоих версий :

WriteReadArrayOfByte(<хендл файла> <адрес массива> <флажок, какой метод нужен>).

Ну а на возврат....
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WKnight
сообщение 12.4.2016, 16:17
Сообщение #15


********

Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 4.688



А я тут случайно добавил команду вывода текста в файл 'write (<filename> <any text>)'. Файл всегда дописывается если существует. Подстроки '\n' и '\r' заменяются на символы с кодами 13 и 10 соответственно.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 12.4.2016, 16:27
Сообщение #16


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



оно уже есть?
write 1.txt 13\r\n
результата не дало...

Цитата
Ну а на возврат....

А в чем проблема возврата? Так же по ссылке указатели поправить и норм.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WKnight
сообщение 12.4.2016, 16:35
Сообщение #17


********

Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 4.688



Оно вчера вечером появилось, а сегодня на форум захожу, а оно вон оно как...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 12.4.2016, 18:02
Сообщение #18


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Цитата
Оно вчера вечером появилось, а сегодня на форум захожу, а оно вон оно как...

Тем не менее надо понимать, что у тебя заточенная готовая функция, а тут микроскоп, который может гвозди любые забивать, но это микроскоп. И нечего тут офтопить)


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 12.4.2016, 19:09
Сообщение #19


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Микроскопом гвозди забивать ?!
-----------
Проблем с возвратом нет, надо копать.....как придумаю красивый вариант...но пока будет так : 32кб для 35 и неограниченно для 36.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 12.4.2016, 19:33
Сообщение #20


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Цитата
Микроскопом гвозди забивать ?!

Если касательно дописывания текста в файл, то да) Посимвольно разделять строку по массиву, а потом передавать в плагин предварительно открыв файл, установив режим записи и выставив позицию записи, если рядом будет функция просто дописывающая текст, то да - микроскоп. Но это не значит, что микроскоп плох. Вся его радость в том, что ограничений нет. Ну разве что скорость парсинга строк пилота будет неизбежно тормозить процесс при объемной работе, но при этом работа будет сделана, причем любая.
Кстати не очень понятный момент, а как в версиях 2.35 и ниже передавать массив, если передача массива появилась только в 2.36? Или имеется ввиду, что мы записываем:
%arr[1 1] y
%arr[1 2] w
%arr[1 3] f
а передаем:
%arr[1]
?
Тогда это все-таки передача не массива, а элемента массива...

Сообщение отредактировал DarkMaster - 12.4.2016, 19:34


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

3 страниц V  1 2 3 >
Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 28.3.2024, 18:38
Designed by Nickostyle