summaryrefslogtreecommitdiffstats
path: root/private/sdktools/masm/fmsghdr.asm
diff options
context:
space:
mode:
Diffstat (limited to 'private/sdktools/masm/fmsghdr.asm')
-rw-r--r--private/sdktools/masm/fmsghdr.asm115
1 files changed, 115 insertions, 0 deletions
diff --git a/private/sdktools/masm/fmsghdr.asm b/private/sdktools/masm/fmsghdr.asm
new file mode 100644
index 000000000..d551ec010
--- /dev/null
+++ b/private/sdktools/masm/fmsghdr.asm
@@ -0,0 +1,115 @@
+ title fmsghdr - far message header and finder
+
+;--------------------------------------------------------------------------
+;
+; Microsoft C Compiler Runtime for MS-DOS
+;
+; (C)Copyright Microsoft Corporation, 1986
+;
+;--------------------------------------------------------------------------
+;
+; Revision History
+;
+; 04/17/86 Randy Nevin (adapted from Greg Whitten's version
+; of nmsghdr.asm)
+;
+;--------------------------------------------------------------------------
+
+
+?DF= 1 ; this is special for c startup
+include version.inc
+?PLM= 1 ; pascal calling conventions
+.xlist
+include cmacros.inc
+include msdos.inc
+.list
+
+createSeg _TEXT, code, byte, public, CODE, <>
+
+createSeg _DATA, data, word, public, DATA, DGROUP
+
+createSeg FAR_HDR,fhdr, byte, public, FAR_MSG,FMGROUP
+createSeg FAR_MSG,fmsg, byte, public, FAR_MSG,FMGROUP
+createSeg FAR_PAD,fpad, byte, common, FAR_MSG,FMGROUP
+createSeg FAR_EPAD,fepad, byte, common, FAR_MSG,FMGROUP
+
+defGrp DGROUP ; define DGROUP
+defGrp FMGROUP ; define FMGROUP
+
+codeOFFSET equ offset _TEXT:
+fmsgOFFSET equ offset FMGROUP:
+
+
+sBegin fhdr
+assumes ds,DGROUP
+
+ db '<<FMSG>>'
+stfmsg label byte
+
+sEnd
+
+SBegin fpad
+assumes ds,DGROUP
+
+ dw -1 ; message padding marker
+
+sEnd
+
+sBegin fepad
+assumes ds,DGROUP
+
+ db -1
+
+sEnd
+
+
+sBegin code
+assumes cs,code
+assumes ds,DGROUP
+
+;------------------------------------------------------------------------
+;
+; char far * pascal __FMSG_TEXT ( messagenumber)
+;
+; This routine returns a far pointer to the message associated with
+; messagenumber. If the message does not exist, then a 0:0 is returned.
+
+cProc __FMSG_TEXT,<PUBLIC>,<ds,si,di> ; pascal calling
+
+parmW msgt
+
+cBegin
+ mov ax,FMGROUP
+ mov ds,ax ; ds = FMGROUP (force it always)
+ push ds
+ pop es
+ mov dx,msgt ; dx = message number
+ mov si,fmsgOFFSET stfmsg ; start of far messages
+
+tloop:
+ lodsw ; ax = current message number
+ cmp ax,dx
+ je found ; found it - return address
+ inc ax
+ xchg ax,si
+ jz found ; at end and not found - return 0
+ xchg di,ax
+ xor ax,ax
+ mov cx,-1
+ repne scasb ; skip until 00
+ mov si,di
+ jmp tloop ; try next entry
+
+found:
+ xchg ax,si
+ cwd ; zero out dx in case NULL
+ or ax,ax
+ jz notfound
+ mov dx,ds ; remember segment selector
+notfound:
+cEnd
+
+sEnd
+
+ end
+ \ No newline at end of file