Библиотека Интернет Индустрии I2R.ru |
|||
|
Как заставить программы Turbo Pascal 7.0 работать на быстрых компьютерахКак показали отклики по поводу первой статьи из серии о Turbo Pascal, данная тема действительно ничуть себя не изжила. Первая благодарность - тем, кто написал мне лично и в редакцию, тем более, что письма были написаны действительно со знанием темы. О присланных программах на Паскале я скоро расскажу в отдельной статье, а сегодня обсудим программу CrtDebug, которая позволяет программам, откомпилированным на TP 7.0, работать на быстрых компьютерах. Программу CrtDebug прислал мне читатель СофтТерры Василий Ханефт, скачать ее можно здесь, а e-mail ее автора Валерьяна Ивашенко из Минска - iVA99@xoommail.com. CRTDebug предназначена для корректировки exe-файлов, созданных с помощью Borland Pascal 7.0. При исполнении на быстрых процессорах из-за некорректного кода CRT модуля происходит ошибка: 200 Division by zero. Модуль CRT содержит такие подчас необходимые функции, как управление выводом на дисплей, позиционирование курсора, работа с цветом текста, подача звуковых сигналов, использование таймера. Многие программы при переносе на быстрые ПК выдают ошибку 200 Division by zero и оставляют пользователя в недоумении. Ранее я советовал использовать Turbo Pascal 6.0, эта версия не дает подобной ошибки. Но с ней неудобно работать из-под Windows: под Windows 98 Turbo Pascal 6.0 не может работать совместно с другими программами, компьютер целиком переводится в режим эмуляции MS-DOS. После появления у меня программы CrtDebug, Turbo (Borland) Pascal 7.0 действительно заработал. Плюсом этого компилятора является не только возможность не мешать многозадачности Windows, но и более продуманный интерфейс с большим количеством установок, "раскраской" операторов и возможностью компилировать программы для работы в защищенном режиме. Также Borland Pascal 7.0 способен компилировать программы под Windows и имеет ряд функций, не включенных в шестую версию. Но в настоящее время для программирования под Windows используются, как правило, другие программы, поэтому для нас основные положительные стороны Borland Pascal 7.0 - "раскраска" операторов и работа в многозадачных ОС. Пользоваться программой CrtDebug очень просто. Чтобы восстановить работоспособность программ, откомпилированных в Borland Pascal 7.0, необходимо запустить CRTDebug: CRTDebug filename.ext <число> Здесь filename.ext - имя файла, который вы хотите исправить, а <число> - параметр, значением которого может быть любое целое число в диапазоне от 55 до 65535. Желательно, чтобы исправляемый файл не был упакован упаковщиками exe-файлов - в противном случае файл скорее всего не будет исправлен. Главное же - исправить файлы turbo.tpl и tpp.tpl. Для этого выполните: CRTDebug turbo.tpl <число> CRTDebug tpp.tpl <число> После этого вы сможете использовать ваш BP 7.0 при компиляции программ на машине с быстрым процессором. Параметр <число> является необязательным, лично я его не указывал и получил вполне удовлетворительный результат. Если вы не находите файла tpp.tpl, не переживайте:я его тоже не нашел, однако все работает нормально:). В качестве примечания автор CrtDebug предостерегает: если в ваших файлах используется паскалевская процедура CRT.Delay, то нет гарантии, что программа будет работать корректно. В этом случае попробуйте поизменять значение параметра <число>. Если это не поможет, то файл можно вернуть в исходное состояние таким образом: CRTDebug filename.ext 55 Если же вы скорректировали BP-библиотеки turbo.tpl и tpp.tpl и не использовали при этом числовой параметр, то в процедуру Delay необходимо подставлять значение в десятитысячных долях секунды. От себя добавлю, что значение Delay изначально указывалось в миллисекундах, то есть тысячных долях секунды. Напоследок для интересующихся объясню, почему, собственно, в модуле crt возникает такая загадочная ошибка. Как известно, процедура delay является частью модуля и используется как простейший ничего не делающий цикл, позволяющий задержать выполнение программы. Процедура delay инициализируется, даже если она и не применяется в программе. При инициализации модуля crt программа выясняет, сколько итераций пустого цикла необходимо осуществить, чтобы остановить программу на 55 миллисекунд. Полученный результат записывается в 16-битную переменную. На быстрых ПК это число оказывается более 65535, и ячейка переполняется, вызывая ошибку, которую Borland Pascal определяет как 200 Division by zero ("Деление на ноль"). Более подробную информацию на английском и другой вариант патча вы найдете на сайте немецкого товарища Клауса Хартнегга. Кстати, там предлагается несколько различных вариантов решения данной проблемы. Также рекомендую FAQ по Паскалю (на русском). |
|
2000-2008 г. Все авторские права соблюдены. |
|