LIBINIT.ASM
上传用户:yuandong
上传日期:2022-08-08
资源大小:954k
文件大小:4k
源码类别:

Delphi控件源码

开发平台:

C++ Builder

  1. ;****************************************************************************
  2. ;                                                                           *
  3. ; THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY     *
  4. ; KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE       *
  5. ; IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR     *
  6. ; PURPOSE.                                                                  *
  7. ;                                                                           *
  8. ; Copyright (C) 1993-95  Microsoft Corporation.  All Rights Reserved.       *
  9. ;                                                                           *
  10. ;****************************************************************************
  11. page ,132
  12. ;-----------------------------Module-Header-----------------------------;
  13. ; Module Name:  LIBENTRY.ASM
  14. ;
  15. ; library stub to do local init for a Dynamic linked library
  16. ;
  17. ; Created: 06-27-89
  18. ;
  19. ; Exported Functions:   none
  20. ;
  21. ; Public Functions:     none
  22. ;
  23. ; Public Data: none
  24. ;
  25. ; General Description:
  26. ;
  27. ; Restrictions:
  28. ;
  29. ;   This must be the first object file in the LINK line, this assures
  30. ;   that the reserved parameter block is at the *base* of DGROUP
  31. ;
  32. ;-----------------------------------------------------------------------;
  33. ?PLM=1      ; PASCAL Calling convention is DEFAULT
  34. ?WIN=1     ; Windows calling convention
  35.         .286p
  36. .xlist
  37. include cmacros.inc
  38.         .list
  39. ifndef SEGNAME
  40.     SEGNAME equ <_TEXT>
  41. endif
  42. createSeg %SEGNAME, CodeSeg, word, public, CODE
  43. ;-----------------------------------------------------------------------;
  44. ;   external functions
  45. ;
  46.         externFP    LocalInit           ; in KERNEL
  47.         externFP    LibMain             ; C code to do DLL init
  48. ;-----------------------------------------------------------------------;
  49. ;
  50. ; Stuff needed to avoid the C runtime coming in, and init the windows
  51. ; reserved parameter block at the base of DGROUP
  52. ;
  53. %out link me first!!
  54. sBegin  Data
  55. assumes DS,Data
  56.             org 0               ; base of DATA segment!
  57.             DD  0               ; So null pointers get 0
  58. maxRsrvPtrs = 5
  59.             DW  maxRsrvPtrs
  60. usedRsrvPtrs = 0
  61. labelDP     <PUBLIC,rsrvptrs>
  62. DefRsrvPtr  MACRO   name
  63. globalW     name,0
  64. usedRsrvPtrs = usedRsrvPtrs + 1
  65. ENDM
  66. DefRsrvPtr  pLocalHeap          ; Local heap pointer
  67. DefRsrvPtr  pAtomTable          ; Atom table pointer
  68. DefRsrvPtr  pStackTop           ; top of stack
  69. DefRsrvPtr  pStackMin           ; minimum value of SP
  70. DefRsrvPtr  pStackBot           ; bottom of stack
  71. if maxRsrvPtrs-usedRsrvPtrs
  72.             DW maxRsrvPtrs-usedRsrvPtrs DUP (0)
  73. endif
  74. public  __acrtused
  75. __acrtused = 1
  76. sEnd        Data
  77. ;-----------------------------------------------------------------------;
  78. sBegin  CodeSeg
  79.         assumes cs,CodeSeg
  80. ;--------------------------Private-Routine-----------------------------;
  81. ;
  82. ; LibEntry - called when DLL is loaded
  83. ;
  84. ; Entry:
  85. ;       CX    = size of heap
  86. ;       DI    = module handle
  87. ;       DS    = automatic data segment
  88. ;       ES:SI = address of command line (not used)
  89. ;
  90. ; Returns:
  91. ;       AX = TRUE if success
  92. ; Error Returns:
  93. ;       AX = FALSE if error (ie fail load process)
  94. ; Registers Preserved:
  95. ; SI,DI,DS,BP
  96. ; Registers Destroyed:
  97. ;       AX,BX,CX,DX,ES,FLAGS
  98. ; Calls:
  99. ; None
  100. ; History:
  101. ;
  102. ;-----------------------------------------------------------------------;
  103. cProc   LibEntry,<FAR,PUBLIC,NODATA>,<>
  104. cBegin
  105. ;
  106.         ; Push frame for LibMain (hModule,cbHeap,lpszCmdLine)
  107. ;
  108. push di
  109. push cx
  110. push es
  111. push si
  112.         ;
  113.         ; Init the local heap (if one is declared in the .def file)
  114.         ;
  115.         jcxz no_heap
  116.         cCall   LocalInit,<0,0,cx>
  117. no_heap:
  118.         cCall   LibMain
  119. cEnd
  120. sEnd    CodeSeg
  121.         end     LibEntry