Sziasztok!
Kovetkezo a problemam: van egy program, ami onmaga min. 40 KB memoriat
foglal, es azt kene megoldanom, hogy ez a program elindit egy masik
programot (vagy vegrehajt egy DOS parancsot). Azonban nagyon sok az a 40
KB, ami a memoriaban marad, ezert valahogy ki kene szedni az INDITO
programot, az inditott program lefutasa utan pedig vissza kene tolteni.
(Ez egy fajlkezelo)
A rendszer DOS alatt fut, es Borland C-ben irom. A spawn fuggvenyek
megfelelnenek, mert tudnak ugy inditani programot, hogy az anyaprogram
futasa befejezodik a masik program inditasa elott (P_OVERLAY), azonban
ha lefut a progi, vissza is kene valahogy tolteni az anyaprogramot. Es
ez itt a gond.
Eddig ezek jutottak eszembe:
- foglalok 1-2 KB memoriat, ahova bemasolok egy direkt erre a celra
megirt assembly .COM programot. Utana ezt kene elinditani az
anyaprogrambol (de hogyan?). Ez a kis progi TSR, es elinditja azt a
progit, amit az anyaprogram futtatni akart. Ha lefutott a progi, akkor
visszatolti az anyaprogramot, de megszunik TSR-nek lenni (ezt sem tudom
hogyan lehet elerni), es befejezodik a
futasa, utana pedig elindul az anyaprogram. Tehat amiben a
segitsegeteket kerem: hogyan lehet egy memoriatartalmat a DOS altal
programnak elfogadtatni es elinditani (nem sima JMP-ra gondolok, hanem
szabvany DOS fuggvenyre) ugy, hogy az indito program futasa befejezodik
es felszabadul utana a memoria. Tovabba ez a kis indito TSR vissza kell
toltse az anyaprogramot, es meg kell szunnie TSR-nek lenni... de hogyan
tegyem ezt?
- szinten egy kis TSR kell, ami raul az INT21h-ra, elinditja a progit,
es ha program vege (AX=4C00h INT21h) hivast erzekel, a hivas
vegrehajtasa utan visszatolti az anyaprogramot es tobbe nem TSR. Siman
a C programombol nem irhatok INT21h-ra megszakitaskezelot, mert akkor az
egesz progi bent marad a memoriaban, es pont ezt akarom elkerulni. Tehat
egy kulon program kell (en assembly-ban szeretnem megirni), ami TSR
lesz, es csak annyira fugg az anyaprogramtol, hogy az inditja valahogy
el. Azonban ez a kis program az anyaprogram vegen, az .EXE fajlban
kerulne tarolasra, tehat onnan be kell masolni a memoriaba (ez nem
gond), es programot csinalni belole (ez gond), hogy a DOS elfogadja.
Melyik az a DOS szolgaltatas, ami ugy futtat egy progit, hogy a hivo
program futasa vegleg megszunik (mintha kileptunk volna belole)? Mert
tudnia kell, hiszen a spawn is tudja! (P_OVERLAY mod) Igazabol ez az
INT21h-es megoldas tunik nekem egyszerubbenk, azonban azt is meg kene
oldani, hogy sima DOS parancsokat is futtatni tudjon, ezt viszont a
COMMAND.COM-nak kene valahogy atadni...
Remelem nem voltam nagyon bonyolult, kerlek segitsetek! Assembly
megoldasok elonyben, de barmilyen otletet, infot szivesen fogadok.
Koszi
Udv
--
Tamas Selmeci / TOR][UM
mailto:
F0 0F C7 C8 rulez!
|