1) Есть ли возможность автоматом добавлять нули в конец файла, если места в оригинале не хватает?Есть. Просто указать в "Блоки для текста" начальный и конечный адрес блока, куда нужно вставить текст.
2) Есть у меня, к примеру, игра в двухбайтовой кодировке и за окончание строки отвечает код h0000, но круптар все время теряет 1 ноль и приходится ставить h000000 - тогда все нормально. Но когда в файле встречается штук 8 этих нулей подряд - один или два все время теряются и приходится дописывать вручную. Как быть? :)А это по-моему было только в шестой и пятой версии. Мне казалось, в седьмой это исправлено...
Есть. Просто указать в "Блоки для текста" начальный и конечный адрес блока, куда нужно вставить текст.Если указать в блоках адрес больше, чем есть файле, то круптар просто не видит файл куда вставлять текст.
А это по-моему было только в шестой и пятой версии. Мне казалось, в седьмой это исправлено...У меня такое творится в последней версии с сайта. Ну да ладно, я уже привык )
Если указать в блоках адрес больше, чем есть файле, то круптар просто не видит файл куда вставлять текст.Всё он прекрасно видит. Постоянно вставляю за пределы оригинального рамера без всяких проблем.
У меня такое творится в последней версии с сайта. Ну да ладно, я уже привык )Если кодировка двухбайтовая, поставь ptAlign = 2. Должно помочь.
Первый взгляд ламера и первая мысль было о том, что проблема в том, что длина переведенных строк больше среднего значения оригинальных строк, которые нельзя превышать, т.е. максимум символов, которые можно написать в строке. УлыбкаТвой ламерский взгляд, вероятно, мне не поможет. Максимальная длина символов в строке- 30. И если ты что-то превысишь, то текст просто выводится на другой строке.Так в многих играх. Здесь ничего не превышено.
0187E9h-01000000hМожет не $01000000 (потому что это целых 16 мегабайт), а всего лишь $01????
За окончание строки отвечает байт $00
Я про стопбайт и говорю.За окончание строки отвечает байт $00
Я уточню - не за окончание строки, а за окончание блока текста/начало следующего (диалога, названия действия и т.п.)
За перенос строки отвечает байт 0A.
А может кто-нибудь помочь написать этот плагин, если я дам все комбинации?Качаем исходники плагинов: http://griever.magicteam.net/files/Kruptar_PlugSrc.rar
Там ведь по идее не сложно, просто добавить их в исключения...
И пишем.
тестрования твоих переводческих талантов
Кто такой Михаил Ужасный? )
LOL
Неплохо бы сделать их запись попроще, а не через Delphi o_O
правда для начала может дать кусочек текста для тестрования твоих переводческих талантов, чтобы он не усомнился, что тратит свои силы на написания плагина не напрасно.Ну его таланты можно проверить, поиграв в обе переведенные зельды на N64
правда для начала может дать кусочек текста для тестрования твоих переводческих талантов, чтобы он не усомнился, что тратит свои силы на написания плагина не напрасно.Ну его таланты можно проверить, поиграв в обе переведенные зельды на N64
Слушай, Хоррор... Дружище...
Ты можешь общаться по-человечески и не умничать?
Объясни нормально, как подгонять размер образа файлами-пустышками, а не "кто сказал" и про "железную дорогу"... Ладно?
Я не программер и по математике у меня твердая двойка. Я не понимаю многого. Но я понимаю, когда объясняют по-человечески.
Если ты что-то знаешь и готов посоветовать что-то дельное - посоветуй. Буду очень благодарен. Если нет - не отвечай лучше.
Будет ли в крупыче поддержка мультиязычности??? Хотя бы в меню... А то у меня есть друг буржуинский, так вот - трудно ему понять русское меню проги... Вот бы английский был... Нажал кнопку - англ, нажал другую - русский...Будет, будет :)
А можно в 7 круптаре вытащить текст без использования поинтеров? :) Или как это сделать в 6?
А можно в 7 круптаре вытащить текст без использования поинтеров? :) Или как это сделать в 6?Да можно конечно, даже в пятом можно было. Размер пойнтеров 0 поставить и всё.
Согласен с Володей +) Ибо ели-ели заметно... не удобно =) (хотя бы зеленым выделялось =))))))))))))) )Ты про что?
Саня, поздравляю с победой Круптара на конкурсе :ЪСпасибо :)
И ещё в древовидной структуре в самом левом окне добавить яркий цвет выделенному элементу, а то выберешь например фразу - а поинтер выбранный отображён сереньким цветом, не видно какой именно из списка выбран...
Группы
поинтеры
Лист1
00В560
00В562
00В564
00В566
Я вот об этих поинтерах, в левом окне древовидной структуры, да и вообще обо всех элементах...
В смысле цвет пропадает с потерей фокуса, а надо чтобы он оставался...
Я вот об этих поинтерах, в левом окне древовидной структуры, да и вообще обо всех элементах...Если хочется узнать какому пойнтеру принадлежит определённая строчка, нужно просто нажать на эту строчку двойным щелчком мышки и пойнтер выделится в дереве.
В смысле цвет пропадает с потерей фокуса, а надо чтобы он оставался...
Kruptar 7 allows extracting and editing text resources of almost any format,
including dictionary compression schemes (DTE, MTE). Text data compressed by
any other algorithm can be extracted into clear and easy to edit plain text,
but this process requires plug-in creation, which supposes you can code Object
Pascal dlls. For the user's convenience multiple groups of text blocks can be
created during extraction process. Each block can have different text data
formats, encoding tables and pointers formats, which allows storing all your
text in one project file. Kruptar 7 has convenient editing environment: tabs,
text visualization, and functional search, ability to work with different
encodings: SHIFT-JIS, UTF-16, etc. All these editing functions makes Kruptar a
lot better replacement for your notepad. But you can extract text into simple
*.txt file anytime: Kruptar 7 project file (*.kpx) is a simple ZIP archive,
which also contains encoding tables (*.tbl) and plain text files (*.txt)
inside. Kruptar 7 is notable for an excellent pointer usage. Of course all
pointers are recalculated automatically during text insertion and text strings
are inserted optimally into given space. The Kruptar's flexible system which
works with pointers also needs to be pointed out: almost all possible pointer
formats are implemented here. Text insertion is a one click business and it is
committed pretty fast (the process is constantly optimizing from version to
version). That allows you to view the result instantly. Unfortunately main
disadvantage of Kruptar 7 is lack of full and detailed documentation in
English.
4. Кратность.Адрес строки кратен введённому значению. Если 2, то $1C00, $1C02, $1C04... Если 4, то $1C00, $1C04, $1C08
При пересчёте, каждый пойнтер будет кратным одному из выбранных значений (1, 2, 4, Крутой. Кратность на 2, 4 и 8 используется только в некоторых играх для GBA.
(Можно поподробнее? Улыбка)
8. Signed.На любых.
Пойнтеры типа signed int (c++) или integer (pascal/delphi),
то есть они могут указывать как вперёд от начала отсчёта, так и назад.
(На каких платформах это используется?)
На любых.А в случае игры Decap Attack? Как они вообще различаются?
вот только я не могу понять как работать ейА вот тут надо искать проблемы не в отсутствии инструкции, а кое в чём другом...
Или может быть это фича(или баг) Виндоўса?Именно так. Если такое беспокоит, то следует отключить поддержку возможности ввода текста справа налево.
Нужно писать адрес (адреса) начала и конца блока в роме, в который будет вставляться текст. Например 16000-17FFFПод началом и кончом ты конкретно что имеешь ввиду?
и еще - интервал между поинтерами составляет 10 позиций(но ведь в каждой по два байта), значит мне надо писать 10 или 20?Интервал считается в байтах, то есть 20.
конечный адресс - вот сюда что писать надо?Адрес последнего пойнтера.
Не удивляйтесь что у меня так много вопросов. Просто проект я давно составил и поинтеры нашел, но текст в результате не появляется. Без помощи мне никак не обойтись.Чему тут удивляться, ты не первый.
значит пиасть надо так - 000у569-000а14у или так e569000-f14e000Первое.
какой пункт указывает кратность?ptMultiply
что означает ptAlignОно вроде должно быть равно 2, если кодировка двухбайтовая.
При пересчёте, каждый пойнтер будет кратным одному из выбранных значений (1, 2, 4, 8). Кратность на 2, 4 и 8 используется только в некоторых играх для GBA.
Цитата: Cool-Spot от 15 Июнь 2010, 07:32:52
4. Кратность.
При пересчёте, каждый пойнтер будет кратным одному из выбранных значений (1, 2, 4, Крутой. Кратность на 2, 4 и 8 используется только в некоторых играх для GBA.
(Можно поподробнее? Улыбка)
Адрес строки кратен введённому значению. Если 2, то $1C00, $1C02, $1C04... Если 4, то $1C00, $1C04, $1C08
Джинни а как узнать что в роме есть еще место для перевода?Вопрос видимо остался незамеченным LOL
Джинни а как узнать что в роме есть еще место для перевода?Открыть ром и поискать свободное место глазками.
1) В ptStringLength нужно 0, а не 1024.Как так? FF ведь здесь стоп-байт, а про то что код разрыва строки может быть не один я не знал.
2) Код окончания строки - FF, а не 01.
3) Коды разрыва строки: 00, 01
Логично, только как должно выглядеть это место? Я же говорю, после текста там много места с FF, это оно?Джинни а как узнать что в роме есть еще место для перевода?Открыть ром и поискать свободное место глазками.
а про то что код разрыва строки может быть не один я не знал.Один из концов строки может быть просто переходом на следующую строку, а другой, например, переводить на новую "страницу". Кстати, концов текста тоже может быть несколько.
Я же говорю, после текста там много места с FF, это оно?Ну а ты как думаешь?
Oraculum а у тебя текст появился?Да. Правой кнопкой мыши щёлкаешь на список поинтеров (List1) -> "Добавить поинтеры...", начальный адрес вводишь hE519, конечный - hE567.
а откуда ты эти адреса взял?Не задавай глупых вопросов :)
а откуда ты эти адреса взял?По картам нагадал. *F_LOL*
И таблицу нужно правильно составлять, не использовать + вместо пробела.А какая разница?
Ничего не делать, это только отображение.Однако на результат перевода влияет.
Однако на результат перевода влияет.Это как, например? :)
Ответ #108 : 18 Декабрь 2010, 12:47:05
Однако на результат перевода влияет.Влияют другие настройки. И неправильно составленная таблица, возможно.
Кстати, а что означает значение 0x27?Это у тебя надо спрашивать :) В разных играх одни и те же коды выводят разные вещи. Вообще это может быть чем угодно: символом, словом, иконкой персонажа, переносом строки, паузой, изменением цвета текста и т.д. и т.п.
Это у тебя надо спрашиватьА он тут при чём? :) Это у Toledo надо спрашивать. Никита и сам в хакинге разбирается неплохо. :)
лично для меня в круптаре всё правильно
Не ну я что слепой по вашему - в таблице черным по белому написано (в обоих таблицах) - 26-'У тебя в таблице чёрным по белому так написано, потому что её составлял ты (или какой-то другой человек).
SNES Lo-ROM.Это как? %)
В новой версии реализован формат пойнтеров SNES Lo-ROM.Лучше бы новая версия документации была :P
Это как? СумасшедшийROM'ы SNES бывают Lo-ROM и Hi-ROM.
А не проще было с LongWord сделать?Ты о чём? Я просто формулу объясняю.
LoROMptr.Lo - это младший word пойнтераЯ так понял, что поинтеры тут четырёхбайтовые, тогда проще работать с LongWord, чем с Word. Или тут старший и младший Word'ы расположены как-то необычно (в обратном порядке или вообще в разных частях рома)?
LoROMptr.Hi - старший word
Я так понял, что поинтеры тут четырёхбайтовые, тогда проще работать с LongWord, чем с Word.Не проще.
Если LoROMptr использовать без Lo и Hi, то будет так:Отдельно:
LoROMptr and $7FFF + (LoROMptr shr 16) shl 15;
Что удлиняет её.
Основная проблема - каждый раз нужно контролировать ширину строки.К этому советую привыкнуть.
К этому советую привыкнуть.Нууу... есть же блок загрузки таблиц? Таблица ширин по сути аналогичная была бы т.е.
00=0
01=4
...
39=10
3A=8
3B=8
...
FF=0
6 // число без указания байта задает ширину для всех не заданных в таблице символов
...
Были бы сорцы - допилил (все равно пока супруга переводит хакать особо нечего, заставку разве?). Но кто же мне их даст, мечты... Улыбка Или нет?Я могу их дать, но они на Delphi.
Я могу их дать, но они на Delphi.И они без комментариев - без вагона водки не разобраться :D
Я могу их дать, но они на Delphi.Знаком... хотя признаться Delphi - это самое малоизученное для меня. Отправь пожалуйста на insideone #собака# rambler #точка# ru ... Метки мне тоже попытаться сделать или не стоит так глубоко зарываться? (:
И они без комментариев - без вагона водки не разобраться :DВот к чему не привыкать - так это к коду без комментариев :) Ведь последние полтора года я работаю PHP-программистом
Вот к чему не привыкать - так это к коду без комментариев Улыбка Ведь последние полтора года я работаю PHP-программистомГде ж ты был, когда мы сайт писали? Столько добра пропало зря. >:(
Где ж ты был, когда мы сайт писали? Столько добра пропало зря.LOL Так надо будет - новое напишем, обращайся :)
Можно сломать так, что никакую дыру уже потом и не залатать.А бэкапы на что? :)
Ну и подсчет ширины строки - банальный цикл, разве сложно сделать? Улыбка
Кстати, TriсkZter, ты понял намёк? :)А чего тут понимать? Операция действительно элементарнейшая :)
Извините, вы длину строки обсуждаете? %)Нет, ширину... в пикселях. :)
Извините, вы длину строки обсуждаете?Хочу сделать подсчет ширины (в пикселях) результирующей строки чтобы не проверять каждый раз запуская ром.
К шрифтовому оформлению доп. и вспом. текста объемом более 2000 знаков в изданиях группы А СанПиН предъявляют требования, установленные для осн. текста этих изданий. При К. шрифта в них более 10 п. необходимо, чтобы минимальная длина строки была не менее 3 3/4 кв. (68 мм).
Длину строки определяют, измеряя линейкой одну полноформатную строку на каждой из 10 контролируемых страниц. Отклонение длины строки от установленного санитарными правилами допускается не более чем на 10%.
Вообще говоря, в типографике это называется "длиной строки" (line length) и измеряется в миллиметрах (пикселях, пунктах).Казалось бы, причём тут типография? :D
Речь идёт о графическом представлении текста, поэтому уместно использовать термины типографики ::)С типографическими терминами иди в другие разделы форума. В программировании (а мы сейчас обсуждаем именно его) это называется шириной. Длиной же называется количество символов в строке.
Где определена-то "ширина строки"? В справке VCL?В любой нормальной документации по программированию, в том числе и в VCL справке.
Речь идёт о графическом представлении текста, поэтому уместно использовать термины типографики Строит глазкиЕсть у тебя string length - количество символов в строке. И string width - ширина области в пикселях, которую занимает строка. Так что какие тут могут быть термины типографики?
А почему нельзя реализовать выдирание текста тупо по поинтерам? Каждый раз писать плагин, где стоп-байт участвует в кодах игры, - занятие весьма сомнительное...Что значит "тупо по поинтерам"? Как по-твоему круптар узнает, что строка закончилась? Если конец строки можно однозначно отличить от исполняемого кода, то круптар и так выдерет всё как надо. Если отличить невозможно, то без спецсредств (плагина или специальной проги) не обойтись.
Каждый раз писать плагин, где стоп-байт участвует в кодах игры, - занятие весьма сомнительное...Где ты этот "каждый раз" видел? Круптар умеет выдирать текст из 99.9% игр без всяких дополнительных плагинов.
Где ты этот "каждый раз" видел?
Что значит "тупо по поинтерам"? Как по-твоему круптар узнает, что строка закончилась? Если конец строки можно однозначно отличить от исполняемого кода, то круптар и так выдерет всё как надо. Если отличить невозможно, то без спецсредств (плагина или специальной проги) не обойтись.
В "Окарине" (стопбайт = 02):И из-за такой ерунды вы писали плагины? *facepalm* Это никакой не исполняемый код, а обычные спецсимволы. С ними круптар и так умеет корректно работать, надо просто перечислить их в таблице:
0E02=[fade:02] (один из параметров времени отображения плашки с текстом, если не ошибаюсь)
1302=[icon_3] - пиктограмма одного из предметов при его получении.
1E02=[score_2] - количество очков в одной из мини-игр
Так поинтеры для того и нужны, чтобы указывать длину строки. Вот по этой длине текст и выдирать. Считываем первый поинтер и последующий - получаем длину строки, ну и пошло-поехало :)Поинтеры нужны для определения начала строки, определять конец по ним зачастую невозможно.
Так поинтеры для того и нужны, чтобы указывать длину строкиПойнтеры нужны для того, чтобы указывать на то, где строка находится. Длину строки обычно не указывают, а если указывают, то отдельным значением рядом со строкой или рядом с пойнтером.
Вот по этой длине текст и выдирать. Считываем первый поинтер и последующий - получаем длину строки, ну и пошло-поехало УлыбкаПойнтеры очень часто не идут по порядку. Редко можно вычислить длину строки таким образом.
С ними круптар и так умеет корректно работать, надо просто перечислить их в таблице:Когда стандартные плагины круптара встречают стопбайт, считывание останавливается, даже если этот байт находится в одном из контрольных кодов.
0E02=[fade:02]
1302=[icon_3]
1E02=[score_2]
Если так сделать, он не будет считать их стоп-байтами.
В других играх так же можно обойтись составлением нормальной таблицы.
Примерно так:
1A06=<Сolor>
FF000004=<$Yellow>
FF000006=<$Purple>
FF000007=<$Silver>
В круптаре извлечение идёт отдельно, быстрым циклом плагина, а декодирование по таблице - отдельно, внутри программы.Понятно, значит такая фишка не прокатит. *F_DISAPPOINTED*
Просто плагины в круптаре предназначены именно для извлечения/декомпрессии строк, чтобы потом их можно было декодировать любой таблицей в самой программе.Понятно. А можно сделать плагин с настраиваемым списком исключений? Чтобы он пропускал стоп-байты, которые являются частью комбинаций, входящих в чёрный список? Такой плагин на корню решил бы проблему.
Это не код.Зато листать меньше и скопировать текст удобнее. :P
Зато листать меньше и скопировать текст удобнее. :PНеудобно, хочется как-то на весь экран это растянуть.
Неудобно, хочется как-то на весь экран это растянуть.Тогда не используй код. Делов-то.
Тогда не используй код. Делов-то.Для большого количества некодового текста неудобно, я про это.
То потом каким кодом удут символы?Зачем нужно, чтобы они дальше шли?
Джинни, а можно в крупыче относительные поинтеры подключать? Просвяти как. Поинтеры двухбайтные, пример из рома:Хоть я и не Джинни. Если ты имеешь в виду поинтеры, которые отсчитывают адрес от себя, то есть свойство ptAutoPtrStart, если имеешь в виду что-то другое, поясни.
/28/22ФРАЗА1/FE /44/22ФРАЗА2/FE /A5/22ФРАЗА3/FE
Адрес отсчитывается от самой первой буквы первого слова в блоке с текстом...Ну так в ptReference написать число, которое является (адрес "самой первой буквы первого слова в блоке с текстом") минус (значение поинтера).
Джинни, а можно в крупыче относительные поинтеры подключать? Просвяти как. Поинтеры двухбайтные, пример из рома:Относительные пойнтеры можно было подключать с самой первой версии программы. Что точно ты имеешь в виду, мне неизвестно. Пример непонятный.
/28/22ФРАЗА1/FE /44/22ФРАЗА2/FE /A5/22ФРАЗА3/FE
И еще слабо видно выделенный объект, былоб неплохо поменять цвет, чтоб бросался в глаза, а то приходится приглядоватся.Цвет выделения меняется в свойствах оформления windows.
Почти первый раз работаю с круптаром.Что мешает переконвертировать в BIN и работать с нормальным ромом?
1) Написал плагин для расжатия текстовых строк и перекодировки, подключил.
2) Строки разбросаны по всему рому (SMD). Поэтому о таблице указателей говорить не приходится. Адрес строки передается в регистр напрямую. Поэтому пока поставил все по нулям;
3) Как теперь добавить данную строку в проект?
Я с ним и работаю. Но строки пожаты.Не в один же блок сжаты. Добавляешь поинтеры по отдельности, удобнее всего загружать список поинтеров из файла (правой кнопкой на List).
Ууу... А я про что?) Вопрос мой прочитай: как добавить отдельно строку (поинтер)? Если можно - в картинках.Написал непонятно - сам виноват. :P
Oraculum, >:D Какие поинтеры? Какие адреса указывать? Какие параметры на группу и т.д.? Конкретики, плиз.Пойнтеры найди сначала все в роме, сформируй их список в текстовом файле, потом используй в круптаре.
А указатель, получается, будет на то место, где он передается в регистр?Указатель будет на строку (=адресу строки), в хекс-редакторе код глянешь и увидишь свои указатели. Запишешь адреса всех указателей в файл и загрузишь в Круптар.
ptPointerSize = 4 вероятнее всегоДобавлю:
ptBIG_ENDIAN = true
Вопросов больше нет.( Я вроде написал, что работаю считай первый раз в круптаре, а вы мне пишете, как уже умеющему работать. Отсутствие справки и старая статья знаний не прибавляют.Да писать надо понятно, что тебе конкретно надо, блин.
Почему двухбайтные ты мне говоришь?Бывают 4-байтные, бывают 2-байтые.
Я пытаюсь добавить диапазон поинтеров тех, которые есть в одной таблице. ЖмуЕсли пишешь в хексе, то вроде надо h
1) Добавить поинтеры в созданной группе. Вылезает окошко начального и конечного адреса. Пытаюсь вводить в хексе - пишет, что неправильное десятичное значение. Пытаюсь в дек - вылетает.
With Result^.Add^ do
begin
P := Addr(ROM^[X]);
B := ROM^[X]; //B - Byte
If (X >= RomSize) or (X < 0) then Exit;
Test des fonctions
sous contr?le/00
{END}
/00/00
{END}
/00/00
{END}
/00/00
{END}
/00Checking control
functions/00
{END}
/00/00
{END}
/00Selbsttest
laufend/00
{END}
/00Checking control
functions/00
54 00 65 00 73 00 74 00 20 00 64 00 65 00 73 00
20 00 66 00 6F 00 6E 00 63 00 74 00 69 00 6F 00
6E 00 73 00 0D 00 73 00 6F 00 75 00 73 00 20 00
63 00 6F 00 6E 00 74 00 72 00 F4 00 6C 00 65 00
00 00 00 00 00 00 00 00 43 00 68 00 65 00 63 00
6B 00 69 00 6E 00 67 00 20 00 63 00 6F 00 6E 00
74 00 72 00 6F 00 6C 00 0D 00 66 00 75 00 6E 00
63 00 74 00 69 00 6F 00 6E 00 73 00 00 00 00 00
53 00 65 00 6C 00 62 00 73 00 74 00 74 00 65 00
73 00 74 00 0D 00 6C 00 61 00 75 00 66 00 65 00
6E 00 64 00 00 00 00 00
destructor TTextStrings.Done;
var
N: PTextString;
begin
while Root <> NIL do
begin
N := Root^.Next;
Root^.Str := '';
Dispose(Root);
Root := N;
end;
Count := 0;
Cur := NIL;
end;
The "Invalid pointer operation" exception only occurs when a module attempts to free the last allocated block of another module's free list, and, failing to recognize an invalid element, attempts to merge the free block with (what seems to be) a marker element (or might simply be garbage), which causes the error.
From the above notes it should be clear that the new memory manager is less tolerant of heap corruption bugs caused by the application. The upside to this is that this should make it easier to catch bugs during the development cycle. The downside being that it could make life more frustrating for customers having to use an application containing such bugs.Можно старый менеджер памяти попробовать, если не хочется возиться с поиском возможного бага ::)
The old memory manager that was used by Delphi 2005 (and earlier Delphi versions) is available on CodeCentral in the form of a replacement memory manager module. This module may be useful in comparing the performance of the old and new memory managers, and can also be used in cases where the behaviour of the old memory manager is desired above the behavior of the new one.
Сложности с написанием плагина? Блин я бы помог если бы хоть немного шарил((После более внимательного прочтения поста Оракулума мне кажется, что сложности с миграцией на новую версию ;)
From the above notes it should be clear that the new memory manager is less tolerant of heap corruption bugs caused by the application.Склоняюсь более к этому, т.к.
Поменял из интереса "Root <> NIL" на "Root^.Next <> NIL", ошибка не выскакивает, но, естественно, утекает память.
Можно старый менеджер памяти попробовать, если не хочется возиться с поиском возможного бага ::)Не хочу возиться с пробованием старого менеджера. :D
PTextStrings = ^TTextStrings;
TTextStrings = object
Root, Cur: PTextString;
Count: LongInt;
constructor Init;
function Add: PTextString;
function Get(I: LongInt): PTextString;
destructor Done;
end;
constructor TTextStrings.Init;
begin
Root := NIL;
Cur := NIL;
Count := 0;
end;
function TTextStrings.Add: PTextString;
begin
New(Result);
If Root = NIL then Root := Result Else Cur^.Next := Result;
Cur := Result;
Inc(Count);
Result^.Str := '';
Result^.Next := NIL;
end;
destructor TTextStrings.Done;
var
N: PTextString;
begin
while Root <> NIL do
begin
N := Root^.Next;
Root^.Str := '';
Dispose(Root);
Root := N;
end;
Count := 0;
Cur := NIL;
end;
любого плагинаИ сам Круптар, и стандартные плагины написаны Джинни. Тугодум я ;D
Дружно проверяем код на возможные ошибкиА ошибка точно локализована там? Может, она в исходниках Круптара, которые всем подряд не дают :P
Я и не писал, что она там. Я написал: "Дружно проверяем код на возможные ошибки".Дружно проверяем код на возможные ошибкиА ошибка точно локализована там? Может, она в исходниках Круптара, которые всем подряд не дают :P
Может, проблема в том, что делается Dispose конечного элемента в тот момент, когда на него ещё указывает Cur? Может, так делать запретили, чтобы было меньше ошибок?Не помогло.
А ты и Круптар пересобирал в новой версии или только плагины? :)Исходников Круптара у меня нет. Только плагин NULL и переписанный мной под FM3 плагин NULL.
Не он вроде не умеет писать плагины. Хотя я могу сильно ошибаться, но он редко появляется, а какой хакер)))Ну, библиотеку на Delphi Трикстер в состоянии написать, полагаю. Именно Круптар он, может, и не разбирал :)
Change behaviour: statusbar reports the number of selected characters instead of number of bytes now.