Толик Панков
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

> одна штука, которой до сей поры нет ни в одном более современном текстовом редакторе. Выделение прямоугольных блоков текста!

Чего?
Notepad++ и MSVS - Alt-Shift-стрелки
vim - Ctrl-B и стрелки
В имаксе тоже наверняка есть, там всё есть))

О как! А я и не знал...

Хотя Студия все равно нешмогла наставить нужное количество пробелов/табуляций, чтоб блок потом вставился точно так же "прямоугольно" и остался там, куда его вставили. А вот Notepad++ смог!

(Anonymous)

>Ctrl-B
Ctrl-V тащемта
>стрелки
Убивать?

Промахнулся, да

ой, ну кто сейчас hjkl пользуется?

(Anonymous)

да вся хипстерня пользуется активно

https://www.youtube.com/watch?v=OnUiHLYZgaA
https://www.youtube.com/watch?v=Nim4_f5QUxA

На лаптопных клавах hjkl таки удобнее.
Еще скажи, что ^A^E никто не пользуется.

(Anonymous)

Если руки не на home row, vim просто уебательски неудобен, кмк.

>Выделение прямоугольных блоков текста! Которые можно переносить, вставлять и т.д.

Есть в Emacs и Vim. Однако совершенно ненужная штука. Для форматирования есть HTML.

Ага, выше написали.

Однако совершенно ненужная штука
Нужная, и совершенно не для форматирования. Для форматирования и Word есть.
Например, когда куча переменных присваивается соответствующим полям элементов управления в форме, а потом из этих элементов надо данные вытащить и куда-нибудь деть, в БД, например, записать.

Вон как тут например где в form_load устанавливаются значения параметров элемента управления, а по нажатию ОК наоборот.

ага. это называется «i cannot into regular expressions, and my editor sucks cocks».

Насчет редактора соглашусь, насчет регулярных выражений не уверен, можно, конечно, все контролы в цикле обойти через массив Controls, но чтоб регулярными выражениями Oo. И то, обход в цикле хорош, когда у тебя куча однотипных контролов, text- или checkbox'ы какие-нибудь и в таблицу не добавится какое-нибудь поле, или на форму контрол, что бывает.

этот код вообще ужасен абсолютно весь, сверху донизу. пример того, как никогда не надо делать data binding.

А что там такого ужасного, поясни, если не влом, мы подправим. Я, конечно, универ давно закончил, но Лешину программу вполне бы приняли на какой-нибудь практической :) Были там изначально проблемы и косяки, которые Леха сам подправить не мог, но я вроде исправил все.

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

>программу вполне бы приняли на какой‐нибудь практической
тю. если человек умеет делать нормальный код, он не квасит яйца в универах. там учат дебилы, и принимают дебилы. в лучшем случае они отстали лет на сорок, но обычно всё проще, и они не умеют вообще нихуя.

>из полей базы берем, в какие нужно переменные записываем, и обратно
вот как только в этой части появляется «руками» (а там всё, блджад, руками сделано), то можно заканчивать, и выгонять из профессии за профнепригодность. и да, использование языка, в котором нельзя отпердолить исходник во время компиляции не оправдание, а дополнительная гиря к профнепригодности.

hint: declarative programming. задача программера — описать маппинг полей в переменные. всё остальное должен сделать компилятор. НИКАКОГО ручного кода быть нахер не должно.

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

если упростить, то так: когда есть больше одного места, которое надо поправить руками — год говнище. можно спокойно считать, что ты уже проебал какую‐то правку. если говноязык не умеет обрабатывать свой код на стадии компиляции — значит, должен быть генератор, который выплёвывает data bindings на основе декларативного описания. но НИКОГДА не должно быть ручной каши с правкой. потому что делать такое — работа для машины. человек не должен этим заниматься.

Справедливости ради, контролы к DataSet и вправду можно прибиндить, а вот насчет самодельного класса типа "Задания" в исходнике, я хз. Я и контролы редко биндил, т.к. мне казалось, что нагляднее как раз в коде все сделать. Но мысль вообще правильная, надо посмотреть, как это все можно оптимизировать. Мне ж казалось, что что-то делается не так... Теперь ты меня в этом уверил.

>можно, конечно, все контролы в цикле обойти через массив 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, и их уже использует в программе, в т.ч. и отображает).

во‐первых, давайте не быть пидорашками. никакой это не «фотон», а обыкновенный старенький multiedit.

а во‐вторых, навалом. в FAR'е есть. в Delphi есть. в куче других редакторов есть вертикальные блоки. и что характерно: нигде они нахуй не нужны.

никакой это не «фотон», а обыкновенный старенький multiedit
И тут спиздили?

Да, в FAR'е оказалось, есть, а я со времен DOS все фотон этот с собой специально для этого таскал :)

спиздили, и ещё как: все копирайты затёрли к хуям, и вписали свои. а ты думал, денис попов — это так, школьник? хуй там плавал! это multiedit 2 или multiedit 3.

(Anonymous)

Нужны. Но редко. Но когда нужны, просто до усрачки.

(Anonymous)
С днем советской армии!

https://ic.pics.livejournal.com/chlentochka/84308165/291/291_original.jpg
https://ic.pics.livejournal.com/chlentochka/84308165/585/585_original.jpg
https://ic.pics.livejournal.com/chlentochka/84308165/964/964_original.jpg

Re: С днем советской армии!

Блядь, это не то, чтоб репост. Это прямо настоящая БIМБА!

(Anonymous)

>Не знаю насчет vim

ой блядь чего ты там не знаешь?
ну сказали же тебе: есть в виме, есть

https://www.youtube.com/watch?v=KuLy5LzHEzU

есть и есть, ок. Я не знаю, не пользовался никогда потому что, и нет их у меня.

Прямоугольные блоки умел не только Фотон. Сам Фотон я запускал олин раз. Почему-то не впечатлило...

А меня впечатлили изначально именно что прямоугольные блоки. Дико помогали с простынями на ассемблере под DOS, потом с запросами к пизданутым БД вроде Парадокса, еще с чем-то. В общем, так и таскал до недавнего времени с собой. А, еще первые HTML-странички на нем создавал, наделал макросов по вставке тегов, правда не найду сейчас, сто лет и два сгоревших компа назад было.