home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / mag&info / msjv7_6.zip / TOPTEN.ARJ / CALLBACK.ARJ / DLLSRC.ARJ / LIBENTRY.ASM < prev   
Assembly Source File  |  1992-10-01  |  2KB  |  56 lines

  1. PAGE    ,132
  2.  
  3.     extrn LibMain:far          ; the C routine to be called
  4.     extrn LocalInit:far        ; Windows heap init routine
  5.     extrn __acrtused:abs       ; ensures that Win DLL startup code is linked
  6.  
  7.     public LibEntry            ; entry point for the DLL
  8.  
  9. INIT_TEXT segment byte public 'CODE'
  10.         assume cs:INIT_TEXT
  11.  
  12. LibEntry   proc far
  13.  
  14.            push    di          ; handle of the module instance
  15.            push    ds          ; library data segment
  16.            push    cx          ; heap size
  17.            push    es          ; command line segment
  18.            push    si          ; command line offset
  19.  
  20.     ; if we have some heap then initialize it
  21.  
  22.            jcxz    callc       ; jump if no heap specified
  23.  
  24.     ; call the Windows function LocalInit() to set up the heap
  25.     ; LocalInit((LPSTR)start, WORD cbHeap);
  26.  
  27.            push    ds          ; Heap segment
  28.            xor     ax,ax
  29.            push    ax          ; Heap start offset in segment
  30.            push    cx          ; Heap end offset in segment
  31.            call    LocalInit   ; try to initialize it
  32.            or      ax,ax       ; did it do it ok ?
  33.            jz      nocall      ; quit if it failed
  34.  
  35.     ; invoke the C routine to do any special initialization
  36.  
  37. callc:
  38.            call    LibMain     ; invoke the 'C' routine (result in AX)
  39.            jmp short exit      ; LibMain is responsible for stack clean up
  40.  
  41. nocall:                        ; clean up passed params
  42.            pop     si          ; if LocalInit fails. 
  43.            pop     es
  44.            pop     cx
  45.            pop     ds
  46.            pop     di
  47.  
  48. exit:
  49.            ret                 ; return the result
  50.  
  51. LibEntry endp
  52.  
  53. INIT_TEXT  ends
  54.  
  55.            end LibEntry
  56.