;**************************************************************************** ;* * ;* WFFSC.ASM - * ;* * ;* WINFILE's File System Change Notification Handler * ;* * ;**************************************************************************** include winfile.inc ;============================================================================= externFP lstrlen externFP lstrcpy externFP LocalAlloc externFP PostMessage createSeg _%SEGNAME, %SEGNAME, WORD, PUBLIC, CODE sBegin %SEGNAME assumes CS,%SEGNAME assumes DS,DATA ;*--------------------------------------------------------------------------* ;* * ;* KernelChangeFileSystem() - * ;* * ;*--------------------------------------------------------------------------* cProc KernelChangeFileSystem, , parmW wDosFunc parmD lpFile localW handle cBegin cmp wDosFunc,4300h ; Is it get attributes? je KCFSExit ; Yup, skip ; Alloc a local buffer for the file's name. les si,lpFile push es push si call lstrlen inc ax ; Skip the NULL ; Is this a RENAME command? cmp wDosFunc,5600h jne KCFSAllocIt ; Nope, Skip ; Yup, add the length of the second string. mov di,ax ; DI = Length of first string add si,di ; SI points to second string push es push si call lstrlen add ax,di ; Add length of first string inc ax ; Include the NULL KCFSAllocIt: mov di,ax ; DI = Number of chars to copy mov dx,LMEM_NODISCARD or LMEM_NOCOMPACT or LMEM_FIXED cCall LocalAlloc, or ax,ax jz KCFSExit mov handle,ax ; Save the handle ; Copy the file's name into local storage. push ds ; Save DS mov cx,di ; CX = Length push ds pop es mov di,ax ; ES:DI = Destination lds si,lpFile ; DS:SI = Source cld rep movsb ; Copy pop ds ; Restore DS ; Compute the proper FSC_ value for wParam. mov ax,wDosFunc xchg ah,al mov ah,80h ; high bit -> dos function, not FSC sub dx,dx mov cx,WM_FILESYSCHANGE ; Post the message. cCall PostMessage,<_hwndFrame,cx,ax,dx,handle> KCFSExit: cEnd sEnd end