title nmsghdr - near message header and finder ;-------------------------------------------------------------------------- ; ; Microsoft C Compiler Runtime for MS-DOS ; ; (C)Copyright Microsoft Corporation, 1986 ; ;-------------------------------------------------------------------------- ; ; Revision History ; ; 04/03/86 Greg Whitten ; ; 05/28/86 Randy Nevin ; some pointers removed from the nhdr segment to ; save space. they were there in anticipation of ; being used as a method of changing messages, but ; it turns out they are not needed ; ;-------------------------------------------------------------------------- ?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 HDR, nhdr, byte, public, CONST, DGROUP createSeg MSG, nmsg, byte, public, CONST, DGROUP createSeg PAD, npad, byte, common, CONST, DGROUP createSeg EPAD, nepad, byte, common, CONST, DGROUP defGrp DGROUP ; define DGROUP codeOFFSET equ offset _TEXT: dataOFFSET equ offset DGROUP: sBegin nhdr assumes ds,DGROUP db '<>' stnmsg label byte sEnd sBegin npad assumes ds,DGROUP dw -1 ; message padding marker sEnd sBegin nepad assumes ds,DGROUP db -1 sEnd sBegin code assumes cs,code assumes ds,DGROUP ;------------------------------------------------------------------------ ; ; char * pascal __NMSG_TEXT ( messagenumber) ; ; This routine returns a near pointer to the message associated with ; messagenumber. If the message does not exist, then a 0 is returned. ; ; This routine reestablishes DS = ES = DGROUP cProc __NMSG_TEXT,, ; pascal calling parmW msgt cBegin mov ax,DGROUP mov ds,ax ; ds = DGROUP (force it always) push ds pop es mov dx,msgt ; dx = message number mov si,dataOFFSET stnmsg ; start of near 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 cEnd sEnd end