Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

Аватар пользователя DRVTiny

Помните этот замечательный файловый менеджер от Леонида Храмова из наукограда Дубны? XNC - это файловый менеджер в стиле бессмертного Norton Commander'а и по совместительству - настоящая российская атомная субмарина ("фирменный" символ XNC), напичканная передовыми технологиями: шикарным встроенным редактором с подсветкой синтаксиса, промотрщиком изображений (также встроенным), способностью изменять внешний вид практически до неузнаваемости, удобными привязками приложений к MIME-типам - трудно назвать формат файла, который бы не сумел распознать XNC, - отличной поддержкой FTP и многое другое. И всё это в небольшом приложении, не требующем практически никаких библиотек, кроме базового X-сервера и благодаря этому загружающемуся практически мгновенно! (кстати, когда у меня был ASPLinux 9, для управления файлами всех форматов и типоразмеров я пользовался только XNC и мне не нужно было ничего другого).
Но в 2004-м году разработка XNC заглохла, субмарина застряла в торосах Северного ледовитого океана...
Очень жаль, потому что XNC был не похож на другие программы аналогичного класса, имел яркие черты индивидуальности, отличающие "штучные" вещи российских программистов от западной продукции (Krusader, MC, Gnome Commander), ориентированной в первую очередь на "массовое потребление".
Я недавно задал вопрос о судьбе Северного Капитана его "отцу" - Леониду Храмову в письме, на которое Леонид очень быстро ответил, с великой радостью констатировав тот факт, что у его программы всё ещё есть поклонники и что, соответственно, его труды были не напрасны.
Вот, что пишет Леонид по поводу возможности дальшейшего развития XNC:

Цитата:
...ситуация такова, что на разработку просто не хватает времени, я сейчас
работаю руководителем отдела разработки в одной софтверной компании, и
работы воз и маленькая тележка. После работы времени тоже нет, так как с
тех пор обзавелся семьей Улыбка
Мелкие доделки по xnc я бы мог потихоньку реализовывать (всякие там
хотелки пользователей, небольшие улучшения и т.д.), но к сожалению в xnc
назрел ряд кординальных изменений и эти изменения требуют большого
кол-во времени на реализацию, при этом конечно желательно не отвлекаться
на полмесяца на другие проблемы. Вот это-то меня все время и
останавливает от продолжения этого проекта. Ну и сами понимаете что чем
дольше я тяну, тем меньше шансов что-то сделать.
Из кардинальных изменений которые необходимы могу перечислить следующие:

- Переход на использование automake+libtool вместо autoconf для
построения makefiles.
- Переход на использование UTF-8/unicode внутри xnc для работы с разными
кодировками
- Переход на новый встроенный терминал (замена старого rxvt на urxvt)
- Замена библиотеки работы с ftp на поддерживающую работу через http-proxy.

И дальше:

Цитата:
Тем не менее, получая такие письма, я начинаю думать, что все таки стоит
пересилить себя и найти несколько ночей для переделки и выпуска нового
релиза.

Так что же, неужели мы позволим XNC сгинуть так же, как и многим другим замечательным OpenSource-приложениям, созданными талантливыми одиночками и загнувшимися из-за сугубо потребительского отношения к ним пользователей и отсутствия интереса со стороны других разработчиков?
Нет? Ну тогда я предлагаю следующее: давайте напишем коллективное обращение к Леониду Храмову, в котором выразим этому замечательному человеку свою моральную поддержку и предложим посильную помощь! Для того, чтобы, возможно, попытаться дать Леониду новый стимул для разработки, от вас не потребуется ничего эсктраординарного: нужно всего лишь сказать несколько добрых слов об XNC и подписаться под коллективным обращением с просьбой продолжить разработку программы.
И помните: большие свершения начинаются с малого!

Аватар пользователя Meloman

Инициатива: Поможем вытащить субмарину XNC изо льдов!

Я согласен.
Где ставить свою подпись? )

Аватар пользователя DRVTiny

Инициатива: Поможем вытащить субмарину XNC изо льдов!

Цитата:
Где ставить свою подпись? )

На коллективном обращении, которое мы по почте Леониду вышлем.
Только для этого согласных должно быть чуток побольше - хотя бы человек десять.

Аватар пользователя RedBeard

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

Присоединяюсь. В первую очередь надо добавить поддержку Юникода, а то со шрифтами русскими там беда под ASP! А так - отличный неприхотливый файл-менеджер. Наворотов не так много, как в Крузейдере, но функциональности вполне хватает, а грузится не в пример быстрее.

Аватар пользователя redd

Инициатива: Поможем вытащить субмарину XNC изо льдов!

Я тоже за!!! Впишите меня в нашу банду. Катается от смеха

Аватар пользователя DRVTiny

Инициатива: Поможем вытащить субмарину XNC изо льдов!

Отлично!
Осталось ещё человек 6 набрать Улыбка

Аватар пользователя Sewix

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

Не знаю на сколько письмо поможет, но я подпишусь. Отличный файловый менаджер.

Аватар пользователя DRVTiny

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

Вот, кстати, скриншот моего XNC:

Аватар пользователя vgololobov

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

DRVTiny писал(а):
Осталось ещё человек 6 набрать

День добрый!

Согласен с присутствующими, и готов, сколь смогу, поддержать.

С уважением, В.Гололобов

Аватар пользователя wusup

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

Как физически будет выглядеть эта подпись? Или достаточно ссылки на этот топик.
Мой голос за!

Аватар пользователя Dragon

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

Не поленился, скачал и поработал немного с версией 5.02 XNC. Очень неплохо. По сравнению с тем же Krusader, в первую очередь, конечно, радует скорость запуска и работы при немалом функционале. Приятно работать Улыбка! Еще вызвало любопытство, почему во всех меню пишется не "директория", а "директорий" Улыбка? В меню программы это выглядит как : "Операции" -> "Перечитать директорий". А так мне программа очень понравилась. Леонид, не бросайте все это на произвол судьбы!

Аватар пользователя DRVTiny

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

Re2VGololobov

Цитата:
Согласен с присутствующими, и готов, сколь смогу, поддержать.

Владимир, Вы - благороднейший человек, так что с моей стороны просто грешно было бы в Вас сомневаться:-)
Спасибо за поддержку!

Re2Dragon

Цитата:
Еще вызвало любопытство, почему во всех меню пишется не "директория", а "директорий"

Ну, собственно, у нас и по телевизору постоянно слово "таможенный" с ударением на предпоследнем слоге произносят. Вроде как профессиональный слэнг такой у таможенников (правда, сами себя они почему-то таможенниками не называют). Юристы произносят "эксперт" с ударением на первом слоге, а, например, южные торговцы на рынках все как один на полном серьёзе полагают, что слово "картошка" - мужского рода. Может, и у разработчиков файловых менеджеров есть такие специфические речевые особенности, свой собственный слэнговый вариант русского языка? Улыбка

Аватар пользователя DRVTiny

Инициатива: Поможем вытащить субмарину XNC изо льдов!

Цитата:
Или достаточно ссылки на этот топик.

Ну а как же ещё? - разумеется, просто ссылку дадим Улыбка

Аватар пользователя WebCode

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

Я за!!! Отличная штука, мне очень понравилась.

В первую очередь нужна поддержка UTF Улыбка.

Аватар пользователя redd

Инициатива: Поможем вытащить субмарину XNC изо льдов!

Да супер - наше лучшее, смотрю и народ подтягивается. Я вот раньше пользовался им, а потом как то плавно переехал на МС, а теперь ностальгия - вернулся к удобству и XNC занял свое лидируещее место по праву на моей системе. Менеджер супер так что вперед. Тем более после этого топика посоветовал другу, он посмотрел и сразу сменил МС на XNC.

Аватар пользователя ks

Инициатива: Поможем вытащить субмарину XNC изо льдов!

Готов подписаться, если не поздно. Приятная вещь.

Цитата:
Еще вызвало любопытство, почему во всех меню пишется не "директория", а "директорий"

Потому что "директория" - это буржуазное украинское правительство в 1918г Улыбка

Аватар пользователя VSL

Инициатива: Поможем вытащить субмарину XNC изо льдов!

Готов подписаться! Могу и электронную свою поставить!

Аватар пользователя DRVTiny

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

Сбор подписей завершается, спасибо (ОГРОМНОЕ) всем, кто в нём участвовал и поставил свою подпись за прекрасный файловый менеджер, созданный Леонидом Храмовым, талантливым российским программистом из Дубны.
Подписались:

1. Skala
2. RedBeard
3. Redd
4. Sewix
5. vgololobov
6. wusup
7. Dragon
8. WebCode
9. ks
10. VSL
11. KAS(таки не опоздал Улыбка )

От всего сердца: спасибо Вам, ребята!

P.S. Также хотелось бы выразить признательность всем, кто хотел бы подписаться, но не успел. Я уверен, что такие люди есть и их не мало.

Аватар пользователя KAS

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

Готовь поставить подпись! Я как раз на днях писал разработчику этой программ, вот его ответ:

Цитата:
К сожалению пока нет, я пытаюсь работать над этим...

*@mail.ru пишет:
> Здравствуйте!
> А есть для XNC русский язык в кодировке не KOI8-R, а в UTF-8?

--
Best regards,
Leo
Solvo Ltd.
St.Petersburg, Russia

Аватар пользователя DRVTiny

Инициатива: Поможем вытащить субмарину XNC изо льдов!

Цитата:
Тем более после этого топика посоветовал другу, он посмотрел и сразу сменил МС на XNC.

Аналогичная ситуация, но мой друг сменил Krusader на XNC. Его привлекла скорость работы XNC, в особенности потрясающе быстрый просмотр и распаковка архивов. Единственный замеченный глюк у той версии (0.5.2 из ASPLinux 9), которую он себе поставил - при двойном щелчке по RPM-файлам XNC без предупреждения завершает работу (падает). А так - друг очень рад новой жемчужине в своей постепенно разрастающейся коллекции программ под Linux, а я очень рад за друга Улыбка

Аватар пользователя Meloman

Инициатива: Поможем вытащить субмарину XNC изо льдов!

По-моему, уже пора писать Леониду Храмову - а то что-то топчемся на одном месте...

Аватар пользователя DRVTiny

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

Цитата:
По-моему, уже пора писать Леониду Храмову - а то что-то топчемся на одном месте...

Я уже написал ему вчера, 11-го сентября.
Текст письма (сокращены формальные части):

Цитата:
Недавно я организовал сбор подписей в поддержку X Northern Captain на форуме своего Клуба. Результат получился очень приятным для меня и, надеюсь, для Вас тоже: тема "Инициатива: Поможем вытащить субмарину XNC изо льдов!" постоянно занимала верхние строчки форума (он у нас всё-таки далеко не самый многочисленный), люди с благодарностью говорили о Вашей программе, некоторые высказывали замечания, кто-то даже написал мне по электронной почте по поводу того же, о чём несколько недель назад писал Вам я: "возможно ли помочь проекту финансовыми вливаниями?" Пришлось ответить, что это не тот случай, что у разработчика, т.е. у Вас, деньги, слава Богу, есть, но нет свободного времени для того, чтобы заниматься активной разработкой XNC. Многие говорили о необходимости улучшения совместимости XNC с различными кодировками, так что все признали необходимость скорейшего (по возможности) перевода программы на UTF-8.
Да, собственно, что я Вам рассказываю. Не для того же я собирал подписи, чтобы Вы, кому предназначался этот скромный знак признательности со стороны пользователей Капитана, не смогли увидеть итогов нашего... общественного обсуждения Улыбка ? В связи с этим большая к Вам просьба, Леонид: пожалуйста, загляните к нам в Клуб на страницу сбора подписей в поддержку Северного Капитана, т.е. сюда: http://asplinux.net/node/2494
Я сегодня подвёл итоги голосования (правда, оказалось, что немного поторопился: буквально за последние полчаса подписался человек, который у Вас по поводу кодировок что-то спрашивал), поэтому даже если Вы уже у нас были, на всякий случай загляните ещё раз ;-)
Аватар пользователя lkanter

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

DRVTiny писал(а):
Многие говорили о необходимости улучшения совместимости XNC с различными кодировками, так что все признали необходимость скорейшего (по возможности) перевода программы на UTF-8.

Есть очень высокая вероятность того, что в следующей версии asplinux из русских кодировок будет поддерживаться _только_ UTF-8.

Аватар пользователя lkanter

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

DRVTiny писал(а):
Может, и у разработчиков файловых менеджеров есть такие специфические речевые особенности, свой собственный слэнговый вариант русского языка? Улыбка

Тем не менее, я бы слово "директорий" детям не показывал. Особенно если учесть, что "directory" везде однозначно переводится как "каталог".

Аватар пользователя DRVTiny

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

Цитата:
Есть очень высокая вероятность того, что в следующей версии asplinux из русских кодировок будет поддерживаться _только_ UTF-8.

Очень сомнительное решение, тем более, что Windows Vista, насколько я понимаю, эту разновидность уникода aka UTF-8 использовать не будет.

Аватар пользователя DRVTiny

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

Сегодня получил доложданное письмо-ответ от Леонида Храмова, которое он просил опубликовать у нас на форуме. Выполняю его просьбу с превеликим удовольствием и прошу всех, кто не остался равнодушным к судьбе Северного Капитана, высказать своё мнение по поводу нижеизложеного (приводится без сокращений):
Леонид Храмов

Цитата:
Прочел Ваше письмо и форум на asplinux, очень приятно слышать, что есть
еще люди в России пользующиеся моей маленькой программкой.

Первое что хочу сказать, это дать небольшое раъяснение:
- Я сам родом из Санкт-Петербурга, родился и собственно здесь до сих пор
и живу. Город у нас не очень теплый - отсюда и любовь к снегу, льдам и
прочим заморозкам Улыбка
- Так сложилась жизнь, что в Дубне (городок под Москвой), мне удалось в
далеком 1996 году обзавестись бесплатным хостингом для моего сайта
(спасибо родному брату), поэтому и кажется что все растет оттуда, на
самом деле там только сервер Улыбка

Теперь, несколько слов о грамотности руссификации. К сожалению я сам
никогда не считал себя знатаком русского языка, хотя это мой родной язык
, все больше изучал C++, Java а до русского как-то не доходило Улыбка
Руссифицировать пришлось самому, так как на брошенный мною кличь
откликнулись пользователи xnc из Германии, Чехии, Испании, Дании, Кореи
и др стран, а вот наши почему-то как обычно тихо промолчали в тряпочку.
Так что получилось так как есть.

Вообще хочу сказать, что у меня при выходе из xnc пишется просьба
послать мне письмо в знак благодарности, если программа понравилась.
Так вот с 1997 года я получил огромное кол-во писем из разных концов
света (некоторые названия я даже и не слышал), а вот из России их было
менее 1%. Узнавал о том что люди пользуются в России только когда
присылали вопросы. А вроде бы я не денег или открытку просил, а просто
электронное письмо с указанием страны и города, ан нет, для русского
пользователя это и то непомерно сложная задача.
Честно говоря я даже долгое время не хотел делать локализацию на
русский, так как сам я неплохо владею английским и всегда предпочитаю в
софте использовать именно его. Если бы не один очень хороший знакомый,
который с английским плохо дружил, то я бы вообще пальцем не пошевелил.

Ладно, прошу прощения за столь длинную тираду, просто как было сказано в
одном замечательном фильме "Мне за державу обидно..." - вроде и люди
нормальные и толковые и все, но вот что-то в нас сломали...

Теперь по существу:

Благодаря Вашему воздействию Улыбка а так же еще двум письмам полученным
практически в этоже время но из-за бугра с аналогичными просьбами, я
решил продолжить работы по xnc и начал разбираться с переводом на
unicode (в частности на UTF-8).
Только хочу сразу сказать, что быстрых результатов ждать не стоит, в
зависмотси от того как пойдет, но думаю что до нового года ничего
толкового не появится.
Вторая проблема помимо времени, это проблема тестирования софта - это
проблема всех открытых проектов - нужны люди которые смогут тестировать
у себя программу и терпеливо сообщать о багах и проводить диагностику
для их выявления. Вот с этим может быть Вы господа пользователи и
сможете мне помочь - но это уже после того как будет готов первый релиз
с unicode.

Спасибо за Ваше участие,
Храмов Леонид,
Санкт-Петербург, 2006

P.S: Опубликуйте пожалуйста мой ответ на Вашем форуме, что его увидели
все желающие. Спасибо.

Аватар пользователя Meloman

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

Цитата:
Вторая проблема помимо времени, это проблема тестирования софта - это
проблема всех открытых проектов - нужны люди которые смогут тестировать
у себя программу и терпеливо сообщать о багах и проводить диагностику
для их выявления. Вот с этим может быть Вы господа пользователи и
сможете мне помочь - но это уже после того как будет готов первый релиз
с unicode.

С удовольствием буду тестировать.

Аватар пользователя RedBeard

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

DRVTiny писал(а):
Вот, кстати, скриншот моего XNC:

Как добился русского шрифта нормального? Или у тебя не UTF? У меня вот, только по-аглицки получается, а на русском - кракозябры в менюшках!

Аватар пользователя DRVTiny

Инициатива: Поможем вытащить субмарину XNC изо льдов!

Цитата:
Как добился русского шрифта нормального?

У меня сейчас стоит сборка от ASPLinux 9, которая с кодировками неплохо дружит. Впрочем, под локалью UTF-8 я XNC запускать действительно не пробовал.

Аватар пользователя Dragon

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

Meloman писал(а):
Цитата:

Вторая проблема помимо времени, это проблема тестирования софта - это
проблема всех открытых проектов - нужны люди которые смогут тестировать
у себя программу и терпеливо сообщать о багах и проводить диагностику
для их выявления....
С удовольствием буду тестировать.

Есть предложение создать в разделе "Файлы" подраздел "Тестирование" и туда выкладывать программы, которые необходимо "хорошенько пощупать". Мне кажется, что это будет полезно. И ссылку на это хранилище на дружественных ресурсах разместить. Кто хочет - связывается с модераторами сайта и те размещают программу. Желательно с небольшим описанием функционала. Там же можно указать аспекты, на которые при тестировании необходимо обратить особое внимание. Как вам предложение Улыбка?

Аватар пользователя vgololobov

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

DRVTiny писал(а):
Есть предложение создать в разделе "Файлы" подраздел "Тестирование" и туда выкладывать программы, которые необходимо "хорошенько пощупать".

День добрый всем!
Это правильно.

А в части статистики интереса к программе, то ее следует соотносить со многими факторами: доступностью Интернета в России (и финансовой, и физической), распространенностью Linux'а, "потоплением Титаника-Интернета" в рекламе, что очень заметно в последние 10 лет и т. д., и т. п. На это стоит обращать внимание только в плане санитарной борьбы с явлением - создания препаратов против вредных насекомых.

С уважением, В.Гололобов

Аватар пользователя Mimino

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

vgololobov писал(а):
Есть предложение создать в разделе "Файлы" подраздел "Тестирование" и туда выкладывать программы, которые необходимо "хорошенько пощупать".

Сделаем. Указывайте возможные расширения файлов, которые будут использоваться.

Аватар пользователя Dragon

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

Mimino писал(а):
Сделаем. Указывайте возможные расширения файлов, которые будут использоваться.

Имхо, для уменьшения трафика желательно бы дистрибутивы в архивах держать. Сильно желательно, чтобы это все делалось архиватором, работающим как в Винде, так и в Linux'e. Типа всем известных rar, zip, 7-zip....

Аватар пользователя RedBeard

Инициатива: Поможем вытащить субмарину XNC изо льдов!

Dragon писал(а):
Есть предложение создать в разделе "Файлы" подраздел "Тестирование" и туда выкладывать программы, которые необходимо "хорошенько пощупать". Мне кажется, что это будет полезно. И ссылку на это хранилище на дружественных ресурсах разместить. Кто хочет - связывается с модераторами сайта и те размещают программу. Желательно с небольшим описанием функционала. Там же можно указать аспекты, на которые при тестировании необходимо обратить особое внимание. Как вам предложение ?

Мысль в принципе, неплохая, но несколько не новая. Репозиторий development - это не то же самое?

Аватар пользователя RedBeard

Инициатива: Поможем вытащить субмарину XNC изо льдов!

Dragon писал(а):
Имхо, для уменьшения трафика желательно бы дистрибутивы в архивах держать. Сильно желательно, чтобы это все делалось архиватором, работающим как в Винде, так и в Linux'e. Типа всем известных rar, zip, 7-zip....

А на кой? Для сборки под Винды пусть будет Зип или РАР, а сюда - лучше уж старые проверенные ГЗ или БЗ2!

Аватар пользователя ks

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

Цитата:
Имхо, для уменьшения трафика желательно бы дистрибутивы в архивах держать. Сильно желательно, чтобы это все делалось архиватором, работающим как в Винде, так и в Linux'e. Типа всем известных rar, zip, 7-zip....

Ну так WinRAR и 7-zip умеют работать с gz и bz2.

Аватар пользователя DRVTiny

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

Традиционно в Linux используются так называемые тарболлы - архивы tar.gz и tar.bz2, так что не вижу смысла изобретать велосипед и паковать что бы то ни было rar'ом и уж тем более - 7-zip'ом. Это меньше проблем создаст пользователям, да и паковать tar-архивы на мой взгляд привычнее Улыбка

Аватар пользователя RedBeard

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

ks писал(а):
Ну так WinRAR и 7-zip умеют работать с gz и bz2.

Да и Linux'овый RAR есть.

Аватар пользователя zzsnn

Инициатива: Поможем вытащить субмарину XNC изо льдов!

Поддерживаю. На самомо деле очень хорошая разработка. И грузится очень быстро и наворотов достатаочно. Хочу одним словом. Очень хочу.

Аватар пользователя DRVTiny

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

Цитата:
Хочу одним словом. Очень хочу.

Ну так есть же исходные коды XNC в свободном доступе. Их можно модифицировать как угодно в соотв. с GPL. А Леонида Храмова теперь не отыскать, остыли его следы на песке, так же, как и домен dubna.su благополучно загнулся, писать теперь стало некуда, а сайт xnc.dubna.su погиб смертю храбрых, но остался в нашей вечной памяти. Вдохнуть новую жизнь в этот проект, к сожалению, смогут только энтузиасты, способные разобраться в дебрях чужого кода... Вот вам и прелести OpenSource, вот нам и Юрьев день Грустный

Аватар пользователя Pauli

Re: Инициатива: Поможем вытащить субмарину XNC изо льдов!

Да, дело полезное. Нужное. Интересное. Вплоть до включения в дистрибутив.

Аватар пользователя comm

Re: Инициатива: Поможем вытащить ...

злой хак. и панели начали понимать юникод. если шрифты правильные поставить то работает.
командная строка работает наполовину там сильно рефакторить надо. но идею я изложил.

diff -Naurw -x '*.o' -x makefile -x '*.a' xnc-5.0.4/src/bookmark.cxx xnc-5.0.4-patched/src/bookmark.cxx
--- xnc-5.0.4/src/bookmark.cxx 2002-12-19 17:09:31.000000000 +0300
+++ xnc-5.0.4-patched/src/bookmark.cxx 2011-05-31 02:05:52.348261810 +0400
@@ -754,11 +754,11 @@
// XSetForeground(disp,gcw,cols[0]);
XDrawLine(disp, w, gcw, 0, iy + page_h - 1, l - 6, iy + page_h - 1);
XDrawLine(disp, w, gcw, l - 5, iy + page_h - 2, l - 1, iy + page_h - 6);
- XDrawString(disp, w, gcw, l / 2, iy + 4 + fixfontstr->max_bounds.ascent, str, 1);
+ MyDrawString(disp, w, gcw, l / 2, iy + 4 + fixfontstr->max_bounds.ascent, str, 1);
if (page_h > ty + ty2 + 10)
{
XSetFont(disp, gcw, mfixfontstr->fid);
- XDrawString(disp, w, gcw, 3, iy + (page_h - 4 - ty) / 2 + ty + mfixfontstr->max_bounds.ascent, fs[n], 3);
+ MyDrawString(disp, w, gcw, 3, iy + (page_h - 4 - ty) / 2 + ty + mfixfontstr->max_bounds.ascent, fs[n], 3);
XSetFont(disp, gcw, fixfontstr->fid);
}
}
@@ -775,11 +775,11 @@
else
XCopyArea(disp, a2pix, w, gcw, 0, 0, a2_width, a2_height, 3, iy + 6);
XSetForeground(disp, gcw, window_text_color);
- XDrawString(disp, w, gcw, l / 2, iy + 3 + fixfontstr->max_bounds.ascent, str, 1);
+ MyDrawString(disp, w, gcw, l / 2, iy + 3 + fixfontstr->max_bounds.ascent, str, 1);
if (page_h > ty + ty2 + 10)
{
XSetFont(disp, gcw, mfixfontstr->fid);
- XDrawString(disp, w, gcw, 3, iy + ty + (page_h - 4 - ty) / 2 + mfixfontstr->max_bounds.ascent, fs[n], 3);
+ MyDrawString(disp, w, gcw, 3, iy + ty + (page_h - 4 - ty) / 2 + mfixfontstr->max_bounds.ascent, fs[n], 3);
XSetFont(disp, gcw, fixfontstr->fid);
}
XSetForeground(disp, gcw, light_bg_color);
diff -Naurw -x '*.o' -x makefile -x '*.a' xnc-5.0.4/src/cmdline.cxx xnc-5.0.4-patched/src/cmdline.cxx
--- xnc-5.0.4/src/cmdline.cxx 2002-11-29 17:24:52.000000000 +0300
+++ xnc-5.0.4-patched/src/cmdline.cxx 2011-05-31 02:57:53.702621432 +0400
@@ -44,7 +44,7 @@
strcat(name, "$");
else
strcat(name, "#");
- tl = strlen(name);
+ tl = Mystrlen( name ) ;////strlen(name);
if (hflg)
expose();
}
@@ -64,10 +64,10 @@
XSetForeground(disp, gcw, cols[col]);

gl.init(w, ExposureMask | ButtonPressMask);
- tl = strlen(name);
+ tl = Mystrlen(name);
ty = h/2 - (fixfontstr->max_bounds.ascent + fixfontstr->max_bounds.descent)/2 +
fixfontstr->max_bounds.ascent;
- ll = XTextWidth(fixfontstr, "MMMMMMMMMM",10)/10;
+ ll = MyTextWidth(fixfontstr, "MMMMMMMMMM",10)/10;
hflg = 0;

history_pixmap = XCreatePixmapFromBitmapData(disp, w, (char *)history_bits,
@@ -270,8 +270,8 @@
// XCopyArea(disp, history_pixmap, w, gcw, 0, 0, history_width, history_height,
// delta_x/2 - history_width/2, h/2 - history_height/2);
XSetForeground(disp, gcw, cols[col]);
- XDrawString(disp, w, gcw, text_x, ty, name, tl);
- tw = XTextWidth(fixfontstr, name, tl) + text_border;
+ MyDrawString(disp, w, gcw, text_x, ty, name, tl);
+ tw = MyTextWidth(fixfontstr, name, tl) + text_border;
cmd_text_x=text_x+tw;
visl = (l - cmd_text_x - text_border*2) / ll - 1;

@@ -310,18 +310,22 @@
if(ptr->store[0])
{
strcpy(buf, ptr->store);
- bl=strlen(buf);
+ bl=Mystrlen(buf);
cp=ptr->store_cp;
base=ptr->store_base;
tt_write((unsigned char*)buf, bl);
}
}

+
void Cmdline::insert(char ch)
{
int i;
- for (i = (int)bl; i >= cp+base; i--)
+
+ for (i = (int)bl; i >= cp+base; i--){
buf[i + 1] = buf[i];
+ }
+
buf[cp+base] = ch;
cp++;
if(cp>visl)
@@ -329,6 +333,8 @@
cp--;
base++;
}
+
+
bl++;
xncdprintf(("Cmdline::insert - %d/%d %d/%d\n",base,cp,visl,el));
showbuf();
@@ -406,7 +412,7 @@
tt_printf("%c", 8);

strcpy(buf, bak[idx]);
- bl = cp = strlen(buf);
+ bl = cp = Mystrlen(buf);
if(bl>visl)
base=bl-visl-1;
else
@@ -463,7 +469,7 @@
if (bbp > max_cmd_history-1)
bbp = 0;
strcpy(buf, bak[bbp]);
- bl = cp = strlen(buf);
+ bl = cp = Mystrlen(buf);
if(bl>visl)
base=bl-visl-1;
else
@@ -482,7 +488,7 @@
if (bbp < 0)
bbp = max_cmd_history-1;
strcpy(buf, bak[bbp]);
- bl = strlen(buf);
+ bl = Mystrlen(buf);
tt_write((unsigned char*)buf, bl);
if(bl>visl)
base=bl-visl-1;
@@ -513,8 +519,12 @@
{
XClearArea(disp, w, cmd_text_x, 1, l - cmd_text_x - 1, h-2, 0);
XSetForeground(disp, gcw, cols[col]);
- XDrawString(disp, w, gcw, cmd_text_x, ty, buf+base, bl-base);
- XDrawRectangle(disp, w, gcw, cmd_text_x + cp * ll, 1, ll, h-3);
+ MyDrawString(disp, w, gcw, cmd_text_x, ty, buf+base, bl-base);
+
+ int cursor_offset = MyTextWidth(fixfontstr ,buf, cp );
+// XDrawRectangle(disp, w, gcw, cmd_text_x + cp * ll, 1, ll, h-3);
+ XDrawRectangle(disp, w, gcw, cmd_text_x + cursor_offset, 1, ll, h-3);
+
}

void Cmdline::click()
diff -Naurw -x '*.o' -x makefile -x '*.a' xnc-5.0.4/src/include/build.h xnc-5.0.4-patched/src/include/build.h
--- xnc-5.0.4/src/include/build.h 2011-05-31 03:15:37.324107011 +0400
+++ xnc-5.0.4-patched/src/include/build.h 2011-05-31 01:52:00.977100624 +0400
@@ -1 +1 @@
-char build_chr[]= " 7874 ";
+char build_chr[]= " 7883 ";
diff -Naurw -x '*.o' -x makefile -x '*.a' xnc-5.0.4/src/include/comp.h xnc-5.0.4-patched/src/include/comp.h
--- xnc-5.0.4/src/include/comp.h 2011-05-31 03:15:37.314106983 +0400
+++ xnc-5.0.4-patched/src/include/comp.h 2011-05-31 01:52:00.967100607 +0400
@@ -1 +1 @@
-char compiled[]="Tue May 31 03:15:37 MSD 2011 by comm@spacebase Linux 2.6.38-8-generic 2011";
+char compiled[]="Tue May 31 01:52:00 MSD 2011 by comm@spacebase Linux 2.6.38-8-generic 2011";
diff -Naurw -x '*.o' -x makefile -x '*.a' xnc-5.0.4/src/include/config.h xnc-5.0.4-patched/src/include/config.h
--- xnc-5.0.4/src/include/config.h 2011-05-31 03:15:32.604100412 +0400
+++ xnc-5.0.4-patched/src/include/config.h 2011-05-31 00:38:32.240942902 +0400
@@ -352,3 +352,4 @@
/* Define if the GNU dcgettext() function is already present or preinstalled. */
#define HAVE_DCGETTEXT 1

+#include
\ В конце файла нет новой строки
diff -Naurw -x '*.o' -x makefile -x '*.a' xnc-5.0.4/src/include/xnc/panel.h xnc-5.0.4-patched/src/include/xnc/panel.h
--- xnc-5.0.4/src/include/xnc/panel.h 2003-12-25 16:27:30.000000000 +0300
+++ xnc-5.0.4-patched/src/include/xnc/panel.h 2011-05-31 02:31:26.770404949 +0400
@@ -473,9 +473,16 @@

extern void simple_flist_add(FList *base, FList* it);

-#include "commonfuncs.h"
+int MyDrawString(Display *display, Drawable d, GC gc, int x, int y, const char *string, int length);
+int MyTextWidth(XFontStruct *font_struct, const char *string, int count);
+size_t Mystrlen( const char *string );
+
+

+#include "commonfuncs.h"
//////////////////////////////////////////////////End of file/////////////////////////////////////////////
+
+
#endif

/* ------------ End of file -------------- */
diff -Naurw -x '*.o' -x makefile -x '*.a' xnc-5.0.4/src/include/xnc/panel_x.h xnc-5.0.4-patched/src/include/xnc/panel_x.h
--- xnc-5.0.4/src/include/xnc/panel_x.h 2002-07-08 19:21:52.000000000 +0400
+++ xnc-5.0.4-patched/src/include/xnc/panel_x.h 2011-05-31 00:51:19.182014096 +0400
@@ -7,6 +7,8 @@
extern int panelpixh[];

+int MyDrawString(Display *display, Drawable d, GC gc, int x, int y, char *string, int length);
+
#endif
/* ------------ End of file -------------- */

diff -Naurw -x '*.o' -x makefile -x '*.a' xnc-5.0.4/src/infowin.cxx xnc-5.0.4-patched/src/infowin.cxx
--- xnc-5.0.4/src/infowin.cxx 2002-07-08 19:21:52.000000000 +0400
+++ xnc-5.0.4-patched/src/infowin.cxx 2011-05-31 01:51:43.517076242 +0400
@@ -93,14 +93,14 @@
XFillRectangle(disp, w, gcw, 8, 30, l-16, 30);
XSetForeground(disp, gcw, cols[1]);
textl=strlen(message);
- XDrawString(disp, w, gcw, l / 2 - XTextWidth(fontstr, message, textl) / 2, 45, message, textl);
+ MyDrawString(disp, w, gcw, l / 2 - MyTextWidth(fontstr, message, textl) / 2, 45, message, textl);
expose_counter();
} else
{
XFillRectangle(disp, w, gcw, 8, 40, l-16, 30);
XSetForeground(disp, gcw, cols[1]);
textl=strlen(message);
- XDrawString(disp, w, gcw, l / 2 - XTextWidth(fontstr, message, textl) / 2, need_key ? 45 : 55, message, textl);
+ MyDrawString(disp, w, gcw, l / 2 - MyTextWidth(fontstr, message, textl) / 2, need_key ? 45 : 55, message, textl);
}
}
}
diff -Naurw -x '*.o' -x makefile -x '*.a' xnc-5.0.4/src/inodewin.cxx xnc-5.0.4-patched/src/inodewin.cxx
--- xnc-5.0.4/src/inodewin.cxx 2002-08-05 14:43:00.000000000 +0400
+++ xnc-5.0.4-patched/src/inodewin.cxx 2011-05-31 01:50:45.236994836 +0400
@@ -69,12 +69,12 @@
l=i;
if(iget_exwin_foreground());
dig2ascii2(buf, cur_i.st.st_dev);
- XDrawString(disp, win, gcw, 20+maxtx, 20, buf, strlen(buf));
+ MyDrawString(disp, win, gcw, 20+maxtx, 20, buf, strlen(buf));
dig2ascii2(buf, cur_i.st.st_ino);
- XDrawString(disp, win, gcw, 20+maxtx, 42, buf, strlen(buf));
+ MyDrawString(disp, win, gcw, 20+maxtx, 42, buf, strlen(buf));
dig2ascii2(buf, cur_i.st.st_mode, 8);
- XDrawString(disp, win, gcw, 20+maxtx, 64, buf, strlen(buf));
+ MyDrawString(disp, win, gcw, 20+maxtx, 64, buf, strlen(buf));

dig2ascii2(buf, cur_i.st.st_nlink);
- XDrawString(disp, win, gcw, 20+maxtx, 89, buf, strlen(buf));
+ MyDrawString(disp, win, gcw, 20+maxtx, 89, buf, strlen(buf));
sprintf(buf, "%-4d (%s)", cur_i.st.st_uid, finduser(cur_i.st.st_uid));
- XDrawString(disp, win, gcw, 20+maxtx, 114, buf, strlen(buf));
+ MyDrawString(disp, win, gcw, 20+maxtx, 114, buf, strlen(buf));
sprintf(buf, "%-4d (%s)", cur_i.st.st_gid, findgroup(cur_i.st.st_gid));
- XDrawString(disp, win, gcw, 20+maxtx, 139, buf, strlen(buf));
+ MyDrawString(disp, win, gcw, 20+maxtx, 139, buf, strlen(buf));
sprintf(buf,"(%d, %d)", major(cur_i.st.st_rdev), minor(cur_i.st.st_rdev));
- XDrawString(disp, win, gcw, 20+maxtx, 164, buf, strlen(buf));
+ MyDrawString(disp, win, gcw, 20+maxtx, 164, buf, strlen(buf));
dig2ascii2(buf, cur_i.st.st_size);
- XDrawString(disp, win, gcw, 20+maxtx, 189, buf, strlen(buf));
+ MyDrawString(disp, win, gcw, 20+maxtx, 189, buf, strlen(buf));
dig2ascii2(buf, cur_i.st.st_blksize);
- XDrawString(disp, win, gcw, 20+maxtx, 214, buf, strlen(buf));
+ MyDrawString(disp, win, gcw, 20+maxtx, 214, buf, strlen(buf));
dig2ascii2(buf, cur_i.st.st_blocks);
- XDrawString(disp, win, gcw, 20+maxtx, 239, buf, strlen(buf));
+ MyDrawString(disp, win, gcw, 20+maxtx, 239, buf, strlen(buf));
tt=localtime(&cur_i.st.st_atime);
strftime(buf, 64, "%d-%b-%Y %H:%M", tt);
- XDrawString(disp, win, gcw, 20+maxtx, 264, buf, strlen(buf));
+ MyDrawString(disp, win, gcw, 20+maxtx, 264, buf, strlen(buf));
tt=localtime(&cur_i.st.st_mtime);
strftime(buf, 64, "%d-%b-%Y %H:%M", tt);
- XDrawString(disp, win, gcw, 20+maxtx, 289, buf, strlen(buf));
+ MyDrawString(disp, win, gcw, 20+maxtx, 289, buf, strlen(buf));
tt=localtime(&cur_i.st.st_ctime);
strftime(buf, 64, "%d-%b-%Y %H:%M", tt);
- XDrawString(disp, win, gcw, 20+maxtx, 314, buf, strlen(buf));
+ MyDrawString(disp, win, gcw, 20+maxtx, 314, buf, strlen(buf));
/*
XClearArea(disp, win, 0, 332, 200, INODEWIN_H-332, 0);
draw_multi_text(win, gcw, 10, 350, cur_i.magic, maxsymb);
@@ -130,23 +130,23 @@

void inode_redraw_head(Window win, GC& gcw)
{
- maxsymb=(INODEWIN_H-20)*10/XTextWidth(fontstr, "MMMMMMMMMM", 10);
+ maxsymb=(INODEWIN_H-20)*10/MyTextWidth(fontstr, "MMMMMMMMMM", 10);
XClearWindow(disp, win);
XSetForeground(disp, gcw, cols[5]);
- XDrawString(disp, win, gcw, 10, 20, "Device:", 7);
- XDrawString(disp, win, gcw, 10, 42, "Inode:", 6);
- XDrawString(disp, win, gcw, 10, 64, "Attributes:", 11);
- maxtx=XTextWidth(fontstr, "Attributes:", 11);
- XDrawString(disp, win, gcw, 10, 89, "Links:", 6);
- XDrawString(disp, win, gcw, 10, 114,"Uid:", 4);
- XDrawString(disp, win, gcw, 10, 139,"Gid:", 4);
- XDrawString(disp, win, gcw, 10, 164,"Dev type:", 9);
- XDrawString(disp, win, gcw, 10, 189,"Size:", 5);
- XDrawString(disp, win, gcw, 10, 214,"Blksize:", 8);
- XDrawString(disp, win, gcw, 10, 239,"Blocks:", 7);
- XDrawString(disp, win, gcw, 10, 264,"ATime:", 6);
- XDrawString(disp, win, gcw, 10, 289,"MTime:", 6);
- XDrawString(disp, win, gcw, 10, 314,"CTime:", 6);
+ MyDrawString(disp, win, gcw, 10, 20, "Device:", 7);
+ MyDrawString(disp, win, gcw, 10, 42, "Inode:", 6);
+ MyDrawString(disp, win, gcw, 10, 64, "Attributes:", 11);
+ maxtx=MyTextWidth(fontstr, "Attributes:", 11);
+ MyDrawString(disp, win, gcw, 10, 89, "Links:", 6);
+ MyDrawString(disp, win, gcw, 10, 114,"Uid:", 4);
+ MyDrawString(disp, win, gcw, 10, 139,"Gid:", 4);
+ MyDrawString(disp, win, gcw, 10, 164,"Dev type:", 9);
+ MyDrawString(disp, win, gcw, 10, 189,"Size:", 5);
+ MyDrawString(disp, win, gcw, 10, 214,"Blksize:", 8);
+ MyDrawString(disp, win, gcw, 10, 239,"Blocks:", 7);
+ MyDrawString(disp, win, gcw, 10, 264,"ATime:", 6);
+ MyDrawString(disp, win, gcw, 10, 289,"MTime:", 6);
+ MyDrawString(disp, win, gcw, 10, 314,"CTime:", 6);
XDrawLine(disp, win, gcw, 10, 330, 190, 330);
}

diff -Naurw -x '*.o' -x makefile -x '*.a' xnc-5.0.4/src/lib/northgui/gui_key.cxx xnc-5.0.4-patched/src/lib/northgui/gui_key.cxx
--- xnc-5.0.4/src/lib/northgui/gui_key.cxx 2003-02-03 18:28:23.000000000 +0300
+++ xnc-5.0.4-patched/src/lib/northgui/gui_key.cxx 2011-05-31 02:13:10.048873145 +0400
@@ -62,7 +62,7 @@
skin=(Sprite*)tbl->data1;
else
skin=NULL;
- tw = XTextWidth(fontstr, _(name), tl);
+ tw = MyTextWidth(fontstr, _(name), tl);

if (l < tw + 10)
l = tw + 10;
diff -Naurw -x '*.o' -x makefile -x '*.a' xnc-5.0.4/src/lib/northgui/gui_text.cxx xnc-5.0.4-patched/src/lib/northgui/gui_text.cxx
--- xnc-5.0.4/src/lib/northgui/gui_text.cxx 2002-11-01 18:37:26.000000000 +0300
+++ xnc-5.0.4-patched/src/lib/northgui/gui_text.cxx 2011-05-31 02:13:40.798916105 +0400
@@ -20,14 +20,14 @@
{
XClearArea(disp, w, x, y-fixfontstr->max_bounds.ascent, l, h+1, 0);
tl = strlen(_(name));
- l = XTextWidth(fixfontstr, _(name), tl);
+ l = MyTextWidth(fixfontstr, _(name), tl);
if(shadow)
{
XSetForeground(disp, gcw, cols[0]);
- XDrawString(disp, w, gcw, x + 1, y + 1, _(name), tl);
+ MyDrawString(disp, w, gcw, x + 1, y + 1, _(name), tl);
}
XSetForeground(disp, gcw, cols[col]);
- XDrawString(disp, w, gcw, x, y, _(name), tl);
+ MyDrawString(disp, w, gcw, x, y, _(name), tl);
}

void Text::clear_text_area(int il)
@@ -53,7 +53,7 @@
{
tl = strlen(_(name));
h = fixfontstr->max_bounds.ascent + fixfontstr->max_bounds.descent;
- l = XTextWidth(fixfontstr, _(name), tl);
+ l = MyTextWidth(fixfontstr, _(name), tl);
}

void Text::expose()
@@ -61,14 +61,14 @@
XSetForeground(disp, gcw, keyscol[1]);
XClearArea(disp, w, x, y-fixfontstr->max_bounds.ascent, l, h, 0);
tl = strlen(_(name));
- l = XTextWidth(fixfontstr, _(name), tl);
+ l = MyTextWidth(fixfontstr, _(name), tl);
if(shadow)
{
XSetForeground(disp, gcw, cols[0]);
- XDrawString(disp, w, gcw, x + 1, y + 1, _(name), tl);
+ MyDrawString(disp, w, gcw, x + 1, y + 1, _(name), tl);
}
XSetForeground(disp, gcw, cols[col]);
- XDrawString(disp, w, gcw, x, y, _(name), tl);
+ MyDrawString(disp, w, gcw, x, y, _(name), tl);
}

void Text::click()
@@ -117,29 +117,29 @@
tl = strlen(name);
h = fontstr->max_bounds.ascent - fontstr->max_bounds.descent;
ty = fontstr->max_bounds.ascent;
- tx = XTextWidth(fontstr, name, tl);
+ tx = MyTextWidth(fontstr, name, tl);
}

void WText::expose()
{
XClearWindow(disp, w);
tl = strlen(name);
- tx = XTextWidth(fontstr, name, tl);
+ tx = MyTextWidth(fontstr, name, tl);
if(shadow)
XSetForeground(disp, gcw, cols[0]);
if (centered)
{
if(shadow)
- XDrawString(disp, w, gcw, l / 2 - tx / 2 + 1, ty + 1, name, tl);
+ MyDrawString(disp, w, gcw, l / 2 - tx / 2 + 1, ty + 1, name, tl);
XSetForeground(disp, gcw, cols[col]);
- XDrawString(disp, w, gcw, l / 2 - tx / 2, ty, name, tl);
+ MyDrawString(disp, w, gcw, l / 2 - tx / 2, ty, name, tl);
}
else
{
if(shadow)
- XDrawString(disp, w, gcw, 3, ty + 1, name, tl);
+ MyDrawString(disp, w, gcw, 3, ty + 1, name, tl);
XSetForeground(disp, gcw, cols[col]);
- XDrawString(disp, w, gcw, 2, ty, name, tl);
+ MyDrawString(disp, w, gcw, 2, ty, name, tl);
}
}

diff -Naurw -x '*.o' -x makefile -x '*.a' xnc-5.0.4/src/lib/rxvt2/graphics.c xnc-5.0.4-patched/src/lib/rxvt2/graphics.c
--- xnc-5.0.4/src/lib/rxvt2/graphics.c 2002-07-08 19:21:53.000000000 +0400
+++ xnc-5.0.4-patched/src/lib/rxvt2/graphics.c 2011-05-31 02:15:40.579083397 +0400
@@ -153,9 +153,9 @@
align = data->coords [2];

if (align & RIGHT_TEXT)
- x -= XTextWidth (TermWin.font, data->text, data->coords [3]);
+ x -= MyTextWidth (TermWin.font, data->text, data->coords [3]);
else if (align & HCENTER_TEXT)
- x -= (XTextWidth (TermWin.font, data->text, data->coords [3]) >> 1);
+ x -= (MyTextWidth (TermWin.font, data->text, data->coords [3]) >> 1);

if (align & TOP_TEXT)
y += TermWin.font->ascent;
@@ -174,7 +174,7 @@
Height2Pixel (1),
0);
#endif
- XDrawString (Xdisplay, grwin->win, TermWin.gc,
+ MyDrawString (Xdisplay, grwin->win, TermWin.gc,
x, y,
data->text, data->coords [3]);
}
diff -Naurw -x '*.o' -x makefile -x '*.a' xnc-5.0.4/src/lib/rxvt2/menubar.c xnc-5.0.4-patched/src/lib/rxvt2/menubar.c
--- xnc-5.0.4/src/lib/rxvt2/menubar.c 2002-07-08 19:21:53.000000000 +0400
+++ xnc-5.0.4-patched/src/lib/rxvt2/menubar.c 2011-05-31 02:15:56.409105505 +0400
@@ -1023,7 +1023,7 @@
name = NULL;

if (len && name)
- XDrawString (Xdisplay,
+ MyDrawString (Xdisplay,
ActiveMenu->win, gc,
xoff,
yoff + y + menu_height() - (2 * MENU_MARGIN),
@@ -1032,7 +1032,7 @@
len = item->len2;
name = item->name2;
if (len && name)
- XDrawString (Xdisplay,
+ MyDrawString (Xdisplay,
ActiveMenu->win, gc,
ActiveMenu->w - (xoff + Width2Pixel (xright)),
yoff + y + menu_height() - (2 * MENU_MARGIN),
@@ -1339,7 +1339,7 @@

drawbox_menubar (menu->x, len, +1);

- XDrawString (Xdisplay,
+ MyDrawString (Xdisplay,
menuBar.win, menubarGC,
(Width2Pixel (menu->x) + Width2Pixel (HSPACE)/2),
menuBar_height (),
@@ -1390,7 +1390,7 @@

ncol -= (x + len + HSPACE);
if (len > 0 && ncol >= 0)
- XDrawString (Xdisplay,
+ MyDrawString (Xdisplay,
menuBar.win, menubarGC,
Width2Pixel (x) + Width2Pixel (ncol + HSPACE)/2,
menuBar_height (),
diff -Naurw -x '*.o' -x makefile -x '*.a' xnc-5.0.4/src/lib/rxvt2/rmain.c xnc-5.0.4-patched/src/lib/rxvt2/rmain.c
--- xnc-5.0.4/src/lib/rxvt2/rmain.c 2003-02-03 18:28:23.000000000 +0300
+++ xnc-5.0.4-patched/src/lib/rxvt2/rmain.c 2011-05-31 02:20:23.359478364 +0400
@@ -42,6 +42,8 @@
#include "defaults.h"
/*}}}*/

+extern int MyTextWidth(XFontStruct *font_struct, const char *string, int count);
+
/*{{{ extern functions referenced */
#ifdef DISPLAY_IS_IP
extern char * network_display (const char * display);
diff -Naurw -x '*.o' -x makefile -x '*.a' xnc-5.0.4/src/lib/rxvt2/screen.c xnc-5.0.4-patched/src/lib/rxvt2/screen.c
--- xnc-5.0.4/src/lib/rxvt2/screen.c 2002-07-08 19:21:53.000000000 +0400
+++ xnc-5.0.4-patched/src/lib/rxvt2/screen.c 2011-05-31 02:15:49.009095174 +0400
@@ -2669,7 +2669,7 @@
if (back == bgColor)
{
drawStringPrep ();
- drawString (XDrawString16);
+ drawString (MyDrawString16);
}
else
# endif /* XPM_BACKGROUND */
@@ -2678,7 +2678,7 @@
if (MonoBold (rend))
{
xpixel++;
- drawString (XDrawString16);
+ drawString (MyDrawString16);
xpixel--;
}
#endif /* NO_BOLDOVERSTRIKE */
@@ -2695,7 +2695,7 @@
if (back == bgColor)
{
drawStringPrep ();
- drawString (XDrawString);
+ drawString (MyDrawString);
}
else
#endif /* XPM_BACKGROUND */
@@ -2709,7 +2709,7 @@
if (back == bgColor)
{
drawStringPrep ();
- drawString (XDrawString);
+ drawString (MyDrawString);
}
else
#endif /* XPM_BACKGROUND */
@@ -2719,7 +2719,7 @@
if (MonoBold (rend))
{
xpixel++;
- drawString (XDrawString);
+ drawString (MyDrawString);
xpixel--;
}
#endif /* NO_BOLDOVERSTRIKE */
diff -Naurw -x '*.o' -x makefile -x '*.a' xnc-5.0.4/src/lib/tool/commonfuncs.cxx xnc-5.0.4-patched/src/lib/tool/commonfuncs.cxx
--- xnc-5.0.4/src/lib/tool/commonfuncs.cxx 2002-10-16 10:44:20.000000000 +0400
+++ xnc-5.0.4-patched/src/lib/tool/commonfuncs.cxx 2011-05-31 00:14:33.728933720 +0400
@@ -119,7 +119,7 @@
//Get first content of dirname
char* get_first_content(const char *curdir, char *cont)
{
- char *b=strchr(curdir,'/');
+ char *b=const_cast(strchr(curdir,'/'));
if(b)
{
strncpy(cont,curdir,b-curdir);
diff -Naurw -x '*.o' -x makefile -x '*.a' xnc-5.0.4/src/panel.cxx xnc-5.0.4-patched/src/panel.cxx
--- xnc-5.0.4/src/panel.cxx 2003-12-25 16:27:30.000000000 +0300
+++ xnc-5.0.4-patched/src/panel.cxx 2011-05-31 02:51:06.772053070 +0400
@@ -100,8 +100,11 @@
{
cmdl->insert('\'');
n2=name;
- while(*n2)
+
+ while(*n2){
cmdl->insert(*n2++);
+ }
+
tt_printf("'%s'", name);
cmdl->insert('\'');
return;
@@ -147,8 +150,8 @@
KeyPressMask |
FocusChangeMask |
StructureNotifyMask);
- fattr1 = XTextWidth(lfontstr, "-rwxrwxrwx", 9);
- attdx = 8 + (43 - XTextWidth(fixfontstr, "0000", 4)) / 2; //FIXME
+ fattr1 = MyTextWidth(lfontstr, "-rwxrwxrwx", 9);
+ attdx = 8 + (43 - MyTextWidth(fixfontstr, "0000", 4)) / 2; //FIXME
repanel(col);
foc = 0;

@@ -170,7 +173,7 @@
col = ic;
main_area.text_h = lfontstr->max_bounds.ascent + lfontstr->max_bounds.descent;
main_area.text_y = lfontstr->max_bounds.ascent;
- fixl = XTextWidth(fixfontstr,"M",1);
+ fixl = MyTextWidth(fixfontstr,"M",1);
fixh = fixfontstr->max_bounds.ascent + fixfontstr->max_bounds.descent;
fixy = fixfontstr->max_bounds.ascent;
pixels_per_column = (l - Lister::main_area_delta_x*2) / col;
@@ -513,6 +516,72 @@
return 0;
}

+int utf8toXChar2b(XChar2b *output_r, int outsize, const char *input, int inlen)
+{
+ int j, k;
+ for(j =0, k=0; j < inlen && k < outsize; j ++){
+ unsigned char c = input[j];
+ if (c < 128) {
+ output_r[k].byte1 = 0;
+ output_r[k].byte2 = c;
+ k++;
+ } else if (c < 0xC0) {
+ /* we're inside a character we don't know */
+ continue;
+ } else switch(c&0xF0){
+ case 0xC0: case 0xD0: /* two bytes 5+6 = 11 bits */
+ if (inlen < j+1){ return k; }
+output_r[k].byte1 = (c&0x1C) >> 2;
+j++;
+output_r[k].byte2 = ((c&0x3) << 6) + (input[j]&0x3F);
+k++;
+break;
+case 0xE0: /* three bytes 4+6+6 = 16 bits */
+if (inlen < j+2){ return k; }
+j++;
+output_r[k].byte1 = ((c&0xF) << 4) + ((input[j]&0x3C) >> 2);
+c = input[j];
+j++;
+output_r[k].byte2 = ((c&0x3) << 6) + (input[j]&0x3F);
+k++;
+break;
+case 0xFF:
+/* the character uses more than 16 bits */
+continue;
+}
+}
+return k;
+}
+size_t Mystrlen( const char *string )
+{
+ wchar_t buf[ strlen(string) * sizeof(wchar_t)];
+
+ mbstowcs( buf, string, strlen( string )) ;
+ return wcslen( buf );
+}
+
+int MyDrawString(Display *display, Drawable d, GC gc, int x, int y, const char *string, int length)
+{
+ //return XDrawString(display, d, gc, x, y, string, length);
+
+
+ size_t len = strlen( string );
+ XChar2b charbuf[len * sizeof(*string)];
+ size_t buflen = utf8toXChar2b(charbuf, len, string, length );
+ return XDrawString16(display, d, gc, x, y, charbuf, buflen);
+}
+
+int MyTextWidth(XFontStruct *font_struct, const char *string, int length)
+{
+ //return MyTextWidth( font_struct, string, count );
+
+ size_t len = strlen( string );
+ XChar2b charbuf[len * sizeof(*string)];
+ size_t buflen = utf8toXChar2b(charbuf, len, string, length );
+ return XTextWidth16( font_struct, charbuf, buflen );
+}
+
+
//----------------------------------------------------------------------------
// Highlight fast find item in list
//----------------------------------------------------------------------------
@@ -535,8 +604,10 @@
};
XSetForeground(disp, wgcw, f_select_color);

+
//FIXME for display_format
- XDrawString(disp, w, wgcw, ix + delta, iy, ff_buf, fflen);
+// XDrawString(disp, w, wgcw, ix + delta, iy, ff_buf, fflen);
+ MyDrawString(disp, w, wgcw, ix + delta, iy, ff_buf, fflen);

XFlush(disp);
}
@@ -708,11 +779,11 @@
if(shadow)
{
XSetForeground(disp, gcw, shadow_color);
- XDrawString(disp, w, gcw, stlx+1,
+ MyDrawString(disp, w, gcw, stlx+1,
ty+1, str, ll);
}
XSetForeground(disp, gcw, statusbar_color);
- XDrawString(disp, w, gcw, stlx,
+ MyDrawString(disp, w, gcw, stlx,
ty, str, ll);
XFlush(disp);
}
@@ -743,11 +814,11 @@
if(shadow)
{
XSetForeground(disp, gcw, shadow_color);
- XDrawString(disp, w, gcw, STL_ATTR_PTR.tx+1,
+ MyDrawString(disp, w, gcw, STL_ATTR_PTR.tx+1,
STL_ATTR_PTR.ty+1, chr1, 4);
}
XSetForeground(disp, gcw, statusbar_color);
- XDrawString(disp, w, gcw, STL_ATTR_PTR.tx,
+ MyDrawString(disp, w, gcw, STL_ATTR_PTR.tx,
STL_ATTR_PTR.ty, chr1, 4);

}
@@ -756,11 +827,11 @@
if(shadow)
{
XSetForeground(disp, gcw, shadow_color);
- XDrawString(disp, w, gcw, STL_TIME_PTR.tx+1,
+ MyDrawString(disp, w, gcw, STL_TIME_PTR.tx+1,
STL_TIME_PTR.ty+1, fo->chr_time, STL_TIME_NCHAR);
}
XSetForeground(disp, gcw, statusbar_color);
- XDrawString(disp, w, gcw, STL_TIME_PTR.tx,
+ MyDrawString(disp, w, gcw, STL_TIME_PTR.tx,
STL_TIME_PTR.ty, fo->chr_time, STL_TIME_NCHAR);

}
@@ -770,11 +841,11 @@
if(shadow)
{
XSetForeground(disp, gcw, shadow_color);
- XDrawString(disp, w, gcw, STL_OWNER_PTR.tx+1,
+ MyDrawString(disp, w, gcw, STL_OWNER_PTR.tx+1,
STL_OWNER_PTR.ty+1, tchr, ll);
}
XSetForeground(disp, gcw, statusbar_color);
- XDrawString(disp, w, gcw, STL_OWNER_PTR.tx,
+ MyDrawString(disp, w, gcw, STL_OWNER_PTR.tx,
STL_OWNER_PTR.ty, tchr, ll);

}
@@ -800,11 +871,11 @@
if(shadow)
{
XSetForeground(disp, gcw, shadow_color);
- XDrawString(disp, w, gcw, STL_SIZE_PTR.tx+1+(dl-vl)*fixl,
+ MyDrawString(disp, w, gcw, STL_SIZE_PTR.tx+1+(dl-vl)*fixl,
STL_SIZE_PTR.ty+1, chr2, vl);
}
XSetForeground(disp, gcw, statusbar_color);
- XDrawString(disp, w, gcw, STL_SIZE_PTR.tx+(dl-vl)*fixl,
+ MyDrawString(disp, w, gcw, STL_SIZE_PTR.tx+(dl-vl)*fixl,
STL_SIZE_PTR.ty, chr2, vl);
}

@@ -850,10 +921,10 @@
if(shadow)
{
XSetForeground(disp, gcw, shadow_color);
- XDrawString(disp, w, gcw, STL_NAME_PTR.tx+1, STL_NAME_PTR.ty + 1, fname + dl, vl);
+ MyDrawString(disp, w, gcw, STL_NAME_PTR.tx+1, STL_NAME_PTR.ty + 1, fname + dl, vl);
}
XSetForeground(disp, gcw, statusbar_color);
- XDrawString(disp, w, gcw, STL_NAME_PTR.tx, STL_NAME_PTR.ty, fname + dl, vl);
+ MyDrawString(disp, w, gcw, STL_NAME_PTR.tx, STL_NAME_PTR.ty, fname + dl, vl);
}
else
{
@@ -879,10 +950,10 @@
if(shadow)
{
XSetForeground(disp, gcw, shadow_color);
- XDrawString(disp, w, gcw, STL_NAME_PTR.tx+1, STL_NAME_PTR.ty + 1, pname + dl, vl);
+ MyDrawString(disp, w, gcw, STL_NAME_PTR.tx+1, STL_NAME_PTR.ty + 1, pname + dl, vl);
}
XSetForeground(disp, gcw, statusbar_color);
- XDrawString(disp, w, gcw, STL_NAME_PTR.tx, STL_NAME_PTR.ty, pname + dl, vl);
+ MyDrawString(disp, w, gcw, STL_NAME_PTR.tx, STL_NAME_PTR.ty, pname + dl, vl);
}
}
if(option_bits & STATUS_INODE)
diff -Naurw -x '*.o' -x makefile -x '*.a' xnc-5.0.4/src/panel_format.cxx xnc-5.0.4-patched/src/panel_format.cxx
--- xnc-5.0.4/src/panel_format.cxx 2002-08-05 14:43:00.000000000 +0400
+++ xnc-5.0.4-patched/src/panel_format.cxx 2011-05-31 01:04:51.263148340 +0400
@@ -62,7 +62,7 @@

fontstr=ifontstr;

- text_width=XTextWidth(fontstr,"M",1);
+ text_width=MyTextWidth(fontstr,"M",1);

fname_len=max_filename_len*text_width + 2*Lister::file_display_border;

@@ -94,7 +94,7 @@

case FMT_FILE_TIME:
case FMT_FILE_TIME_S:
- fname_len=XTextWidth(fontstr,"00-MMM-MMMM/00:00",FILE_TIMESTAMP-1) +
+ fname_len=MyTextWidth(fontstr,"00-MMM-MMMM/00:00",FILE_TIMESTAMP-1) +
2*Lister::file_display_border;
i_len=get_interval_len(fname_len, max_len);
xncdprintf(("display_format: file_time %d,[%d/%d]\n",
@@ -107,7 +107,7 @@

case FMT_FILE_ATTR_OCT:
case FMT_FILE_ATTR_OCT_S:
- fname_len= XTextWidth(fontstr,"0000",4) + 2*Lister::file_display_border;
+ fname_len= MyTextWidth(fontstr,"0000",4) + 2*Lister::file_display_border;
i_len=get_interval_len(fname_len, max_len);
xncdprintf(("display_format: file_attr_oct %d,[%d/%d]\n",
from_x, i_len, max_len));
@@ -119,7 +119,7 @@

case FMT_FILE_ATTR:
case FMT_FILE_ATTR_S:
- fname_len= XTextWidth(fontstr,"--w--w--w-",10) + 2*Lister::file_display_border;
+ fname_len= MyTextWidth(fontstr,"--w--w--w-",10) + 2*Lister::file_display_border;
i_len=get_interval_len(fname_len, max_len);
xncdprintf(("display_format: file_attr %d,[%d/%d]\n",
from_x, i_len, max_len));
@@ -131,7 +131,7 @@

case FMT_FILE_OWNER:
case FMT_FILE_OWNER_S:
- fname_len= XTextWidth(fontstr,"w",1)*10 + 2*Lister::file_display_border;
+ fname_len= MyTextWidth(fontstr,"w",1)*10 + 2*Lister::file_display_border;
i_len=get_interval_len(fname_len, max_len);
xncdprintf(("display_format: file_owner %d,[%d/%d]\n",
from_x, i_len, max_len));
@@ -143,7 +143,7 @@

case FMT_FILE_SIZE:
case FMT_FILE_SIZE_S:
- fname_len= XTextWidth(fontstr,"0.000.000.000",13) + 2*Lister::file_display_border;
+ fname_len= MyTextWidth(fontstr,"0.000.000.000",13) + 2*Lister::file_display_border;
i_len=get_interval_len(fname_len, max_len);
xncdprintf(("display_format: file_size %d,[%d/%d]\n",
from_x, i_len, max_len));
@@ -226,7 +226,7 @@
FList* ol)
{
set_clip_area(x,y,ival);
- XDrawString(disp, w, wgcw, x + ival.from_x, ty, ol->name, ol->namelen);
+ MyDrawString(disp, w, wgcw, x + ival.from_x, ty, ol->name, ol->namelen);
}

//-------------------------------------------------------------------------
@@ -237,7 +237,7 @@
FList* ol)
{
set_clip_area(x,y,ival);
- XDrawString(disp, w, wgcw, x + ival.from_x, ty, ol->chr_time, FILE_TIMESTAMP-1);
+ MyDrawString(disp, w, wgcw, x + ival.from_x, ty, ol->chr_time, FILE_TIMESTAMP-1);
}

//-------------------------------------------------------------------------
@@ -250,7 +250,7 @@
char buf[128];
sprintf(buf,"%s.%s",ol->user, ol->group);
set_clip_area(x,y,ival);
- XDrawString(disp, w, wgcw, x + ival.from_x, ty, buf, strlen(buf));
+ MyDrawString(disp, w, wgcw, x + ival.from_x, ty, buf, strlen(buf));
}

//-------------------------------------------------------------------------
@@ -263,7 +263,7 @@
char buf[32];
set_clip_area(x,y,ival);
sprintf(buf,"%04o",ol->mode & 07777);
- XDrawString(disp, w, wgcw, x + ival.from_x, ty, buf, 4);
+ MyDrawString(disp, w, wgcw, x + ival.from_x, ty, buf, 4);
}

//-------------------------------------------------------------------------
@@ -276,7 +276,7 @@
char buf[32];
set_clip_area(x,y,ival);
printperm(buf,ol->mode);
- XDrawString(disp, w, wgcw, x + ival.from_x, ty, buf, 10);
+ MyDrawString(disp, w, wgcw, x + ival.from_x, ty, buf, 10);
}

//-------------------------------------------------------------------------
@@ -303,8 +303,8 @@
set_clip_area(x,y,ival);
dig2ascii(buf,ol->size);
len=strlen(buf);
- tlen=XTextWidth(fontstr,buf,len);
- XDrawString(disp, w, wgcw, x + ival.from_x + ival.len - tlen -
+ tlen=MyTextWidth(fontstr,buf,len);
+ MyDrawString(disp, w, wgcw, x + ival.from_x + ival.len - tlen -
fontstr->max_bounds.rbearing - fontstr->min_bounds.lbearing,
ty, buf, len);
}

Аватар пользователя comm

Re: Инициатива: Поможем вытащить ...

XNC использует прямой Xlib , без прослоек и обвязок, rxvt с версии 2.20 до 9.40 поменялся сильно за пять минут не в проект войдет.

Внутри всё структурировано, найти нужный блок можно просто.
чтобы показывать русский текст нужно просто перехватывать обращения к XDrawString, XTextWidth.
А вот с вводом сложности, так как заточки на мутибайтовые строки не было и код оптимизирован поз ASCIIZ при втыкании и типовые сишные хаки начинают работать весьма криво при инъекциях wchar пересчетов.

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

Аватар пользователя itspec

Re: Инициатива: Поможем вытащить ...

to comm

К сожалению у патча, который здесь выложен отвалились пробелы в начале строк. Нельзя ли выложить этот патч каким-то другим способом?

RSS-материал