.286P
_TEXT   SEGMENT  WORD  PUBLIC 'CODE'
_TEXT      ENDS
_DATA   SEGMENT  WORD  PUBLIC 'DATA'
_DATA      ENDS
CONST   SEGMENT  WORD  PUBLIC 'CONST'
CONST      ENDS
_BSS    SEGMENT  WORD  PUBLIC 'BSS'
_BSS      ENDS
    DGROUP GROUP  _DATA, CONST, _BSS
    ASSUME CS:_TEXT, DS:DGROUP, ES:DGROUP, SS:DGROUP
PUBLIC  _p2w
EXTRN   _printf:NEAR

include callconv.inc        ; calling convention macros

_DATA   SEGMENT
s1      db  ' equ 0',0
s2      db  '%hX%04hXH',0ah,0
s3      db  '%hXH',0ah,0
_DATA   ends

_TEXT   segment

;
;   p2w(&ULONG which is value to print)
;
;   if ([bx+2] != 0)
;       printf(bx+2, bx, %x, %04x)
;   else
;       printf(bx, %x)

_p2w    PROC NEAR
; Line 688
        push    bp
        mov     bp, sp
        push    bx
        push    di
        push    si

        push    offset DGROUP:s1
        call    _printf
        add     sp,2

        mov     bx,[bp+4]
        cmp     word ptr [bx+2],0
        jz      p2w10

        push    [bx]
        push    [bx+2]
        push    offset DGROUP:s2
        call    _printf
        add     sp,6
        jmp     p2w20

p2w10:  push    [bx]
        push    offset DGROUP:s3
        call    _printf
        add     sp,4

p2w20:  pop     si
        pop     di
        pop     bx
        leave
        stdRET    _p2w
_p2w    ENDP

_TEXT   ENDS
END