Толик Панков
hex_laden
............ .................. ................

October 2025
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Толик Панков [userpic]
Текстовый редактор FOTON для DOS



Охрененная софтина была для 1989 года.
Макросы, возможность компиляции программ, не выходя из бассейна из редактора и множество передовых фишек для того времени.

А самое главное, в нем есть одна штука, которой до сей поры нет ни в одном более современном текстовом редакторе. Выделение прямоугольных блоков текста! Которые можно переносить, вставлять и т.д. Вот нет такого больше нигде и все, а надо иногда. Причем настолько надо, что периодически пользуюсь сим олдовым произведением программерского искусства. Хоть сам бери и пиши редактор с подобной функцией, блин.
UPD.
Есть, оказывается. Не знаю насчет vim и emacs, правда, но Notepad++ делает как надо. И Far (по Аlt+стрелки). А вот Студия делает, но не совсем так.




Его собственная внутренняя демка:


https://youtu.be/vc5ONlBnPrg
Скачать

Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2018/02/23/tekstovyj-redaktor-foton-dlya-dos/

Comments

>можно, конечно, все контролы в цикле обойти через массив Controls,

Не можно, а нужно.
То есть вместо всех этих однотипных присваиваний =false/=true вешаешь на контрол флаг, а дальше ANDишь его со значением состояния. И никаких ручных простыней.

Это более-менее ясно, хоть тут и немного не тот случай, в форму данные не непосредственно из БД загружаются, а из объекта.

А как вот с объектом быть, как в этой программе, например. Есть класс "Задание" с кучей полей, его описывающих. Состояние объекта сохраняется в DataSet, в классе, соответственно, есть две функции, FromDataSet и ToDataSet, которые забирают/сохраняют все нужные значения полей из/в БД, вот там куча ручных присваиваний и сидит...

А зачем вручную, если это автоматом сгенерить можно?

https://msdn.microsoft.com/en-us/library/jj682076(v=vs.113).aspx

хм... интересно, надо проэкспериментировать.

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

Необходимо написать программу, отображающую все символы заданной кодовой таблицы. С однобайтными кодировками просто. тыц В функции FillTable перебираю 256 байт, генерирую символ Encoding'ом. А как быть с многобайтными кодировками? Пробовал тупо брутфорсом все возможные варианты перебрать, но это получилось жутко долго, может есть способ как нибудь оптимизировать?

А что имеется в виду под кодовой таблицей в твоём случае?

То есть для однобайтовых это понятие имело смысл: у нас есть ограниченный набор кодов, которыми надо отобразить более широкий набор символов. Конкретный отображаемый набор и будет являться кодовой таблицей.

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

И есть разные варианты Юникода, начиная с UTF-8 и кончая USC-32, которые означают одно и то же, и которых столько, что ими кодировать можно хоть небо, хоть Аллаха. Там всё просто: так как доступное пространство кодировани огроменно, оно разбито на чарты, которые полностью или частично заняты символами. Их всегда можно найти тут: http://www.unicode.org/charts/

А что имеется в виду под кодовой таблицей в твоём случае?
В моем случае имеется ввиду, что программа должна разобраться, какую кодировку вводит пользователь (в смысле пользователь вводит CodePage, которую принимает Encoding.GetEncoding, или выбирает из списка доступных) и отобразить все символы, которые только есть в виде таблицы, как я сделал в примере для однобайтовых.
В принципе, начало положено. Однобайтовые можно отделить от других флагом IsSingleByte, с Юникодовскими я тоже примерно представляю как решить, взять диапазоны для чартов и каждый отображать отдельно.

Остается два вопроса
1. Как отделить варианты Юникода от других кодировок. Флага IsUnicode вроде нет, а как я понямаю, UTF-16, UTF-8, UTF-7 или UTF-32 кодируют одно и то же, только разными способами, посему набор символов один для всех. Можно эту самую страничку с charts прямо с сайта скачать и распарсить. На том же unicode.org вроде где-то был файлик в plaintext или csv с тем же содержимым.
2. Про многобайтовые CP для мунспиков. Или переложить на плечи студента пояснительную записку, по типу "а хз что это такое, спецификации на китайском", или как-то эффективно их "сбрутфорсить", отобразить все возможные комбинации. Получится что-то типа RAW-просмотра, но хоть что-то.

Да, препод ебнутый, студент тупой, мы случайно оказались "в ответе за того, кого приручили", к тому же желательно решить без лямбда-выражений, потому что и студент не дошел еще до них, и мы не сталкивались, и учебник у них столетний по .NET Framework 2.0

А вообще под виндой есть charmap, можешь там подсмотреть как сделано.


Студент хоть ебабельный? ;)

charmap немного не то, он выводит все символы заданного шрифта. По чармапам видел неплохие примеры на C#

К сожалению нет. Это пожилой и страшненький капитан какого-то второстепенного военного корыта. Он вроде даже на ЛЖР есть.

> он выводит все символы заданного шрифта
Отнюдь нет.
Если тыцнешь галочку advanced, то там как раз появится выпадающий список с кодовыми таблицами.

И, кстати, шрифт это весьма важный вопрос -- если у тебя есть символ, но нет отображающего его глифа, как ты его будешь показывать?

>Если тыцнешь галочку advanced
Привязанный к данному шрифту. Если шрифт не может в Юникод, как Fixedsys, например, то комбобокс с выбором кодировки будет неактивен.

Важный, потому на этот случай должна быть возможность выбора шрифта (и уже сделана), а так же, какой-нибудь встроенный шрифт, умеющий в Юникод (т.к. Encoding все равно перекодирует все символы в Юникод, ЕМНИС UTF-16, и их уже использует в программе, в т.ч. и отображает).