VFARCALL = 1 VPASCAL = 2 VFARPTR = 4 VDEALLOC = 8 VSTORECNT = 10h VFASTCALL = 20h VHUGEVECT = 40h VFASTTHIS = 80h VTHISLAST = 100h VCALLTYPE = 1A7h ; void __far _vector_new_(void far *ptr, size_t size, unsigned __int32 count, unsigned int mode, ...) public @_vector_new_$qnvuiuluie @_vector_new_$qnvuiuluie proc DIST @@Length = dword ptr -1Ch @@PadFromZero = word ptr -18h @@Header = word ptr -16h @@var_14 = word ptr -14h @@var_12 = dword ptr -12h @@Overhead = word ptr -0Eh @@construct = word ptr -0Ch @@fp = dword ptr -0Ah @@np = word ptr -6 @@ap = dword ptr -4 @@ptr = dword ptr 6 @@size = word ptr 0Ah @@count = dword ptr 0Ch @@mode = word ptr 10h @@va = byte ptr 12h push bp mov bp, sp sub sp, 1Ch push si push di mov [bp+@@construct], 1 mov [bp+@@Overhead], 0 nopcall @__RefDestructorCount$qv ; __RefDestructorCount(void) mov bx, ax mov es, dx mov dx, es:[bx+2] mov ax, es:[bx] mov word ptr [bp+@@var_12+2], dx mov word ptr [bp+@@var_12], ax lea ax, [bp+@@va] mov word ptr [bp+@@ap+2], ss mov word ptr [bp+@@ap], ax test byte ptr [bp+@@mode], VFARCALL jz short @@loc_10083 add word ptr [bp+@@ap], 4 les bx, [bp+@@ap] mov dx, es:[bx-2] mov ax, es:[bx-4] mov word ptr [bp+@@fp+2], dx mov word ptr [bp+@@fp], ax or ax, word ptr [bp+@@fp+2] jnz short @@storeCount? jmp short @@loc_10097 @@loc_10083: add word ptr [bp+@@ap], 2 les bx, [bp+@@ap] mov ax, es:[bx-2] mov [bp+@@np], ax cmp [bp+@@np], 0 jnz short @@storeCount? @@loc_10097: mov [bp+@@construct], 0 @@storeCount?: test byte ptr [bp+@@mode], VSTORECNT jz short @@loc_100A7 mov [bp+@@Overhead], 4 @@loc_100A7: mov ax, word ptr [bp+@@ptr] or ax, word ptr [bp+@@ptr+2] jz short @@hugeVect? jmp @@loc_10179 @@hugeVect?: test byte ptr [bp+@@mode], VHUGEVECT jz short @@loc_10134 add [bp+@@Overhead], 2 mov bx, [bp+@@size] xor cx, cx mov dx, word ptr [bp+@@count+2] mov ax, word ptr [bp+@@count] call N_LXMUL@ add ax, [bp+@@Overhead] adc dx, 0 add ax, [bp+@@size] adc dx, 0 push dx push ax nopcall @$bnwa$qul ; operator new[](ulong) pop cx pop cx mov word ptr [bp+@@ptr+2], dx mov word ptr [bp+@@ptr], ax or ax, word ptr [bp+@@ptr+2] jnz short @@loc_100ED jmp @@ret0 @@loc_100ED: xor ax, ax push ax push [bp+@@size] mov ax, 1 xor dx, dx push ax push dx call N_LMOD@ mov [bp+@@PadFromZero], ax mov ax, word ptr [bp+@@ptr] mov [bp+@@Header], ax jmp short @@loc_1010E @@loc_10108: mov ax, [bp+@@size] add [bp+@@PadFromZero], ax @@loc_1010E: mov ax, [bp+@@Overhead] add ax, [bp+@@Header] cmp ax, [bp+@@PadFromZero] ja short @@loc_10108 mov ax, [bp+@@PadFromZero] sub ax, [bp+@@Header] sub ax, [bp+@@Overhead] add word ptr [bp+@@ptr], ax les bx, [bp+@@ptr] mov ax, [bp+@@Header] mov es:[bx], ax add word ptr [bp+@@ptr], 2 jmp short @@loc_10179 @@loc_10134: mov bx, [bp+@@size] xor cx, cx mov dx, word ptr [bp+@@count+2] mov ax, word ptr [bp+@@count] call N_LXMUL@ add ax, [bp+@@Overhead] adc dx, 0 mov word ptr [bp+@@Length+2], dx mov word ptr [bp+@@Length], ax cmp word ptr [bp+@@Length+2], 0 jb short @@loc_1015E ja short @@ret0 cmp word ptr [bp+@@Length], 0FFFFh jbe short @@loc_1015E jmp short @@ret0 @@loc_1015E: push word ptr [bp+@@Length] nopcall @$bnwa$qui ; operator new[](uint) pop cx mov word ptr [bp+@@ptr+2], dx mov word ptr [bp+@@ptr], ax or ax, word ptr [bp+@@ptr+2] jnz short @@loc_10179 @@ret0: xor dx, dx xor ax, ax jmp @@ret @@loc_10179: test byte ptr [bp+@@mode], VSTORECNT jz short @@loc_10193 les bx, [bp+@@ptr] mov dx, word ptr [bp+@@count+2] mov ax, word ptr [bp+@@count] mov es:[bx+2], dx mov es:[bx], ax add word ptr [bp+@@ptr], 4 @@loc_10193: cmp [bp+@@construct], 0 jnz short @@loc_1019C jmp @@loc_1028C @@loc_1019C: mov ax, [bp+@@mode] and ax, VCALLTYPE mov [bp+@@Header], ax test byte ptr [bp+@@mode], VFASTTHIS jz short @@loc_101B0 and [bp+@@Header], not VTHISLAST @@loc_101B0: mov dx, word ptr [bp+@@ptr+2] mov ax, word ptr [bp+@@ptr] mov [bp+@@PadFromZero], dx mov word ptr [bp+@@Length+2], ax jmp @@loc_1026E @@loc_101BF: mov ax, [bp+@@Header] mov [bp+@@var_14], ax mov cx, 10h ; switch 16 cases mov bx, offset word_102B3 @@loc_101CB: mov ax, cs:[bx] cmp ax, [bp+@@var_14] jz short @@loc_101DA add bx, 2 loop @@loc_101CB jmp short @@default ; default @@loc_101DA: jmp word ptr cs:[bx+20h] ; switch jump vnewf_101DE: push [bp+@@PadFromZero] ; jumptable 000101DA case 4 push word ptr [bp+@@Length+2] call [bp+@@np] jmp short @@loc_101F2 vnewf_101E9: push [bp+@@PadFromZero] ; jumptable 000101DA case 5 push word ptr [bp+@@Length+2] call [bp+@@fp] @@loc_101F2: pop cx pop cx jmp short @@loc_1025B vnewf_101F6: push [bp+@@PadFromZero] ; jumptable 000101DA cases 6,36,262,292 push word ptr [bp+@@Length+2] call [bp+@@np] jmp short @@loc_1020A vnewf_10201: push [bp+@@PadFromZero] ; jumptable 000101DA cases 7,37,263,293 push word ptr [bp+@@Length+2] call [bp+@@fp] @@loc_1020A: jmp short @@loc_1025B vnewf_1020C: push ds ; jumptable 000101DA case 132 push si lds si, [bp+@@Length+2] call [bp+@@np] pop si pop ds jmp short @@loc_1025B vnewf_10218: push ds ; jumptable 000101DA case 133 push si lds si, [bp+@@Length+2] call [bp+@@fp] pop si pop ds jmp short @@loc_1025B vnewf_10224: push ds ; jumptable 000101DA case 134 push si lds si, [bp+@@Length+2] call [bp+@@np] pop si pop ds jmp short @@loc_1025B vnewf_10230: push ds ; jumptable 000101DA case 135 push si lds si, [bp+@@Length+2] call [bp+@@fp] pop si pop ds jmp short @@loc_1025B vnewf_1023C: push ds ; jumptable 000101DA case 164 push si lds si, [bp+@@Length+2] call [bp+@@np] pop si pop ds jmp short @@loc_1025B vnewf_10248: push ds ; jumptable 000101DA case 165 push si lds si, [bp+@@Length+2] push bx pop bx call [bp+@@fp] pop si pop ds jmp short @@loc_1025B @@default: nopcall _abort @@loc_1025B: mov ax, [bp+@@size] xor dx, dx add word ptr [bp+@@Length+2], ax adc dx, 0 mov cx, offset __AHSHIFT shl dx, cl add [bp+@@PadFromZero], dx @@loc_1026E: mov ax, word ptr [bp+@@count+2] mov dx, word ptr [bp+@@count] sub word ptr [bp+@@count], 1 sbb word ptr [bp+@@count+2], 0 or ax, ax jbe short @@loc_10283 jmp @@loc_101BF @@loc_10283: jnz short @@loc_1028C or dx, dx jbe short @@loc_1028C jmp @@loc_101BF @@loc_1028C: test byte ptr [bp+@@mode+1], 2 jz short @@ret_ptr nopcall @__RefDestructorCount$qv ; __RefDestructorCount(void) mov bx, word ptr [bp+@@var_12+2] mov cx, word ptr [bp+@@var_12] mov es, dx xchg ax, bx mov es:[bx+2], ax mov es:[bx], cx @@ret_ptr: mov dx, word ptr [bp+@@ptr+2] mov ax, word ptr [bp+@@ptr] @@ret: pop di pop si mov sp, bp pop bp ret @_vector_new_$qnvuiuluie endp word_102B3 dw 4, 5, 6, 7 dw 24h, 25h, 84h, 85h ; value table for switch statement dw 86h, 87h, 0A4h, 0A5h dw 106h, 107h, 124h, 125h dw offset vnewf_101DE ; jump table for switch statement dw offset vnewf_101E9 dw offset vnewf_101F6 dw offset vnewf_10201 dw offset vnewf_101F6 dw offset vnewf_10201 dw offset vnewf_1020C dw offset vnewf_10218 dw offset vnewf_10224 dw offset vnewf_10230 dw offset vnewf_1023C dw offset vnewf_10248 dw offset vnewf_101F6 dw offset vnewf_10201 dw offset vnewf_101F6 dw offset vnewf_10201