From: "Victor B. Wagner" <vitus@agropc.msk.su>
Organization: Agroecological problems Center
Aleksey Fetishev пишет:
>Многоуважаемый Олл у меня возникла огpомная необходимость пpи вызове в TV
>метода DosShell - нужно освобождать память от своей пpогpаммы(частично), а то
>сидит в памяти кусок килобайт эндак на 300 и ни хpена (извиняюсь за выpажение)
>пpиличного запустить уже нельзя. Всем кто может помочь я кpичу:"Хееелп! Сос!"
<alex@alex.mhti.msk.su>
Громак Алексей предлагает такое решение:
>Есть библиотечка SPAWN 4.0 (старая, мож у кого новее) под C/C++ и Паскакаль.
>С BP 7.0 проверял - работает. Оставляет от себя в Шелле порядка 250-300 байт
>(не помню точно). Свапится EMS/XMS/Disk весьма шустро. Использование -
>на уровне табуретки: uses Spawn; ... вызов процедурки Shell'а.
У меня самого опыта работы с именно этой библиотекой нет, но я пробовал
аналогичную библиотеку Elefant и, надо сказать, она мне не понравилась.
Когда у меня возникла аналогичная проблема, я написал собственный swapper,
исходники которого и прилагаю. Предупреждаю сразу, что адаптирован для
Turbo Vision в последний момент и от оригинального графического интерфейса
остались кое-какие хвосты, типа процедур запрещающих выключение графического
режима при выполнении CloseGraph.
Работает это так: Вы описываете ваш объект TMYApplication, который делает
все, что положено делать Turbo Vision овская программа в модуле под названием
main и компилируете файл Templ.Pas. TMyApplication должен иметь виртуальный
метод RunProgram, который и служит для выполнения команды DOS со своппингом.
В памяти при этом остается только то, что являлось главной программой, т.е
Application.Init;
Application.Run;
Application.Done;
и сама процедура своппинга (см. AtlSwap.Asm)
Для того, чтобы это занимало поменьше места и используется такая нестандартная
структура. Я чувствую, что мое решение вам не очень понравится, но исходники-
вот они. Может разберетесь и сделаете что-то свое.
P.S. Немедленную работу не гаранирую, ибо адаптация к TV не отлаживалась
Vitus Wagner
Origin:SoftWeyr
|