home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / os2sdk / os2sdk12 / ddeml / dmgstrt.asm < prev    next >
Encoding:
Assembly Source File  |  1990-06-22  |  2.5 KB  |  133 lines

  1. ;  DDE manager library initialization routine
  2.  
  3. .286p
  4.  
  5. ?WIN=1      ; Use Windows prolog/epilog
  6. ?PLM=1      ; Use PLM calling convention
  7. DOS5=1
  8. .xlist
  9. include cmacros.inc
  10. .list
  11.  
  12. sBegin  DATA
  13.  
  14. assumes DS,DATA
  15.  
  16. externW hmodDmg
  17. externW usHugeShift
  18.  
  19. sEnd    DATA
  20.  
  21. sBegin  CODE
  22. assumes cs,CODE
  23. assumes ds,DATA
  24.  
  25. externNP        SemInit
  26.  
  27. ;
  28. ; Registers set up by DosLoadModule...
  29. ;
  30. ;   SI = heap size
  31. ;   DI = module ID
  32. ;   DS = library's automatic data segment
  33. ;
  34. cProc   LoadProc,<FAR,PUBLIC>
  35. cBegin  LoadProc
  36. ;       int     3
  37.         mov     hmodDmg, di
  38.         call    SemInit
  39. cEnd    LoadProc
  40.  
  41. ;
  42. ; FillBlock(PBYTE pDst, USHORT cb, BYTE b)
  43. ;
  44. cProc    FillBlock,<PUBLIC, NEAR>,<DI, DS>
  45. ParmD    pDst
  46. ParmW    cb
  47. ParmW    b
  48. cBegin
  49.     les    di,pDst
  50.     mov    cx,cb
  51.     mov    ax,b
  52.     cld
  53.     rep    stosb
  54. cEnd
  55.  
  56. ;
  57. ; CopyBlock(pbSrc, pbDst, cb)
  58. ;
  59. LabelNP <PUBLIC, CopyBlock>
  60.         mov     bx,sp
  61.         push    si
  62.         push    di
  63.         mov     dx,ds               ; preserve DS
  64.  
  65.         mov     cx,ss:[bx+2]
  66.         jcxz    copydone           ; all done if crc   == 0
  67.         les     di,ss:[bx+2+2]
  68.         lds     si,ss:[bx+2+2+4]
  69.         cmp     si,di
  70.         jae     copyok
  71.         mov     ax,cx
  72.         dec     ax
  73.         add     si,ax
  74.         add     di,ax
  75.         std
  76.         rep     movsb
  77.         cld
  78.         jmp     short copydone
  79. copyok:
  80.         cld
  81.         rep     movsb
  82. copydone:
  83.  
  84.         mov     ds,dx
  85.         pop     di
  86.         pop     si
  87.         ret     10
  88.  
  89.  
  90. cProc HugeOffset,<NEAR, PUBLIC>
  91. parmD   pSrc
  92. parmD   cb
  93. cBegin
  94.         mov     dx, SEG_cb
  95.         mov     ax, OFF_pSrc
  96.         add     ax, OFF_cb
  97.         adc     dx, 0
  98.         mov     cx, usHugeShift
  99.         shl     dx, cl
  100.         add     dx, SEG_pSrc
  101. cEnd  
  102.  
  103.  
  104. LabelFP <PUBLIC, DdeDebugBreak>
  105.         int     3
  106.         retf    0
  107.  
  108. ;
  109. ; Returns segment size or 0 on error.
  110. ;
  111. LabelNP <PUBLIC, CheckSel>
  112. ;    parmW   Selector    ; selector to validate
  113. cBegin  nogen
  114.         mov     bx,sp               ; BX = selector to validate
  115.         mov     bx,ss:[bx].2
  116.         lar     ax,bx               ; See if valid selector
  117.         jnz     invalid_selector
  118.         
  119.         lsl     ax,bx
  120.         or      ax,ax               ; zero sized?
  121.         jnz     valid_selector      ; nope, ok.
  122.  
  123. invalid_selector:
  124.         xor     ax,ax               ; Return zero just to be nice
  125.         
  126. valid_selector:
  127.         ret     2
  128.         
  129. cEnd    nogen
  130.         
  131. sEnd    CODE
  132. end     LoadProc
  133.