Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

144 lines
3.2 KiB

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;
  3. ; LIBENTRY.ASM
  4. ;
  5. ; Copyright (c) Microsoft Corporation 1989, 1990. All rights reserved.
  6. ;
  7. ; This module contains the entry point for MMsystem.dll
  8. ;
  9. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  10. PMODE = 1
  11. include cmacros.inc
  12. ?PLM=1 ; pascal call convention
  13. ?WIN=0 ; Windows prolog/epilog code
  14. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  15. ;
  16. ; extrns
  17. ;
  18. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  19. externNP LibMain
  20. externFP LocalInit
  21. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  22. ;
  23. ; Code segment
  24. ;
  25. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  26. ifndef SEGNAME
  27. SEGNAME equ <_TEXT>
  28. endif
  29. createSeg %SEGNAME, CodeSeg, word, public, CODE
  30. ;-----------------------------------------------------------------------;
  31. ;
  32. ; Stuff needed to avoid the C runtime coming in, and init the windows
  33. ; reserved parameter block at the base of DGROUP
  34. ;
  35. sBegin Data
  36. assumes DS,Data
  37. DD 0 ; So null pointers get 0
  38. maxRsrvPtrs = 5
  39. DW maxRsrvPtrs
  40. usedRsrvPtrs = 0
  41. labelDP <PUBLIC,rsrvptrs>
  42. DefRsrvPtr MACRO name
  43. globalW name,0
  44. usedRsrvPtrs = usedRsrvPtrs + 1
  45. ENDM
  46. DefRsrvPtr pLocalHeap ; Local heap pointer
  47. DefRsrvPtr pAtomTable ; Atom table pointer
  48. DefRsrvPtr pStackTop ; top of stack
  49. DefRsrvPtr pStackMin ; minimum value of SP
  50. DefRsrvPtr pStackBot ; bottom of stack
  51. if maxRsrvPtrs-usedRsrvPtrs
  52. DW maxRsrvPtrs-usedRsrvPtrs DUP (0)
  53. endif
  54. public __acrtused
  55. __acrtused = 1
  56. sEnd Data
  57. sBegin CodeSeg
  58. assumes cs,CodeSeg
  59. assumes ds,Data
  60. assumes es,nothing
  61. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  62. ;
  63. ; Library entry point
  64. ;
  65. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  66. ;--------------------------Private-Routine-----------------------------;
  67. ;
  68. ; LibEntry - called when DLL is loaded
  69. ;
  70. ; Entry:
  71. ; CX = size of heap
  72. ; DI = module handle
  73. ; DS = automatic data segment
  74. ; ES:SI = address of command line (not used)
  75. ;
  76. ; Returns:
  77. ; AX = TRUE if success
  78. ; Error Returns:
  79. ; AX = FALSE if error (ie fail load process)
  80. ; Registers Preserved:
  81. ; SI,DI,DS,BP
  82. ; Registers Destroyed:
  83. ; AX,BX,CX,DX,ES,FLAGS
  84. ; Calls:
  85. ; None
  86. ; History:
  87. ;
  88. ; 06-27-89 -by- Todd Laney [ToddLa]
  89. ; Created.
  90. ;-----------------------------------------------------------------------;
  91. cProc LibEntry,<FAR,PUBLIC,NODATA>,<>
  92. cBegin
  93. ;
  94. ; Push frame for LibMain (hModule,cbHeap,lpszCmdLine)
  95. ;
  96. push di
  97. push cx
  98. push es
  99. push si
  100. ;
  101. ; Init the local heap (if one is declared in the .def file)
  102. ;
  103. jcxz no_heap
  104. xor ax,ax
  105. cCall LocalInit,<ax,ax,cx>
  106. no_heap:
  107. cCall LibMain
  108. cEnd
  109. assumes ds,nothing
  110. assumes es,nothing
  111. cProc WEP, <FAR, PUBLIC, PASCAL>, <>
  112. ; ParmW fSystemExit
  113. cBegin nogen
  114. mov ax, 1
  115. retf 2
  116. cEnd nogen
  117. sEnd CodeSeg
  118. end LibEntry