Переключение экранов в консоли MS-DOS
От: Vaynamond Россия  
Дата: 01.04.23 17:03
Оценка:
Доброго времени суток!
Озадачился вопросом: когда, например, в Norton Commander или DOS Navigator (или другом консольном файловом менеджере ) мы нажимаем Ctrl-O (убрать панели, оставив "голую" консоль), как это реализовано ? Вывод в разные страницы, сохранение\восстановление содержимого экрана, или как-то ещё ? Тоже самое (наверное) используется в досовских консольных компиляторах по Alt-F5 "Пользовательский экран".
Re: Переключение экранов в консоли MS-DOS
От: alpha21264 СССР  
Дата: 01.04.23 17:10
Оценка: +1
Здравствуйте, Vaynamond, Вы писали:

V>Доброго времени суток!

V>Озадачился вопросом: когда, например, в Norton Commander или DOS Navigator (или другом консольном файловом менеджере ) мы нажимаем Ctrl-O (убрать панели, оставив "голую" консоль), как это реализовано ? Вывод в разные страницы, сохранение\восстановление содержимого экрана, или как-то ещё ? Тоже самое (наверное) используется в досовских консольных компиляторах по Alt-F5 "Пользовательский экран".

Это может быть реализовано любым из указанных способов. Проще посмотреть исходники.
Вообще в ДОС-е буковки просто писались в определённую область памяти.
Один экран — это всего два килобайта (с учётом цветов — четыре).

Течёт вода Кубань-реки куда велят большевики.
Re[2]: Переключение экранов в консоли MS-DOS
От: Vaynamond Россия  
Дата: 01.04.23 18:45
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Здравствуйте, Vaynamond, Вы писали:


V>>Доброго времени суток!

V>>Озадачился вопросом: когда, например, в Norton Commander или DOS Navigator (или другом консольном файловом менеджере ) мы нажимаем Ctrl-O (убрать панели, оставив "голую" консоль), как это реализовано ? Вывод в разные страницы, сохранение\восстановление содержимого экрана, или как-то ещё ? Тоже самое (наверное) используется в досовских консольных компиляторах по Alt-F5 "Пользовательский экран".

A>Это может быть реализовано любым из указанных способов. Проще посмотреть исходники.

A>Вообще в ДОС-е буковки просто писались в определённую область памяти.
A>Один экран — это всего два килобайта (с учётом цветов — четыре).

Я думал, может есть какой-то стандартный общеизвестный алгоритм, который прошел мимо меня.
Смотрел исходники DN, но поверхностно (поскольку Паскаль знаю не так хорошо, как СИ).
Склоняюсь к сохранению\восстановлению, поскольку писать в разные страницы заманчиво, но если запускаемая программа также использует переключение страниц, при восстановлении будет мусор.
Re[3]: Переключение экранов в консоли MS-DOS
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 01.04.23 19:02
Оценка: +1
Здравствуйте, Vaynamond, Вы писали:

V>Я думал, может есть какой-то стандартный общеизвестный алгоритм, который прошел мимо меня.

V>Смотрел исходники DN, но поверхностно (поскольку Паскаль знаю не так хорошо, как СИ).
V>Склоняюсь к сохранению\восстановлению, поскольку писать в разные страницы заманчиво, но если запускаемая программа также использует переключение страниц, при восстановлении будет мусор.

А нафига тебе это нужно? Чистый ДОС уже давно практически нигде не существует, а в 64х-разрядных виндах даже эмулятор выпилен. Только стороннее, типа ДосБокса. А с виндовой консолью работают по-другому, там никаких страниц видеопамяти нет.
Маньяк Робокряк колесит по городу
Re[3]: Переключение экранов в консоли MS-DOS
От: alexsmirnoff  
Дата: 01.04.23 19:14
Оценка: +1
Здравствуйте, Vaynamond, Вы писали:

V>Я думал, может есть какой-то стандартный общеизвестный алгоритм, который прошел мимо меня.

V>Смотрел исходники DN, но поверхностно (поскольку Паскаль знаю не так хорошо, как СИ).
V>Склоняюсь к сохранению\восстановлению, поскольку писать в разные страницы заманчиво, но если запускаемая программа также использует переключение страниц, при восстановлении будет мусор.

Я, когда писал под дос на асме, делал так:
заводил отдельный сегмент под видеостек.
Перед созданием на экране нового элемента (окно или элемент меню) область видеопамяти под ним сохранялась в стек, после уничтожения восстанавливалась.
Включая главное окно.
Соответственно, после закрытия программы старая картинка восстанавливалась.
Re[4]: Переключение экранов в консоли MS-DOS
От: Vaynamond Россия  
Дата: 02.04.23 11:40
Оценка:
Здравствуйте, Marty, Вы писали:

M>Здравствуйте, Vaynamond, Вы писали:


V>>Я думал, может есть какой-то стандартный общеизвестный алгоритм, который прошел мимо меня.

V>>Смотрел исходники DN, но поверхностно (поскольку Паскаль знаю не так хорошо, как СИ).
V>>Склоняюсь к сохранению\восстановлению, поскольку писать в разные страницы заманчиво, но если запускаемая программа также использует переключение страниц, при восстановлении будет мусор.

M>А нафига тебе это нужно? Чистый ДОС уже давно практически нигде не существует, а в 64х-разрядных виндах даже эмулятор выпилен. Только стороннее, типа ДосБокса. А с виндовой консолью работают по-другому, там никаких страниц видеопамяти нет.


Возник интерес в контексте использования микроконтроллеров. Там как раз, можно сказать, чистый ДОС
Даже не чистый ДОС, а просто голое железо.
Re[4]: Переключение экранов в консоли MS-DOS
От: Vaynamond Россия  
Дата: 02.04.23 11:50
Оценка:
Здравствуйте, alexsmirnoff, Вы писали:

A>Здравствуйте, Vaynamond, Вы писали:


V>>Я думал, может есть какой-то стандартный общеизвестный алгоритм, который прошел мимо меня.

V>>Смотрел исходники DN, но поверхностно (поскольку Паскаль знаю не так хорошо, как СИ).
V>>Склоняюсь к сохранению\восстановлению, поскольку писать в разные страницы заманчиво, но если запускаемая программа также использует переключение страниц, при восстановлении будет мусор.

A>Я, когда писал под дос на асме, делал так:

A>заводил отдельный сегмент под видеостек.
A>Перед созданием на экране нового элемента (окно или элемент меню) область видеопамяти под ним сохранялась в стек, после уничтожения восстанавливалась.
A>Включая главное окно.
A>Соответственно, после закрытия программы старая картинка восстанавливалась.

Да, в однопоточных консольных приложениях это стандартная процедура: сохранил область экрана, вывел своё окошко,
восстановил область экрана. Можно ещё было делать как в графическом интерфейсе (не сохранять, а перерисовывать),
но я не знаю, как заставить обновиться стандартную консоль (да и возможно ли такое вообще).
Re[5]: Переключение экранов в консоли MS-DOS
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 02.04.23 11:55
Оценка:
Здравствуйте, Vaynamond, Вы писали:

V>Возник интерес в контексте использования микроконтроллеров. Там как раз, можно сказать, чистый ДОС

V>Даже не чистый ДОС, а просто голое железо.

Какой-то очень специфический контроллер на x86 с алфивитно цифровым экраном. Я как-то писал для 186, но там никакого экрана не было. Писал и под STMки, и дисплеи к ним приделывал, так там — наоборот — обычно в дисплее видеопамяти гораздо больше, чем у контроллера оперативы. Так что — только перерисовка. В общем, нет никакого рецепта универсального
Маньяк Робокряк колесит по городу
Re: Переключение экранов в консоли MS-DOS
От: Pzz Россия https://github.com/alexpevzner
Дата: 02.04.23 16:15
Оценка:
Здравствуйте, Vaynamond, Вы писали:

V>Озадачился вопросом: когда, например, в Norton Commander или DOS Navigator (или другом консольном файловом менеджере ) мы нажимаем Ctrl-O (убрать панели, оставив "голую" консоль), как это реализовано ? Вывод в разные страницы, сохранение\восстановление содержимого экрана, или как-то ещё ? Тоже самое (наверное) используется в досовских консольных компиляторах по Alt-F5 "Пользовательский экран".


Сохранение/восстановление.

Чтобы сделать вывод в разные страницы, должен быть какой-то арбитр этих страниц, к которому все прислушиваются. А его там не было.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.