1. Заголовок или название темы должно быть информативным ! 2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК ! 4.НЕ используйте форум для личного общения! 5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
Кто ни будь знает как сделать так чтобы призапуске програмы она копировала фаил в в у казаную втексте проги папку и прописавала бы в реестре запуск этого файла при загрузки компа.
Я знаю этот модуль XMS тока он у мя немного расширен по удобству почти одно и тоже но...
unit xmslib;
interface type TXMS = record MajVer,MinVer:byte; Func:pointer; end;
type PMoveStruct= ^TMoveStruct; TMoveStruct=record lenght :longint;{желательно, четная} SourceHandle :word;{0 - читать из convension memory} SourceOffset :longint;{полный pointer} DestanationHandle :word;{0 - читать из convension memory} DestanationOffset :longint;{полный pointer} end;
var IsXMS:boolean; XMS:TXMS;
procedure DetectXMS;{есть ли XMS} function XMSGetFreeMem:word;{Скока мемори свободно?} function XMSAllocateMem(size:word):word;{захватить большой кус памяти} function XMSReAllocateMem(desc,size:word):word;{переопределить размеры куска - нам вечно МАААЛО =)} function XMSFreeMem(desc:word):boolean;{Освободить кусок} procedure XMSMoveMem(MoveStruct:PMoveStruct);{перебросить инфу из памяти в память}
implementation
procedure DetectXMS; begin asm mov [IsXMS],0 {--- Is xms ---} mov ax,4300h int 2Fh cmp al,80h jne @exit mov [IsXMS],1 {--- xms control---} mov ax,4310h int 2Fh mov word ptr [XMS.func],bx mov word ptr [XMS.func+2],es {--- xms Ver---} xor ax,ax call [xms.func] mov [XMS.MajVer],ah mov [XMS.MinVer],al
@exit: end; end;
function XMSGetFreeMem:word; begin asm mov @result,0 cmp [IsXMS],0 je @exit xor ax,ax mov ah,8 call [xms.func] mov @result,dx @exit: end; end;
function XMSAllocateMem(size:word):word; begin asm mov @result,0 cmp IsXMS,0 je @exit mov ax,0900h mov dx,[size] call [xms.func] cmp ax,1 jne @exit mov @result,dx @exit: end; end;
function XMSReAllocateMem(desc,size:word):word; begin asm mov @result,0 cmp IsXMS,0 je @exit mov ax,0F00h mov bx,[size] mov dx,[desc] call [xms.func] cmp ax,1 jne @exit mov @result,dx @exit: end; end;
function XMSFreeMem(desc:word):boolean; begin asm cmp IsXMS,0 je @exit mov ax,0A00h mov dx,[desc] call [xms.func] mov @result,al @exit: end; end;
procedure XMSMoveMem(MoveStruct:PMoveStruct); begin asm cmp IsXMS,0 je @exit push ds lds si,MoveStruct mov ax,0B00h call [xms.func] pop ds @exit: end; end;
begin DetectXMS; end.
(* Здесь немнога бла бла бла по поводу - почему мне XMS больше чем EMM понравилось - так вот,
1. EMM позволяет из куска памяти в 64 Kb копировать все 64 Kb - здесь тоже самое, НО после этого, для копирования нового куска в 64 Kb здесь надо всего навсего изменить один параметр записи, а EMM необходимо сдвинуть окно (или его часть).
2.Процедуру для копирования здесь предоставляет драйвер, в EMM вы пишете ее сами.
3. Нельзя наверняк сказать - есть ли на компьютере EMM драйвер, потому что проверка осуществляеться с помощью проверки поинтера. Про XMS можно узнать однозначно путем вызова прерывания.
4. На XMS можно установить hook и проверять что программа там вызывает. *)
--------------------
- Где я? - Во тьме. - В какой тьме? - Во тьме твоего мозга.