; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл

    .486                      ; force 32 bit code
    .model flat, stdcall      ; memory model & calling convention
    option casemap :none      ; case sensitive

    .code

; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл

OPTION PROLOGUE:NONE 
OPTION EPILOGUE:NONE 

align 4

szappend proc string:DWORD,buffer:DWORD,location:DWORD

  ; ------------------------------------------------------
  ; string      the main buffer to append extra data to.
  ; buffer      the byte data to append to the main buffer
  ; location    current location pointer
  ; ------------------------------------------------------

    push esi

    mov eax, -1
    mov esi, [esp+8]        ; string
    mov ecx, [esp+12]       ; buffer
    add esi, [esp+16]       ; location ; add offset pointer to source address

  @@:
    add eax, 1
    mov dl, [ecx+eax]
    mov [esi+eax], dl
    test dl, dl
    jnz @B                  ; exit on written terminator

    add eax, [esp+16]       ; location ; return updated offset pointer

    pop esi

    ret 12

szappend endp

OPTION PROLOGUE:PrologueDef 
OPTION EPILOGUE:EpilogueDef 

; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл

end
