From e611b132f9b8abe35b362e5870b74bce94a1e58e Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 16 May 2020 20:51:50 -0700 Subject: initial commit --- private/nw/nw16/drv/dllentry.asm | 81 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 private/nw/nw16/drv/dllentry.asm (limited to 'private/nw/nw16/drv/dllentry.asm') diff --git a/private/nw/nw16/drv/dllentry.asm b/private/nw/nw16/drv/dllentry.asm new file mode 100644 index 000000000..fce965935 --- /dev/null +++ b/private/nw/nw16/drv/dllentry.asm @@ -0,0 +1,81 @@ +PAGE,132 +;*************************************************************************** +;* +;* DLLENTRY.ASM +;* +;* VER.DLL Entry code +;* +;* 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. +;* +;************************************************************************** + + INCLUDE CMACROS.INC + +externFP ;The C routine to be called + +ifndef SEGNAME + SEGNAME equ <_TEXT> ; default seg name +endif + +createSeg %SEGNAME, CodeSeg, word, public, CODE + + +sBegin CodeSeg ; this defines what seg this goes in +assumes cs,CodeSeg + +?PLM=0 ;'C'naming +externA <_acrtused> ;Ensures that Win DLL startup code is linked + +?PLM=1 ;'PASCAL' naming +externFP ;Windows heap init routine + +cProc LibEntry, ;Entry point into DLL + +cBegin + 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 callc ;Jump if no heap specified + + ;** Call the Windows function LocalInit() to set up the heap + ;** LocalInit((LPSTR)start, WORD cbHeap); + + xor ax,ax + cCall LOCALINIT + or ax,ax ;Did it do it ok ? + jz error ;Quit if it failed + + ;** Invoke the C routine to do any special initialization + +callc: + call LIBMAIN ;Invoke the 'C' routine (result in AX) + jmp short exit ;LibMain is responsible for stack clean up + +error: + pop si ;Clean up stack on a LocalInit error + pop es + pop cx + pop ds + pop di +exit: + +cEnd + +sEnd _thisseg + + END LibEntry + -- cgit v1.2.3