home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / C++-7 / DISK7 / SOURCE / STARTUP / FMSGHDR.AS$ / FMSGHDR
Encoding:
Text File  |  1991-11-06  |  2.1 KB  |  116 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-1992, 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. include defsegs.inc
  21. .list
  22.  
  23. CrtDefSegs <code, data>
  24. CrtDefSegs <fmsg>
  25.  
  26. codeOFFSET equ    offset _TEXT:
  27. fmsgOFFSET equ    offset FMGROUP:
  28.  
  29.  
  30. sBegin    fhdr
  31. assumes ds,data
  32.  
  33.     db    '<<FMSG>>'
  34. stfmsg    label    byte
  35.  
  36. sEnd
  37.  
  38. SBegin    fpad
  39. assumes ds,data
  40.  
  41.     dw    -1        ; message padding marker
  42.  
  43. sEnd
  44.  
  45. sBegin    fepad
  46. assumes ds,data
  47.  
  48.     db    -1
  49.  
  50. sEnd
  51.  
  52.  
  53. sBegin    code
  54. assumes cs,code
  55. assumes ds,data
  56.  
  57. page
  58. ;***
  59. ;__FMSG_TEXT(messagenumber) - find message for given message number
  60. ;
  61. ;Purpose:
  62. ;    This routine returns a far pointer to the message associated with
  63. ;    messagenumber.    If the message does not exist, then a 0:0 is returned.
  64. ;
  65. ;Entry:
  66. ;    ==PASCAL CALLING CONVENTIONS==
  67. ;    messagenumber    = WORD number of desired message
  68. ;
  69. ;Exit:
  70. ;    DX:AX    = pointer to message text or 0:0 if message doesn't exist
  71. ;
  72. ;Uses:
  73. ;
  74. ;Exceptions:
  75. ;
  76. ;*******************************************************************************
  77.  
  78. cProc    __FMSG_TEXT,<PUBLIC>,<ds,si,di>  ; pascal calling
  79.  
  80. parmW    msgt
  81.  
  82. cBegin
  83.     mov    ax,FMGROUP
  84.     mov    ds,ax        ; ds = FMGROUP (force it always)
  85.     push    ds
  86.     pop    es
  87.     mov    dx,msgt     ; dx = message number
  88.     mov    si,fmsgOFFSET stfmsg ; start of far messages
  89.  
  90. tloop:
  91.     lodsw            ; ax = current message number
  92.     cmp    ax,dx
  93.     je    found        ;   found it - return address
  94.     inc    ax
  95.     xchg    ax,si
  96.     jz    found        ;   at end and not found - return 0
  97.     xchg    di,ax
  98.     xor    ax,ax
  99.     mov    cx,-1
  100.     repne    scasb        ; skip until 00
  101.     mov    si,di
  102.     jmp    tloop        ; try next entry
  103.  
  104. found:
  105.     xchg    ax,si
  106.     cwd            ; zero out dx in case NULL
  107.     or    ax,ax
  108.     jz    notfound
  109.     mov    dx,ds        ; remember segment selector
  110. notfound:
  111. cEnd
  112.  
  113. sEnd
  114.  
  115.     end
  116.