Лингвофорум

Общий раздел => Наука и техника => Компьютеры => Тема начата: mnashe от января 11, 2012, 08:59

Название: DOS и Unicode
Отправлено: mnashe от января 11, 2012, 08:59
Цитата: Robert Dunwell от января 11, 2012, 08:53
Он позволяет скопировать текст словарных статей в буфер обмена, но, к сожалению, в кодировке ASCII, а фонетическая транскрипция при этом превращается в полную кашу.
Ужас!
Не понятно, почему.
Моя древняя DOS-овская программа и то копирует в буфер обмена в виде Unicode, это почти ничем не сложнее.
Название: DOS и Unicode
Отправлено: lengzoi от января 11, 2012, 09:34
Цитата: mnashe от января 11, 2012, 08:59
DOS-овская программа
Цитата: mnashe от января 11, 2012, 08:59
копирует в буфер обмена
Противоречие.
Название: DOS и Unicode
Отправлено: mnashe от января 11, 2012, 09:58
Цитата: lengzoi от января 11, 2012, 09:34
Противоречие.
Не противоречие.
В Windows 9x есть поддержка некоторых Windows'овых функций для DOS-программ (через стандартный механизм прерываний). В частности, есть доступ к Clipboard, а также программа может кошерно закрыться по команде через Windows'овский интерфейс (нажатие на крестик, завершение сеанса и т.п.).
К сожалению, в Windows XP этого нет. Проблему с clipboard я обошёл простейшей консольной утилитой (8 kB), копирующей в clipboard содержимое файла или читающей clipboard в файл, а вот для выхода выхода нет.
Поддержка LFN (длинных имён файлов) есть и в XP, но unicode, к сожалению, недоступен.
Название: DOS и Unicode
Отправлено: jvarg от января 11, 2012, 10:17
Цитата: lengzoi от января 11, 2012, 09:34
Цитата: mnashe от января 11, 2012, 08:59
DOS-овская программа
Цитата: mnashe от января 11, 2012, 08:59
копирует в буфер обмена
Противоречие.
С экрана — без проблем.
Название: DOS и Unicode
Отправлено: mnashe от января 11, 2012, 10:20
С экрана-то как раз в Unicode не получится.
Название: DOS и Unicode
Отправлено: jvarg от января 11, 2012, 10:55
Цитата: mnashe от января 11, 2012, 10:20
С экрана-то как раз в Unicode не получится.

Да какая разница?

Потом открываешь в AkelPad, и сохраняешь хоть Юникоде, хоть в любой кодовой странице txt.
Название: DOS и Unicode
Отправлено: mnashe от января 11, 2012, 11:07
Цитата: jvarg от января 11, 2012, 10:55
Да какая разница?
Большая разница.
У меня кодовая страница — Windows-1251. Для DOS, соответственно, 866.
А редактор работает и с кириллицей, и с ивритом, и даже позволяет отображать их на экране одновременно.
Мог бы при необходимости сделать, скажем, английскую транскрипцию.
Ну и что мне делать со всей той фигнёй, которая будет у меня в AkelPad'е после упомянутых операций?
Название: DOS и Unicode
Отправлено: lengzoi от января 11, 2012, 11:40
Цитата: mnashe от января 11, 2012, 09:58
В Windows 9x есть поддержка некоторых Windows'овых функций для DOS-программ (через стандартный механизм прерываний). В частности, есть доступ к Clipboard, а также программа может кошерно закрыться по команде через Windows'овский интерфейс (нажатие на крестик, завершение сеанса и т.п.).
Понятно. Я об этом слышал, но про доступ к буферу обмена не знал. Интересно.
Название: DOS и Unicode
Отправлено: Robert Dunwell от января 11, 2012, 15:29
Цитата: mnashe от января 11, 2012, 09:58
Цитата: lengzoi от января 11, 2012, 09:34
Противоречие.
Не противоречие.
В Windows 9x есть поддержка некоторых Windows'овых функций для DOS-программ (через стандартный механизм прерываний). В частности, есть доступ к Clipboard, а также программа может кошерно закрыться по команде через Windows'овский интерфейс (нажатие на крестик, завершение сеанса и т.п.).
К сожалению, в Windows XP этого нет. Проблему с clipboard я обошёл простейшей консольной утилитой (8 kB), копирующей в clipboard содержимое файла или читающей clipboard в файл, а вот для выхода выхода нет.
Поддержка LFN (длинных имён файлов) есть и в XP, но unicode, к сожалению, недоступен.
Имейте в виду, то Командная Строка - это НЕ DOS. Это эмулятор DOS в среде Windows. Большинство истинных приложений DOS в этой среде НЕ РАБОТАЕТ.
Чистый DOS не поддерживает и НИКОГДА НЕ ПОДДЕРЖИВАЛ Unicode. Стало возможно использовать несколько кодовых страниц в одном документе только с появлением Windows. Кодовая страница под DOS может содержать максимум 256 знаков, тогда как Unicode поддерживает до 65536 знаков, что абсолютно немыслимо с размерами памяти, доступными под истиным DOS. С другой стороны, Apple почти всегда обладал такой возможностью.
Название: DOS и Unicode
Отправлено: mnashe от января 11, 2012, 15:43
Цитата: Robert Dunwell от января 11, 2012, 15:29
Большинство истинных приложений DOS в этой среде НЕ РАБОТАЕТ.
Почти все истинные приложения DOS работают в Windows 9x и Windows XP.
Бо́льшая часть работает и в Windows 7 32 bit.

Остальное верно.
Название: DOS и Unicode
Отправлено: jvarg от января 11, 2012, 16:35
Цитата: Robert Dunwell от января 11, 2012, 15:29
Большинство истинных приложений DOS в этой среде НЕ РАБОТАЕТ.
Поясните, что вы имеете в виду под "истинными приложениями" DOS?

Все работает.

У некоторых старых игрушек звука нет, это да. Но заплатками лечится.
Название: DOS и Unicode
Отправлено: Robert Dunwell от января 11, 2012, 20:58
Цитата: jvarg от января 11, 2012, 16:35
Цитата: Robert Dunwell от января 11, 2012, 15:29
Большинство истинных приложений DOS в этой среде НЕ РАБОТАЕТ.
Поясните, что вы имеете в виду под "истинными приложениями" DOS?

Все работает.

У некоторых старых игрушек звука нет, это да. Но заплатками лечится.
Многие приложения DOS напрямую управляли устройствами. Под WINDOWS это строго противопоказано. Под DOS программы работали в однозадачном, монопольном режиме и применяли много программных приемов, которые совершенно недопустимы в многозадачном режиме Windows.
Название: DOS и Unicode
Отправлено: Dmetri от января 11, 2012, 22:07
Цитата: Robert Dunwell от января 11, 2012, 15:29
Чистый DOS не поддерживает и НИКОГДА НЕ ПОДДЕРЖИВАЛ Unicode. Стало возможно использовать несколько кодовых страниц в одном документе только с появлением Windows. Кодовая страница под DOS может содержать максимум 256 знаков
Чистый DOS никак не препятствует создавать на нём приложения с графическим режимом и уникодом, и тем более использовать несколько кодовых страниц. Что mnashe и сделал, как я понял.

Цитата: Robert Dunwell от января 11, 2012, 15:29тогда как Unicode поддерживает до 65536 знаков
У Вас устаревшая информация. Идиллию испортили уже в 1996 году. Теперь уникод поддерживает до 1,114,112 символов.

Цитата: Robert Dunwell от января 11, 2012, 15:29тогда как Unicode поддерживает до 65536 знаков, что абсолютно немыслимо с размерами памяти, доступными под истиным DOS
а) Далеко не все эти знаки используются, а реально в жизни надо много меньше. Сделать приложение, работающее с уникодом без иероглифов и редких письменностей, под DOS вполне можно. Вопрос в том, что никому не нужно...
б) Хотя иероглифы составляют проблему, их можно переконвертировать при чтении файла в какой-нибудь нормальный вид (разбить по графемам и выделить для графем часть области private use) и реально тратить на шрифт для иероглифов меньше 100 Кб. См. CangJie.
в) Есть же DMPI.

Цитата: Robert Dunwell от января 11, 2012, 15:29С другой стороны, Apple почти всегда обладал такой возможностью.
ORLY? Реквестирую Кодера в тред.
Название: DOS и Unicode
Отправлено: mnashe от января 11, 2012, 23:53
Цитата: Robert Dunwell от января 11, 2012, 20:58
Многие приложения DOS напрямую управляли устройствами. Под WINDOWS это строго противопоказано. Под DOS программы работали в однозадачном, монопольном режиме и применяли много программных приемов, которые совершенно недопустимы в многозадачном режиме Windows.
Не так уж и строго.
В полноэкранном режиме с экраном можно напрямую делать почти всё, что угодно.
Некоторые настройки видеокарты Windows исправно сохраняет при переходе в режим «в окне» и впоследствии восстанавливает. Не все, правда.
А некоторые настройки он даже в режиме «в окне» эмулирует. Прежде всего — количество строк на экране.
Вот сравните эмуляцию режимов экрана с разным количеством строк: 25, 32, 40.
Переключается всё на лету, не выходя на полный экран, несмотря на то, что переключение делается напрямую через порт, а не прерыванием. На третьем скриншоте как раз фрагмент программы, которая это делает.
Название: DOS и Unicode
Отправлено: mnashe от января 12, 2012, 00:05
Цитата: Dmetri от января 11, 2012, 22:07
Чистый DOS никак не препятствует создавать на нём приложения с графическим режимом и уникодом, и тем более использовать несколько кодовых страниц. Что mnashe и сделал, как я понял.
Да, у меня несколько кодовых страниц: западноевропейская, 866, 862, а также частичное отображение (через специальную таблицу) 1251, 1255, так что можно работать и с HTML без перекодирования.
И всё это делается не через задницу и перезапуск компьютера, как в Windows, а мгновенно двумя кликами.
Вот только в режиме «в окне» выбранный шрифт не отображается. Пришлось пожертвовать менее важными символами и вместить ивритицу с кириллицей в одну страницу (жёлтая табличка выше), которая и используется для отображения, а остальное «проецировать» в неё таблицами.
Название: DOS и Unicode
Отправлено: Robert Dunwell от января 12, 2012, 05:33
Цитата: Demetrius от января 11, 2012, 22:07
Цитата: Robert Dunwell от января 11, 2012, 15:29тогда как Unicode поддерживает до 65536 знаков
У Вас устаревшая информация. Идиллию испортили уже в 1996 году. Теперь уникод поддерживает до 1,114,112 символов.
Я мало увлекаюсь компьютерами последние годы... действительно у меня устаревшая информация (как и я сам "слегка" постарел с годами...  Вопрос.  Поскольку UNICODE - двухбайтовый код (2^16 = 65536), как выполнена поддержка 1,114,112 знаков? Там несколько кодовых таблиц (как в DOS), или добавали третий байт?. Для поддержки в таком случае должен быть по меньшей мере 21-разрядный код, или многократное переопределение некоторых кодовых значений.
Спасибо за апдейт моих устаревших представлений.
Название: DOS и Unicode
Отправлено: Robert Dunwell от января 12, 2012, 06:02
Цитата: Dmetri от января 11, 2012, 22:07
Цитата: Robert Dunwell от января 11, 2012, 15:29С другой стороны, Apple почти всегда обладал такой возможностью.
ORLY? Реквестирую Кодера в тред.
Я имею в виду чисто исторически.
Фирма Apple всегда очень умело пользовалась судебной системой для того, чтобы блокировать выход конкурентных продуктов на рынок. Система Windows появилась намного позже, чем могла бы, из-за того, что фирма Apple утверждала в свое время, что графический пользовательский интерфейс на персоналках был ее собственностью, ею запатентован, и больше никто не имел право его использовать. Microsoft долго ходил по судам и, наконец, доказал что фирма Apple сама является нарушителем патентов фирмы Westinghouse (кажется), которая разработала и (видимо) запатентовала части этой технологии еще раньше, чем Apple. Только после этой победы появилась система Window с поддержкой нескольких кодовых таблиц в одном документе. В ванильном DOS-е такая поддержка не была предусмотрена и не предусмратривалась, как контрстратегическое направление. Тем временем, Apple увела почти весь издательский рынок, который должен был сочетать французский, немецкий и русский в одном документе, что под DOS-ом того времени было решительно невозможно.
Название: DOS и Unicode
Отправлено: Dmetri от января 12, 2012, 06:52
Цитата: Robert Dunwell от января 12, 2012, 05:33
Поскольку UNICODE - двухбайтовый код (2^16 = 65536), как выполнена поддержка 1,114,112 знаков? Там несколько кодовых таблиц (как в DOS), или добавали третий байт?
Чаще всего используется кодирование переменной длины: UTF-8 (от 1 до 5 байтов на символ) или UTF-16 (2 или 4 байта на символ). UTF-16 совместима с ранним двухбайтовым уникодом.

Впрочем, там нужен не целый байт. Зарезервированы только 11 «плоскостей» по 65536 знаков в каждой; всего доступны коды от U+0000 до U+10FFFF. При этом коды выше FFFF во многих программах вообще не работают (Опера, MySQL, наш форум) и очень часто недостаточно протестированы и служат источником многих ошибок.

Вообще, мне кажется, что уникод (по крайней мере современный)—это зло. К сожалению, что ничего (из распространённого) лучшего нет. :'(
Название: DOS и Unicode
Отправлено: Robert Dunwell от января 12, 2012, 11:32
Цитата: Dmetri от января 12, 2012, 06:52
Цитата: Robert Dunwell от января 12, 2012, 05:33
Поскольку UNICODE - двухбайтовый код (2^16 = 65536), как выполнена поддержка 1,114,112 знаков? Там несколько кодовых таблиц (как в DOS), или добавали третий байт?
Чаще всего используется кодирование переменной длины: UTF-8 (от 1 до 5 байтов на символ) или UTF-16 (2 или 4 байта на символ). UTF-16 совместима с ранним двухбайтовым уникодом.

Впрочем, там нужен не целый байт. Зарезервированы только 11 «плоскостей» по 65536 знаков в каждой; всего доступны коды от U+0000 до U+10FFFF. При этом коды выше FFFF во многих программах вообще не работают (Опера, MySQL, наш форум) и очень часто недостаточно протестированы и служат источником многих ошибок.

Вообще, мне кажется, что уникод (по крайней мере современный)—это зло. К сожалению, что ничего (из распространённого) лучшего нет. :'(

Спасибо... я когда-то сотрудничал с Центром национальных языков ИБМ в Торонто по разработке стандарта Юникод (в конце 80-ых). Очень интересно было узнать, во что это все превратилось...  Увы, центр распустили в начале 90-ых из-за нехватка средств, когда ИБМ переживал кризисные годы.
Название: DOS и Unicode
Отправлено: jvarg от января 12, 2012, 14:53
Цитата: mnashe от января 11, 2012, 11:07
Большая разница.
У меня кодовая страница — Windows-1251. Для DOS, соответственно, 866.
А редактор работает и с кириллицей, и с ивритом, и даже позволяет отображать их на экране одновременно.
Сохраняете с экрана разные куски в разных файлах, а потом тем же акелпадом кодируете их правильно, и сшиваете.

Геморно? Да. А не фиг было программы под ДОС писать...
Название: DOS и Unicode
Отправлено: mnashe от января 12, 2012, 15:01
Цитата: jvarg от января 12, 2012, 14:53
Сохраняете с экрана разные куски в разных файлах, а потом тем же акелпадом кодируете их правильно, и сшиваете.
Геморно?
Да не, нормально — не намного сложнее, чем переписать весь экран вручную.

Цитата: jvarg от января 12, 2012, 14:53
А не фиг было программы под ДОС писать...
А под что их ещё писать в 1993 году?
К моменту появления Windows это уже была мощная система с кучей возможностей, некоторые из которых в Windows тогда отсутствовали или были реализованы очень криво, а кое-какие фичи уникальны до сих пор.
А написать пару мелких утилиток, сообщающихся с Windows, — это всё же несколько легче, чем переписывать под Windows добрую сотню тысяч строк.
Название: DOS и Unicode
Отправлено: jvarg от января 12, 2012, 15:03
Цитата: mnashe от января 12, 2012, 15:01
Цитата: jvarg от января 12, 2012, 14:53Сохраняете с экрана разные куски в разных файлах, а потом тем же акелпадом кодируете их правильно, и сшиваете.
Геморно?
Да не, нормально — не намного сложнее, чем переписать весь экран вручную.
Ну, вручную все ж посложней будет  :??? :-\
Название: DOS и Unicode
Отправлено: mnashe от января 12, 2012, 15:19
Цитата: jvarg от января 12, 2012, 15:03
Ну, вручную все ж посложней будет  :???
Хорошо, попробуйте.
Вот Вам не самый сложный случай: :smoke:
Название: DOS и Unicode
Отправлено: Dme3 от января 12, 2012, 17:40
Цитата: mnashe от января 12, 2012, 15:01
это всё же несколько легче, чем переписывать под Windows добрую сотню тысяч строк.
Программы на пару тысяч строк кода—это очень... неправильно. Программы должны быть маленькими и простыми.
Название: DOS и Unicode
Отправлено: mnashe от января 12, 2012, 20:29
Цитата: Dme3 от января 12, 2012, 17:40
Программы на пару тысяч строк кода—это очень... неправильно. Программы должны быть маленькими и простыми.
Так это фактически рабочая среда (framework), в которой написано сотни программ, среди которых и довольно большие, и маленькие и простые.
Я не думаю, что, скажем, Total Commander — такая уж маленькая и простая, особенно если считать все плагины.
Название: DOS и Unicode
Отправлено: Dme3 от января 12, 2012, 20:50
Цитата: mnashe от января 12, 2012, 20:29
Так это фактически рабочая среда (framework), в которой написано сотни программ, среди которых и довольно большие, и маленькие и простые.
Ну, не знаю, всё равно мне кажется, что это ужасно нерационально. Вы не пробовали портировать свой скриптовой язык под Windows?

Цитата: mnashe от января 12, 2012, 20:29
Я не думаю, что, скажем, Total Commander — такая уж маленькая и простая, особенно если считать все плагины.
Я не знаю, я никогда не пользовался Total Commander'ом. :donno:
Название: DOS и Unicode
Отправлено: Python от января 12, 2012, 23:27
Цитата: Robert Dunwell от января 11, 2012, 15:29
Имейте в виду, то Командная Строка - это НЕ DOS. Это эмулятор DOS в среде Windows. Большинство истинных приложений DOS в этой среде НЕ РАБОТАЕТ.
Чистый DOS не поддерживает и НИКОГДА НЕ ПОДДЕРЖИВАЛ Unicode. Стало возможно использовать несколько кодовых страниц в одном документе только с появлением Windows. Кодовая страница под DOS может содержать максимум 256 знаков, тогда как Unicode поддерживает до 65536 знаков, что абсолютно немыслимо с размерами памяти, доступными под истиным DOS. С другой стороны, Apple почти всегда обладал такой возможностью.
1) С точностью до наоборот: консольные  программы для Windows  не работают под DOS, хотя большинство прикладных ДОС-программ спокойно запускается из-под Виндоус (насколько мне известно, и 98, и ХР, и 7 пригодны для этого). Например, Нортон на винде запустить не проблема, а FAR на ДОСе — уже не получится.
2) Технически, видеоадаптер современных компьютеров позволяет увеличить количество используемых символов в текстовом режиме до 512 (не весь юникод, но хоть что-то). Впрочем, такая техническая возможность появилась довольно поздно, типичная программа для MS-DOS работает с 256-битными символами. Тем более, ДОСовский стандартный ввод/вывод не рассчитан на что-то большее, чем 256 бит.

Что же касается виндовых консольных приложений, они с юникодом работать могут (хоть это и сложновато реализуется технически, да еще и зависит от выбора шрифтов — по умолчанию, используются растровые, несовместимые с юникодом. В полноэкранном режиме юникод тоже не поддерживается).
Название: DOS и Unicode
Отправлено: Python от января 12, 2012, 23:37
Цитата: mnashe от января 11, 2012, 11:07
Цитата: jvarg от января 11, 2012, 10:55
Да какая разница?
Большая разница.
У меня кодовая страница — Windows-1251. Для DOS, соответственно, 866.
А редактор работает и с кириллицей, и с ивритом, и даже позволяет отображать их на экране одновременно.
На картинке какая-то очень нестандартная кодировка, нигде такой не видел. Явно не 1251 и не 866 (хотя родство с последней прослеживается). Что это?
Название: DOS и Unicode
Отправлено: Тайльнемер от января 13, 2012, 01:40
Цитата: Python от января 12, 2012, 23:27
256-битными символами
:O
Название: DOS и Unicode
Отправлено: mnashe от января 13, 2012, 03:21
Цитата: Python от января 12, 2012, 23:37
На картинке какая-то очень нестандартная кодировка, нигде такой не видел. Явно не 1251 и не 866 (хотя родство с последней прослеживается). Что это?
1. За основу взята 862 (иврит).
2. Поскольку в иврите нет маленьких букв, соответствующая область в ней свободна. На этом месте маленькие русские буквы, как в 866.
3. Без больших русских я сначала обходился, а потом решил пожертвовать некоторыми наименее нужными символами и распихать туда те из больших русских букв, что не имеют латинского двойника.
Как кодировку файлов эту «кодовую страницу» я практически не использую, но именно по ней нарисован мой шрифт для консоли. Иврит (862) отображается правильно напрямую, а 866, 1251, 1255 отображаются через таблицу. Некоторые символы при этом нельзя отобразить, но они встречаются очень редко.
Название: DOS и Unicode
Отправлено: Python от января 13, 2012, 14:38
Цитата: Тайльнемер от января 13, 2012, 01:40
Цитата: Python от января 12, 2012, 23:27
256-битными символами
:O
Вот что бывает, когда пишешь об одном, а думаешь о другом :)
8 бит, конечно (т.е., 256 возможных символов)