Доброго времени суток!
Озадачился вопросом: когда, например, в Norton Commander или DOS Navigator (или другом консольном файловом менеджере ) мы нажимаем Ctrl-O (убрать панели, оставив "голую" консоль), как это реализовано ? Вывод в разные страницы, сохранение\восстановление содержимого экрана, или как-то ещё ? Тоже самое (наверное) используется в досовских консольных компиляторах по Alt-F5 "Пользовательский экран".
Здравствуйте, Vaynamond, Вы писали:
V>Доброго времени суток! V>Озадачился вопросом: когда, например, в Norton Commander или DOS Navigator (или другом консольном файловом менеджере ) мы нажимаем Ctrl-O (убрать панели, оставив "голую" консоль), как это реализовано ? Вывод в разные страницы, сохранение\восстановление содержимого экрана, или как-то ещё ? Тоже самое (наверное) используется в досовских консольных компиляторах по Alt-F5 "Пользовательский экран".
Это может быть реализовано любым из указанных способов. Проще посмотреть исходники.
Вообще в ДОС-е буковки просто писались в определённую область памяти.
Один экран — это всего два килобайта (с учётом цветов — четыре).
Здравствуйте, alpha21264, Вы писали:
A>Здравствуйте, Vaynamond, Вы писали:
V>>Доброго времени суток! V>>Озадачился вопросом: когда, например, в Norton Commander или DOS Navigator (или другом консольном файловом менеджере ) мы нажимаем Ctrl-O (убрать панели, оставив "голую" консоль), как это реализовано ? Вывод в разные страницы, сохранение\восстановление содержимого экрана, или как-то ещё ? Тоже самое (наверное) используется в досовских консольных компиляторах по Alt-F5 "Пользовательский экран".
A>Это может быть реализовано любым из указанных способов. Проще посмотреть исходники. A>Вообще в ДОС-е буковки просто писались в определённую область памяти. A>Один экран — это всего два килобайта (с учётом цветов — четыре).
Я думал, может есть какой-то стандартный общеизвестный алгоритм, который прошел мимо меня.
Смотрел исходники DN, но поверхностно (поскольку Паскаль знаю не так хорошо, как СИ).
Склоняюсь к сохранению\восстановлению, поскольку писать в разные страницы заманчиво, но если запускаемая программа также использует переключение страниц, при восстановлении будет мусор.
Здравствуйте, Vaynamond, Вы писали:
V>Я думал, может есть какой-то стандартный общеизвестный алгоритм, который прошел мимо меня. V>Смотрел исходники DN, но поверхностно (поскольку Паскаль знаю не так хорошо, как СИ). V>Склоняюсь к сохранению\восстановлению, поскольку писать в разные страницы заманчиво, но если запускаемая программа также использует переключение страниц, при восстановлении будет мусор.
А нафига тебе это нужно? Чистый ДОС уже давно практически нигде не существует, а в 64х-разрядных виндах даже эмулятор выпилен. Только стороннее, типа ДосБокса. А с виндовой консолью работают по-другому, там никаких страниц видеопамяти нет.
Здравствуйте, Vaynamond, Вы писали:
V>Я думал, может есть какой-то стандартный общеизвестный алгоритм, который прошел мимо меня. V>Смотрел исходники DN, но поверхностно (поскольку Паскаль знаю не так хорошо, как СИ). V>Склоняюсь к сохранению\восстановлению, поскольку писать в разные страницы заманчиво, но если запускаемая программа также использует переключение страниц, при восстановлении будет мусор.
Я, когда писал под дос на асме, делал так:
заводил отдельный сегмент под видеостек.
Перед созданием на экране нового элемента (окно или элемент меню) область видеопамяти под ним сохранялась в стек, после уничтожения восстанавливалась.
Включая главное окно.
Соответственно, после закрытия программы старая картинка восстанавливалась.
Здравствуйте, Marty, Вы писали:
M>Здравствуйте, Vaynamond, Вы писали:
V>>Я думал, может есть какой-то стандартный общеизвестный алгоритм, который прошел мимо меня. V>>Смотрел исходники DN, но поверхностно (поскольку Паскаль знаю не так хорошо, как СИ). V>>Склоняюсь к сохранению\восстановлению, поскольку писать в разные страницы заманчиво, но если запускаемая программа также использует переключение страниц, при восстановлении будет мусор.
M>А нафига тебе это нужно? Чистый ДОС уже давно практически нигде не существует, а в 64х-разрядных виндах даже эмулятор выпилен. Только стороннее, типа ДосБокса. А с виндовой консолью работают по-другому, там никаких страниц видеопамяти нет.
Возник интерес в контексте использования микроконтроллеров. Там как раз, можно сказать, чистый ДОС
Даже не чистый ДОС, а просто голое железо.
Здравствуйте, alexsmirnoff, Вы писали:
A>Здравствуйте, Vaynamond, Вы писали:
V>>Я думал, может есть какой-то стандартный общеизвестный алгоритм, который прошел мимо меня. V>>Смотрел исходники DN, но поверхностно (поскольку Паскаль знаю не так хорошо, как СИ). V>>Склоняюсь к сохранению\восстановлению, поскольку писать в разные страницы заманчиво, но если запускаемая программа также использует переключение страниц, при восстановлении будет мусор.
A>Я, когда писал под дос на асме, делал так: A>заводил отдельный сегмент под видеостек. A>Перед созданием на экране нового элемента (окно или элемент меню) область видеопамяти под ним сохранялась в стек, после уничтожения восстанавливалась. A>Включая главное окно. A>Соответственно, после закрытия программы старая картинка восстанавливалась.
Да, в однопоточных консольных приложениях это стандартная процедура: сохранил область экрана, вывел своё окошко,
восстановил область экрана. Можно ещё было делать как в графическом интерфейсе (не сохранять, а перерисовывать),
но я не знаю, как заставить обновиться стандартную консоль (да и возможно ли такое вообще).
Здравствуйте, Vaynamond, Вы писали:
V>Возник интерес в контексте использования микроконтроллеров. Там как раз, можно сказать, чистый ДОС V>Даже не чистый ДОС, а просто голое железо.
Какой-то очень специфический контроллер на x86 с алфивитно цифровым экраном. Я как-то писал для 186, но там никакого экрана не было. Писал и под STMки, и дисплеи к ним приделывал, так там — наоборот — обычно в дисплее видеопамяти гораздо больше, чем у контроллера оперативы. Так что — только перерисовка. В общем, нет никакого рецепта универсального
Здравствуйте, Vaynamond, Вы писали:
V>Озадачился вопросом: когда, например, в Norton Commander или DOS Navigator (или другом консольном файловом менеджере ) мы нажимаем Ctrl-O (убрать панели, оставив "голую" консоль), как это реализовано ? Вывод в разные страницы, сохранение\восстановление содержимого экрана, или как-то ещё ? Тоже самое (наверное) используется в досовских консольных компиляторах по Alt-F5 "Пользовательский экран".
Сохранение/восстановление.
Чтобы сделать вывод в разные страницы, должен быть какой-то арбитр этих страниц, к которому все прислушиваются. А его там не было.