home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / l / l291 / 5.ddi / FMSGHDR.AS$ / FMSGHDR.bin
Encoding:
Text File  |  1989-08-31  |  2.4 KB  |  124 lines

  1.     page    ,132
  2.     title    fmsghdr       - far message handler and finder
  3. ;***
  4. ;fmsghdr.asm - far message handler and finder
  5. ;
  6. ;    Copyright (c) 1986-1990, Microsoft Corporation.  All rights reserved.
  7. ;
  8. ;Purpose:
  9. ;    Far message handler and finder.
  10. ;
  11. ;*******************************************************************************
  12.  
  13.  
  14. ?DF=    1            ; this is special for c startup
  15. include version.inc
  16. ?PLM=    1            ; pascal calling conventions
  17. .xlist
  18. include cmacros.inc
  19. include msdos.inc
  20. .list
  21.  
  22. createSeg _TEXT, code,    word,    public, CODE,    <>
  23.  
  24. createSeg _DATA, data,    word,    public, DATA,    DGROUP
  25.  
  26. createSeg FAR_HDR,fhdr, byte,    public, FAR_MSG,FMGROUP
  27. createSeg FAR_MSG,fmsg, byte,    public, FAR_MSG,FMGROUP
  28. createSeg FAR_PAD,fpad, byte,    common, FAR_MSG,FMGROUP
  29. createSeg FAR_EPAD,fepad, byte, common, FAR_MSG,FMGROUP
  30.  
  31. defGrp    DGROUP            ; define DGROUP
  32. defGrp    FMGROUP         ; define FMGROUP
  33.  
  34. codeOFFSET equ    offset _TEXT:
  35. fmsgOFFSET equ    offset FMGROUP:
  36.  
  37.  
  38. sBegin    fhdr
  39. assumes ds,data
  40.  
  41.     db    '<<FMSG>>'
  42. stfmsg    label    byte
  43.  
  44. sEnd
  45.  
  46. SBegin    fpad
  47. assumes ds,data
  48.  
  49.     dw    -1        ; message padding marker
  50.  
  51. sEnd
  52.  
  53. sBegin    fepad
  54. assumes ds,data
  55.  
  56.     db    -1
  57.  
  58. sEnd
  59.  
  60.  
  61. sBegin    code
  62. assumes cs,code
  63. assumes ds,data
  64.  
  65. page
  66. ;***
  67. ;__FMSG_TEXT(messagenumber) - find message for given message number
  68. ;
  69. ;Purpose:
  70. ;    This routine returns a far pointer to the message associated with
  71. ;    messagenumber.    If the message does not exist, then a 0:0 is returned.
  72. ;
  73. ;Entry:
  74. ;    ==PASCAL CALLING CONVENTIONS==
  75. ;    messagenumber    = WORD number of desired message
  76. ;
  77. ;Exit:
  78. ;    DX:AX    = pointer to message text or 0:0 if message doesn't exist
  79. ;
  80. ;Uses:
  81. ;
  82. ;Exceptions:
  83. ;
  84. ;*******************************************************************************
  85.  
  86. cProc    __FMSG_TEXT,<PUBLIC>,<ds,si,di>  ; pascal calling
  87.  
  88. parmW    msgt
  89.  
  90. cBegin
  91.     mov    ax,FMGROUP
  92.     mov    ds,ax        ; ds = FMGROUP (force it always)
  93.     push    ds
  94.     pop    es
  95.     mov    dx,msgt     ; dx = message number
  96.     mov    si,fmsgOFFSET stfmsg ; start of far messages
  97.  
  98. tloop:
  99.     lodsw            ; ax = current message number
  100.     cmp    ax,dx
  101.     je    found        ;   found it - return address
  102.     inc    ax
  103.     xchg    ax,si
  104.     jz    found        ;   at end and not found - return 0
  105.     xchg    di,ax
  106.     xor    ax,ax
  107.     mov    cx,-1
  108.     repne    scasb        ; skip until 00
  109.     mov    si,di
  110.     jmp    tloop        ; try next entry
  111.  
  112. found:
  113.     xchg    ax,si
  114.     cwd            ; zero out dx in case NULL
  115.     or    ax,ax
  116.     jz    notfound
  117.     mov    dx,ds        ; remember segment selector
  118. notfound:
  119. cEnd
  120.  
  121. sEnd
  122.  
  123.     end
  124.