mirror of https://github.com/lianthony/NT4.0
72 lines
1.8 KiB
72 lines
1.8 KiB
PAGE,132
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;
|
|
; LIBENTRY.ASM
|
|
;
|
|
; Windows dynamic link library entry routine
|
|
;
|
|
; This module generates a code segment called INIT_TEXT.
|
|
; It initializes the local heap if one exists and then calls
|
|
; the C routine LibMain() which should have the form:
|
|
; BOOL FAR PASCAL LibMain(HANDLE hInstance,
|
|
; WORD wDataSeg,
|
|
; WORD cbHeap,
|
|
; LPSTR lpszCmdLine);
|
|
;
|
|
; The result of the call to LibMain is returned to Windows.
|
|
; The C routine should return TRUE if it completes initialization
|
|
; successfully, FALSE if some error occurs.
|
|
;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
.MODEL LARGE
|
|
|
|
EXTRN LocalInit :FAR
|
|
EXTRN __acrtused :ABS
|
|
|
|
PUBLIC LibEntry
|
|
|
|
.CODE
|
|
|
|
LibEntry PROC FAR
|
|
|
|
push bp
|
|
|
|
push di ; handle of the module instance
|
|
push ds ; library data segment
|
|
push cx ; heap size
|
|
push es ; command line segment
|
|
push si ; command line offset
|
|
|
|
; if we have some heap then initialize it
|
|
jcxz restore ; jump if no heap specified
|
|
|
|
; call the Windows function LocalInit() to set up the heap
|
|
; LocalInit((LPSTR)start, WORD cbHeap);
|
|
|
|
xor ax,ax
|
|
push ds
|
|
push ax
|
|
push cx
|
|
call LocalInit
|
|
|
|
or ax,ax
|
|
jnz restore
|
|
|
|
int 3 ; heap init failed
|
|
|
|
restore:
|
|
pop si
|
|
pop es
|
|
pop cx
|
|
pop ds
|
|
pop di
|
|
|
|
pop bp
|
|
|
|
retf
|
|
|
|
LibEntry ENDP
|
|
|
|
end LibEntry
|
|
|