From: "Victor B. Wagner" <vitus@agropc.msk.su>
Subj: А знаете ли вы что... (ver 2).10H советов программисту на TP
Organization: Agroecological problems Center
Около месяца назад я уже посылал первую версию этого текста в
телеконференцию. Тогда советов было 8. Сейчас их число выросло
вдвое. Но поскольку первые советы прошли в сезон летних отпусков,
я на всякий случай повторяю и их.
Приглашаю всех кто совершает маленькие открытия в процессе работы
с Turbo Pascal следовать моему примеру и писать о них не дожидаясь,
пока кто-нибудь отчаянно завопит: "HE-E-ELP!!!" Вдруг кому приго-
дится.
А знаете ли вы?
Несколько (10h) советов программисту на Turbo Pascal
>$0001
А знаете ли вы , что процедура Rename в Turbo Pascal поз-
воляет перемещать файлы из одного каталога в другой (правда в
пределах одного диска)?
>$0002
А знаете ли вы, что вопреки тому, что утверждается в Help,
из программы на TP можно открыть более 16 файлов (в пределе -
столько, сколько написано в команде FILES CONFIG.SYS). Вот так:
Procedure SetMaxFiles(Count:Word);assembler;
asm
Mov AH,67H
MOV BX,Count
Int 21H
end;
После этого вызываете SetMaxFiles(40) и 40 файлов (включая,
правда 5 стандартных) в вашем распоряжении.
>$0003
А знаете ли вы, что для того, чтобы вызвать из вашей прог-
раммы другую, совершенно не обязательно задавать директиву $M и
ограничивать память вашей программы еще в момент компиляции.
Имеющаяся в модуле Memory Turbo Vision процедура SetMemTop поз-
воляет отдать дочернему процессу всю свободную динамическую па-
мять. Вот так
SetMemTop(HeapPtr);{Отдаем память}
Exec(GetEnv('COMSPEC'),'');{В данном случае вызываем DOSShell}
SetMemTop(HeapEnd);{Забираем ее обратно}
>$0004
А знаете ли вы (по-моему, этого не знает даже Питер Нор-
тон), что запуская из вашей программы DOSShell вы вполне можете
оставить в Environment достаточно свободного места для работы
сложных BAT-файлов. Решение лежит на поверхности: Пусть пере-
менная EnvSize:Integer содержит размер корневого Environment
(откуда вы его возьмете - ваше дело. Можно воспользоваться мо-
дулем TPEnv из архива BONUS в TurboProfessional, можно просто
задать константу побольше. Далее делаем вот так
Str(EnvSize,tmpString);
Exec(GetEnv('COMSPEC'),'/E:'+tmpString);
Почему этого не сделал
|