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.

147 lines
3.4 KiB

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