home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l040 / 13.ddi / RTLSYS.ZIP / DLIB.ASM < prev    next >
Encoding:
Assembly Source File  |  1992-10-28  |  1.9 KB  |  96 lines

  1.  
  2. ; *******************************************************
  3. ; *                            *
  4. ; *     Turbo Pascal Run-time Library                   *
  5. ; *    DPMI Library Main Module            *
  6. ; *                            *
  7. ; *     Copyright (c) 1988,92 Borland International     *
  8. ; *                            *
  9. ; *******************************************************
  10.  
  11.     TITLE    DLIB
  12.  
  13.     INCLUDE    SE.ASM
  14.  
  15. DATA    SEGMENT WORD PUBLIC
  16.  
  17. ; Externals
  18.  
  19.     EXTRN    HeapAllocFlags:WORD,ExitCode:WORD,HInstance:WORD
  20.     EXTRN    SelectorInc:WORD,Seg0040:WORD,SegA000:WORD
  21.     EXTRN    SegB000:WORD,SegB800:WORD,Test8086:BYTE
  22.  
  23. DATA    ENDS
  24.  
  25. ; Run-time manager externals
  26.  
  27.     EXTRN    __AHIncr:ABS,__0040H:ABS,__A000H:ABS
  28.     EXTRN    __B000H:ABS,__B800H:ABS
  29.  
  30. CODE    SEGMENT    BYTE PUBLIC
  31.  
  32.     ASSUME    CS:CODE,DS:DATA
  33.  
  34. ; Externals
  35.  
  36.     EXTRN    DoExitProcs:NEAR
  37.  
  38. ; Publics
  39.  
  40.     PUBLIC    LibEntry,LibExit,LibExitProc
  41.  
  42. ; Library entry code. Every .DLL executable starts with a call
  43. ; to this routine.
  44.  
  45. LibEntry:
  46.  
  47.     MOV    HInstance,DI        ;Save instance handle
  48.     MOV    AX,dpmiGetVersion    ;Determine CPU type
  49.     INT    DPMI
  50.     DEC    CL
  51.     MOV    Test8086,CL
  52.     MOV    HeapAllocFlags,2002H    ;gmem_Moveable + gmem_DDEShare
  53.     MOV    SelectorInc,__AHIncr    ;Set selector increment
  54.     MOV    Seg0040,__0040H        ;Set predefined selectors
  55.     MOV    SegA000,__A000H
  56.     MOV    SegB000,__B000H
  57.     MOV    SegB800,__B800H
  58.     MOV    ExitCode,1        ;Default exit code is 1
  59.     RETF
  60.  
  61. ; Library exit code. Every .DLL executable ends with a call to
  62. ; this routine.
  63.  
  64. LibExit:
  65.  
  66.     POP    AX            ;Remove return address
  67.     POP    AX
  68.     MOV    AX,ExitCode        ;Get exit code
  69.     MOV    DI,HInstance        ;Restore DI
  70.     RETF                ;Return to operating system
  71.  
  72. ; Library exit procedure (automatically exported as 'WEP')
  73.  
  74. LibExitProc:
  75.  
  76.     PUSH    BP
  77.     MOV    BP,SP
  78.     PUSH    SI
  79.     PUSH    DI
  80.     PUSH    DS
  81.     MOV    AX,SEG DATA
  82.     MOV    DS,AX
  83.     MOV    AX,[BP+6]        ;Get WEP parameter
  84.     MOV    ExitCode,AX        ;Store in ExitCode
  85.     CALL    DoExitProcs        ;Execute exit procedures
  86.     MOV    AX,1            ;Successful termination
  87.     POP    DS
  88.     POP    DI
  89.     POP    SI
  90.     POP    BP
  91.     RETF    2
  92.  
  93. CODE    ENDS
  94.  
  95.     END
  96.