Насчёт жизненного цикла я бы не горячился. Кофейные автоматы и торговые терминалы супермаркетов смеются над вашими представлениями о жизненном цикле. Ну хоть в бюджетных организациях от FoxPro отошли почти везде.
Добиться на Turbo Pascal того, что нужно, тем не менее, вполне возможно.
У меня стоит в подписи английская пословица, хорошего перевода которой я не нашёл, но она примерно значит «Если хочешь добраться до вершины, нужно начинать с низов». В этом смысле некоторая польза от Turbo есть. Там очень мало синтаксического сахара, нет неявных указателей, многие угловатости реального CPU чувствуются через язык, но всё же не настолько много, как в C, где даже со строками толком не поработать поначалу.
Free Pascal и GNAT — это современные 32/64хбитные компиляторы. Для программиста наиболее заметно, что на них можно выделать большие куски памяти (Turbo Pascal может максимум выделить 65536 байт одним куском, но, правда, таких кусков может быть несколько), вплоть до Гигабайтов, хотя если много выделять, работать это хорошо не будет.
Turbo Pascal и его непосредственный преемник поднялись за счёт того, что были хорошо заточены под одну OS. И модуль Crt эту заточенность воплощает. В DOS можно было выбрать только одну кодировку, в РФ это 866ая, в одной кодировке только 256 символов. Кроме того, в DOS было 16 цветов фона и цвета символа.
Насколько мне известно, все реализации Crt тащат за собой все эти ограничения. И если для Turbo Pascal это простительно, то для современных языков программирования — нет.
Пользоваться современным компилятором — это ещё значит и учитывать особенности OS. Так, например, в консоли Windows обычно 16 цветов, но зато 65536 возможных символов, в том числе там больше символов псевдографики. А в консоли POSIX обычно 8 цветов, но зато у символов могут быть эффекты подчёркивания и/или жирности. И диапазон Unicode там полный, 17*65536, в 17 раз больше. А ещё там есть какой–то свой способ рисовать псевдографику, отличающийся от вывода юникодных символов, ведь Midnight Commander мог рисовать свои рамки хоть в КОИ–8, хоть в 1251 кодировке, хотя в этих кодировках не было псевдографики. Но если работать в Юникоде, то, возможно, нет разницы.
Кроме того, есть вариации терминалов с True Color диапазоном, то есть, миллионы цветов, но, впрочем, True Color консоль я видел и для Windows. Это сделано каким–то хаком.
По–разному в разных OS сделано изменение размеров консоли. В Windows программа имеет довольно большую власть над своим окном, может произвольно менять размеры. В Windows программа может прочитать любую область своей консоли. В POSIX программа ничего не может поделать с размерами своего окна. Но ей хотя бы сигналом уведомление приходит об изменении размеров, а в Windows, судя по тому, как это сделано в far /w, только опрашивая размеры окна по таймеру, можно узнать об изменениях. И содержимое окна в POSIX читать нельзя. Такие библиотеки, как ncurses, при запуске программы инициализируют текстовый буфер в памяти, держат его копию, и когда программа изменила текстовый буфер, сравнивают старый текстовый буфер с новым, находят отличия и выводят эти отличия на экран при помощи Escape–последовательностей. И программа может читать только из этого буфера в памяти, по–настоящему доступа к консоли нет.
Кстати, в одной текстовой игре «Dwarf fortress» поддержка этих отличий кончилась тем, что игра по умолчанию работает не в настоящем текстовом режиме, а в SDL'ном окне, в котором типа текстовый режим. Но её по–прежнему можно запускать и в текстовых окнах.
Пользоваться современным компилятором — значит, быть готовым работать с отличиями OS.
Но уж если выбирать современное, то лучше Ada, чем этот исторический аппендицит Free Pascal. У вас нет миллиона строчек кода на Паскале, ради которого вам был бы важен компилятор с идентичной Паскалю семантикой со всеми его ограничениями. Если вы хотите чему–то научиться, вам хоть как придётся много писать самому.
И не заморачиваться сильно по поводу поддержки разных OS. Вот что имеет смысл — так это изолировать процедуры и функции, работающие с OS, в отдельные пакеты, которые для других OS можно потом переписать отдельно. Но я не думаю, что новичок сходу это корректно сделает, так что мой вариант — делать на Ada с использованием консольных WinAPI.
Либо оставаться в уютном мирке DOSBox.
--------------------
If you want to get to the top, you have to start at the bottom
|