; int _DoubleUnsArr(a,n) ; ; ARGUMENT ; unsigned *a[]; ; unsigned n; ; ; DESCRIPTION ; Doubles the number a (taken as one number of 'n' 16-bit unsigned's). ; ; SIDE EFFECTS ; Overflow if sign bit goes set in high-order unsigned ; ; RETURNS ; None, athough they are set in AX for future use if needed ; ; AUTHOR ; Andy Anderson 31-JAN-1987 14:45 ; Copyright (C) 1987-90 Greenleaf Software Inc. All Rights Reserved. ; ; MODIFICATIONS ; ; ; include model.h include prologue.h include gm.equ pseg gmath ; ; ; if large memory model then: ; ; parm1_ = ptr to source 1 ; parm3_ = number of words to shift left (multipy by 2) ; ; for if small model then ; parm1_ = ptr to source1 ; parm2_ = number of words to shift left (multipy by 2) ; ; cproc _DoubleUnsArr,,_dmi if _LDATA push ds lds si,parm1_ ; ptr to a mov cx,parm3_ ; get number of words to shift else mov si,parm1_ mov cx,parm2_ ; ditto for small model endif xor ax,ax ; clear flags lp: rcl Word Ptr [si],1 ; word and multipy it by 2 inc si ; and increase the index (offset) inc si ; without disturbing the carry loop lp ; for next until done jc overf ; carry-out is overflow and test [si-2],8000h ; overflow if high-order set jnz overf mov ax,GM_SUCCESS ; otherwise no overflow exit: if _LDATA pop ds endif cproce overf: mov ax,GM_FAILURE jmp short exit endps END