From 39f3b4e741badf7aac0594e928aa24ed0c756949 Mon Sep 17 00:00:00 2001 From: nmlgc Date: Tue, 5 Aug 2014 21:24:06 +0200 Subject: [PATCH] th01/op: Initial state --- th01_op.asm | 45099 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45099 insertions(+) create mode 100644 th01_op.asm diff --git a/th01_op.asm b/th01_op.asm new file mode 100644 index 00000000..e466cba9 --- /dev/null +++ b/th01_op.asm @@ -0,0 +1,45099 @@ +; --------------------------------------------------------------------------- + +BYTEREGS struc ; (sizeof=0x8, standard type) +_al db ? +_ah db ? +_bl db ? +_bh db ? +_cl db ? +_ch db ? +_dl db ? +_dh db ? +BYTEREGS ends + +; --------------------------------------------------------------------------- + +WORDREGS struc ; (sizeof=0x10, standard type) +_ax dw ? +_bx dw ? +_cx dw ? +_dx dw ? +_si dw ? +_di dw ? +cflag dw ? +flags dw ? +WORDREGS ends + +; --------------------------------------------------------------------------- + +REGS union ; (sizeof=0x10, standard type) +x WORDREGS ? +h BYTEREGS ? +REGS ends + +; --------------------------------------------------------------------------- + +SREGS struc ; (sizeof=0x8, standard type) +_es dw ? +_cs dw ? +_ss dw ? +_ds dw ? +SREGS ends + + +; +; +-------------------------------------------------------------------------+ +; | This file has been generated by The Interactive Disassembler (IDA) | +; | Copyright (c) 2009 by Hex-Rays, | +; +-------------------------------------------------------------------------+ +; +; Input MD5 : AD4E53E1F1A042FBDA82F86B9BD6728C + +; File Name : th01/OP.EXE +; Format : MS-DOS executable (EXE) +; Base Address: 0h Range: 0h-14040h Loaded length: 13418h +; Entry Point : 0:0 +; OS type : MS DOS +; Application type: Executable 16bit + + .386 + .model large + +; =========================================================================== + +; Segment type: Pure code +seg000 segment byte public 'CODE' use16 + assume cs:seg000 + assume es:nothing, ss:seg017, ds:nothing, fs:nothing, gs:nothing + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function noreturn + + public start +start proc far ; CODE XREF: seg000:13D4J + mov dx, seg dseg + mov cs:DGROUP@, dx + mov ah, 30h + int 21h ; DOS - GET DOS VERSION + ; Return: AL = major version number (00h for DOS 1.x) + mov bp, ds:2 + mov bx, ds:2Ch + mov ds, dx + assume ds:dseg + mov word_1230C, ax + mov segx, es + mov word_12306, bx + mov word_1231E, bp + call sub_178 + mov ax, word_12306 + mov es, ax + xor ax, ax + mov bx, ax + mov di, ax + mov cx, 7FFFh + cld + +loc_37: ; CODE XREF: start+3Fj + repne scasb + jcxz short loc_7E + inc bx + cmp es:[di], al + jnz short loc_37 + or ch, 80h + neg cx + mov word_12304, cx + mov cx, 2 + shl bx, cl + add bx, 10h + and bx, 0FFF0h + mov word_12308, bx + mov dx, ss + sub bp, dx + mov di, seg dseg + mov es, di + assume es:dseg + mov di, es:word_12EC8 + cmp di, 200h + jnb short loc_75 + mov di, 200h + mov es:word_12EC8, di + +loc_75: ; CODE XREF: start+6Bj + mov cl, 4 + shr di, cl + inc di + cmp bp, di + jnb short loc_83 + +loc_7E: ; CODE XREF: start+39j + nop + push cs + call near ptr sub_1C47 +; --------------------------------------------------------------------------- + +loc_83: ; CODE XREF: start+7Cj + mov bx, di + add bx, dx + mov word_12316, bx + mov word_1231A, bx + mov ax, segx + sub bx, ax + mov es, ax + assume es:nothing + mov ah, 4Ah ; 'J' + push di + int 21h ; DOS - 2+ - ADJUST MEMORY BLOCK SIZE (SETBLOCK) + ; ES = segment address of block to change + ; BX = new size in paragraphs + pop di + shl di, cl + cli + mov ss, dx + assume ss:nothing + mov sp, di + sti + mov ax, seg dseg + mov es, ax + assume es:dseg + mov es:word_12EC8, di + xor ax, ax + mov es, cs:DGROUP@ + assume es:nothing + mov di, 1188h + mov cx, 1D2Ah + sub cx, di + cld + rep stosb + cmp word_12E1A, 14h + jbe short loc_110 + cmp byte ptr word_1230C, 3 + jb short loc_110 + ja short loc_D7 + cmp byte ptr word_1230C+1, 1Eh + jb short loc_110 + +loc_D7: ; CODE XREF: start+CEj + mov ax, 5801h + mov bx, 2 + int 21h ; DOS - 3+ - GET/SET MEMORY ALLOCATION STRATEGY + ; AL = function code: set allocation strategy + jb short loc_10B + mov ah, 67h ; 'g' + mov bx, word_12E1A + int 21h ; DOS - 3.3+ - SET HANDLE COUNT + ; BX = desired number of handles (max 255) + jb short loc_10B + mov ah, 48h ; 'H' + mov bx, 1 + int 21h ; DOS - 2+ - ALLOCATE MEMORY + ; BX = number of 16-byte paragraphs desired + jb short loc_10B + inc ax + mov word_1231E, ax + dec ax + mov es, ax + assume es:nothing + mov ah, 49h + int 21h ; DOS - 2+ - FREE MEMORY + ; ES = segment address of area to be freed + jb short loc_10B + mov ax, 5801h + mov bx, 0 + int 21h ; DOS - 3+ - GET/SET MEMORY ALLOCATION STRATEGY + ; AL = function code: set allocation strategy + jnb short loc_110 + +loc_10B: ; CODE XREF: start+DFj start+E9j ... + nop + push cs + call near ptr sub_1C47 +; --------------------------------------------------------------------------- + +loc_110: ; CODE XREF: start+C5j start+CCj ... + xor bp, bp + push bp + nop + push cs + call near ptr __ExceptInit + pop ax + mov es, cs:DGROUP@ + assume es:nothing + mov si, 1146h + mov di, 117Ch + call sub_1E8 + push word_12302 + push envp ; envp + push word_122FE + push argv ; argv + push argc ; argc + call far ptr _main + push ax ; status + nop + push cs + call near ptr _exit +; --------------------------------------------------------------------------- + +__cleanup: ; CODE XREF: sub_1F21+26p + mov es, cs:DGROUP@ + push si + push di + mov si, 117Ch + mov di, 1188h + call sub_22C + pop di + pop si + retf +start endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +__checknull proc far ; CODE XREF: sub_1F21+34p + retf +__checknull endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function noreturn bp-based frame + +__terminate proc near ; CODE XREF: sub_1F21+50p + +arg_2 = byte ptr 4 + + mov bp, sp + mov ah, 4Ch ; 'L' + mov al, [bp+arg_2] + int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT) +__terminate endp ; AL = exit code + +; --------------------------------------------------------------------------- + mov dx, 4Bh ; 'K' + push ds + push dx + nop + push cs + call near ptr ___ErrorMessage + pop dx + pop ds + mov ax, 3 + push ax + nop + push cs + call near ptr __exit + +; =============== S U B R O U T I N E ======================================= + + +sub_178 proc near ; CODE XREF: start+25p + push ds + mov ax, 3500h + int 21h ; DOS - 2+ - GET INTERRUPT VECTOR + ; AL = interrupt number + ; Return: ES:BX = value of interrupt vector + mov word ptr dword_122EA, bx + mov word ptr dword_122EA+2, es + mov ax, 3504h + int 21h ; DOS - 2+ - GET INTERRUPT VECTOR + ; AL = interrupt number + ; Return: ES:BX = value of interrupt vector + mov word ptr dword_122EE, bx + mov word ptr dword_122EE+2, es + mov ax, 3505h + int 21h ; DOS - 2+ - GET INTERRUPT VECTOR + ; AL = interrupt number + ; Return: ES:BX = value of interrupt vector + mov word ptr dword_122F2, bx + mov word ptr dword_122F2+2, es + mov ax, 3506h + int 21h ; DOS - 2+ - GET INTERRUPT VECTOR + ; AL = interrupt number + ; Return: ES:BX = value of interrupt vector + mov word ptr dword_122F6, bx + mov word ptr dword_122F6+2, es + mov ax, 2500h + mov dx, cs + mov ds, dx + assume ds:seg000 + mov dx, 163h + int 21h ; DOS - SET INTERRUPT VECTOR + ; AL = interrupt number + ; DS:DX = new vector to be used for specified interrupt + pop ds + assume ds:dseg + retn +sub_178 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +__restorezero proc far ; CODE XREF: sub_1F21+2Fp + push ds + mov ax, 2500h + lds dx, dword_122EA + int 21h ; DOS - SET INTERRUPT VECTOR + ; AL = interrupt number + ; DS:DX = new vector to be used for specified interrupt + pop ds + push ds + mov ax, 2504h + lds dx, dword_122EE + int 21h ; DOS - SET INTERRUPT VECTOR + ; AL = interrupt number + ; DS:DX = new vector to be used for specified interrupt + pop ds + push ds + mov ax, 2505h + lds dx, dword_122F2 + int 21h ; DOS - SET INTERRUPT VECTOR + ; AL = interrupt number + ; DS:DX = new vector to be used for specified interrupt + pop ds + push ds + mov ax, 2506h + lds dx, dword_122F6 + int 21h ; DOS - SET INTERRUPT VECTOR + ; AL = interrupt number + ; DS:DX = new vector to be used for specified interrupt + pop ds + retf +__restorezero endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_1E8 proc near ; CODE XREF: start+124p sub_1E8+3Aj ... + mov ax, 100h + mov dx, di + mov bx, si + +loc_1EF: ; CODE XREF: sub_1E8+22j + cmp bx, di + jz short loc_20C + cmp byte ptr es:[bx], 0FFh + jz short loc_207 + mov cl, es:[bx+1] + xor ch, ch + cmp cx, ax + jnb short loc_207 + mov ax, cx + mov dx, bx + +loc_207: ; CODE XREF: sub_1E8+Fj sub_1E8+19j + add bx, 6 + jmp short loc_1EF +; --------------------------------------------------------------------------- + +loc_20C: ; CODE XREF: sub_1E8+9j + cmp dx, di + jz short locret_22B + mov bx, dx + cmp byte ptr es:[bx], 0 + mov byte ptr es:[bx], 0FFh + push es + jz short loc_224 + call dword ptr es:[bx+2] + pop es + jmp short sub_1E8 +; --------------------------------------------------------------------------- + +loc_224: ; CODE XREF: sub_1E8+33j + call word ptr es:[bx+2] + pop es + jmp short sub_1E8 +; --------------------------------------------------------------------------- + +locret_22B: ; CODE XREF: sub_1E8+26j + retn +sub_1E8 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_22C proc near ; CODE XREF: start+153p sub_22C+37j ... + mov ah, 0 + mov dx, di + mov bx, si + +loc_232: ; CODE XREF: sub_22C+1Fj + cmp bx, di + jz short loc_24D + cmp byte ptr es:[bx], 0FFh + jz short loc_248 + cmp es:[bx+1], ah + jb short loc_248 + mov ah, es:[bx+1] + mov dx, bx + +loc_248: ; CODE XREF: sub_22C+Ej sub_22C+14j + add bx, 6 + jmp short loc_232 +; --------------------------------------------------------------------------- + +loc_24D: ; CODE XREF: sub_22C+8j + cmp dx, di + jz short locret_26C + mov bx, dx + cmp byte ptr es:[bx], 0 + mov byte ptr es:[bx], 0FFh + push es + jz short loc_265 + call dword ptr es:[bx+2] + pop es + jmp short sub_22C +; --------------------------------------------------------------------------- + +loc_265: ; CODE XREF: sub_22C+30j + call word ptr es:[bx+2] + pop es + jmp short sub_22C +; --------------------------------------------------------------------------- + +locret_26C: ; CODE XREF: sub_22C+23j + retn +sub_22C endp + +; --------------------------------------------------------------------------- +DGROUP@ dw 0 ; DATA XREF: start+3w start+B0r ... +__MMODEL db 4, 0C0h, 6 dup(0), 2 dup(7), 2 dup(0), 7, 0, 7, 0, 7 + db 2 dup(0), 4 dup(7), 0, 3 dup(7), 5 dup(0), 2 dup(0Fh) + db 2 dup(0), 0Fh, 0, 0Fh, 0, 0Fh, 2 dup(0), 4 dup(0Fh) + db 0, 3 dup(0Fh) +word_2A2 dw 0 ; DATA XREF: seg000:03E3w sub_8D8+1Dr ... +word_2A4 dw 0 ; DATA XREF: seg000:02F0r seg000:0344r ... +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push ds + lds dx, [bp+12h] + mov ax, [bp+0Eh] + add ax, 0Fh + shr ax, 4 + add ax, [bp+10h] + mov es, ax + cld + mov si, dx + xor dx, dx + mov di, dx + lodsb + xor ch, ch + mov cl, al + rep movsb + xor al, al + stosb + push es + pop ds + mov si, [bp+0Ch] + mov ax, [bp+0Eh] + and ax, 0Fh + sub si, ax + mov bx, [bp+0Ah] + mov cx, [bp+8] + mov di, [bp+6] + mov ax, [bp+4] + call loc_3E2 + pop ds + pop bp + retn 10h +; --------------------------------------------------------------------------- + mov bx, sp + push ds + mov ax, cs:word_2A4 + mov ds, ax + mov es, ax + mov al, ss:[bx+2] + mov byte_123C8, al + call sub_BE3 + pop ds + retn 2 +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + push ds + mov bx, ds + mov es, bx + assume es:dseg + mov dx, [bp+4] + mov ax, [bp+6] + add ax, 0Fh + shr ax, 4 + add ax, bx + mov ds, ax + mov si, [bp+8] + mov ax, [bp+6] + and ax, 0Fh + sub si, ax + mov bx, [bp+0Ah] + mov cx, [bp+0Ch] + mov di, [bp+0Eh] + mov ax, [bp+10h] + call loc_3E2 + pop ds + pop di + pop si + pop bp + retn +; --------------------------------------------------------------------------- + mov bx, sp + push ds + push si + push di + mov ax, cs:word_2A4 + mov ds, ax + mov es, ax + assume es:nothing + mov al, ss:[bx+2] + mov byte_123C8, al + call sub_BE3 + pop di + pop si + pop ds + retn + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_35A proc far ; CODE XREF: sub_DAEC+48P + +arg_0 = dword ptr 6 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch +arg_8 = word ptr 0Eh +arg_A = word ptr 10h +arg_C = word ptr 12h +arg_E = word ptr 14h +arg_10 = word ptr 16h + + push bp + mov bp, sp + push si + push di + push ds + les dx, [bp+arg_0] + mov ax, [bp+arg_4] + add ax, 0Fh + shr ax, 4 + add ax, [bp+arg_6] + mov ds, ax + mov si, [bp+arg_8] + mov ax, [bp+arg_4] + and ax, 0Fh + sub si, ax + mov bx, [bp+arg_A] + mov cx, [bp+arg_C] + mov di, [bp+arg_E] + mov ax, [bp+arg_10] + call loc_3E2 + pop ds + pop di + pop si + pop bp + retf +sub_35A endp + +; --------------------------------------------------------------------------- + mov bx, sp + push ds + push si + push di + mov ax, cs:word_2A4 + mov ds, ax + mov es, ax + mov al, ss:[bx+4] + mov byte_123C8, al + call sub_BE3 + pop di + pop si + pop ds + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + push ds + les dx, [bp+4] + mov ax, [bp+8] + add ax, 0Fh + shr ax, 4 + add ax, [bp+0Ah] + mov ds, ax + mov si, [bp+0Ch] + mov ax, [bp+8] + +loc_3C8: ; DATA XREF: sub_E3E5+1Ar + and ax, 0Fh + sub si, ax + mov bx, [bp+0Eh] + mov cx, [bp+10h] + mov di, [bp+12h] + mov ax, [bp+14h] + call loc_3E2 + pop ds + pop di + pop si + pop bp + retn +; --------------------------------------------------------------------------- + +locret_3E1: ; CODE XREF: seg000:0409j + retn +; --------------------------------------------------------------------------- + +loc_3E2: ; CODE XREF: seg000:02E5p seg000:0337p ... + cld + mov cs:word_2A2, sp + mov cs:word_2A4, ds + mov word_123C0, bx + mov word_123C2, cx + mov word_123C9, ax + mov ax, di + mov byte_123C8, al + xor ax, ax + mov byte_123CB, al + mov ax, 0FFF8h + cmp si, 1FA2h + jb short locret_3E1 + mov ax, si + sub ax, 1F60h + mov word_123D6, ax + add ax, 1F60h + mov word ptr cs:loc_736+2, ax + mov word ptr cs:loc_746+2, ax + mov word ptr cs:loc_756+2, ax + mov word ptr cs:loc_766+2, ax + mov word ptr cs:loc_776+2, ax + mov word ptr cs:loc_7E0+2, ax + mov word ptr cs:loc_5DA+2, ax + mov word ptr cs:loc_5EA+2, ax + mov word ptr cs:loc_614+2, ax + mov word ptr cs:loc_624+2, ax + mov word ptr cs:loc_634+2, ax + mov word ptr cs:loc_644+2, ax + mov word ptr cs:loc_6B6+2, ax + mov word ptr cs:loc_716+2, ax + mov word ptr cs:loc_726+2, ax + mov word ptr cs:loc_8B3+2, ax + +loc_456: ; DATA XREF: sub_9DC6+Cr sub_9CDD+1Cr + mov word ptr cs:loc_7F0+2, ax + +loc_45A: ; DATA XREF: sub_9DC6+16r + mov word ptr cs:loc_863+2, ax + mov word ptr cs:loc_873+2, ax + mov word ptr cs:loc_883+2, ax + mov word ptr cs:loc_893+2, ax + mov word ptr cs:loc_8A3+2, ax + push es + pop ds + call sub_8D2 + mov bx, cs:word_2A4 + mov ds, bx + mov es, bx + jb short locret_48F + mov word_123D0, ax + call sub_8D8 + mov si, bx + lodsw + cmp ax, 4E5Ah + mov ax, 0FFE1h + jz short loc_490 + +locret_48F: ; CODE XREF: seg000:047Cj seg000:04B5j + retn +; --------------------------------------------------------------------------- + +loc_490: ; CODE XREF: seg000:048Dj + test byte ptr word_123C9, 4 + jz short loc_4A4 + +loc_497: ; CODE XREF: seg000:04A2j + lodsb + cmp al, 1Ah + jz short loc_4A4 + mov dl, al + mov ah, 2 + int 21h ; DOS - DISPLAY OUTPUT + ; DL = character to send to standard output + jmp short loc_497 +; --------------------------------------------------------------------------- + +loc_4A4: ; CODE XREF: seg000:0495j seg000:049Aj ... + lodsb + or al, al + jnz short loc_4A4 + lodsb + mov bl, al + lodsw + mov cx, ax + lodsb + cmp al, 4 + mov ax, 0FFE0h + jnz short locret_48F + test byte ptr word_123C9, 8 + jz short loc_4C3 + mov ax, cx + call sub_904 + +loc_4C3: ; CODE XREF: seg000:04BCj + add si, 4 + lodsw + xchg ah, al + xor cx, cx + mov dx, cx + mov di, ax + add di, si + and ax, ax + jz short loc_50C + +loc_4D5: ; CODE XREF: seg000:04EEj seg000:04F9j ... + cmp si, di + jz short loc_50C + lodsb + cmp al, 1 + jz short loc_4E4 + cmp al, 2 + jz short loc_4F0 + jmp short loc_50C +; --------------------------------------------------------------------------- + +loc_4E4: ; CODE XREF: seg000:04DCj + lodsw + xchg ah, al + mov cx, ax + lodsw + xchg ah, al + mov dx, ax + jmp short loc_4D5 +; --------------------------------------------------------------------------- + +loc_4F0: ; CODE XREF: seg000:04E0j + add si, 3 + lodsb + test byte ptr word_123C9, 40h + jnz short loc_4D5 + cmp byte ptr word_123C9+1, 0FFh + +loc_500: ; DATA XREF: _main+114r _main+124w ... + jz short loc_4D5 + mov byte ptr word_123C9+1, al + or byte ptr word_123C9, 40h + jmp short loc_4D5 +; --------------------------------------------------------------------------- + +loc_50C: ; CODE XREF: seg000:04D3j seg000:04D7j ... + mov si, di + cmp word_123C0, 0 + jge short loc_519 + mov word_123C0, cx + +loc_519: ; CODE XREF: seg000:0513j + cmp word_123C2, 0 + jge short loc_524 + mov word_123C2, dx + +loc_524: ; CODE XREF: seg000:051Ej + ; DATA XREF: _main+1F7r ... + mov cx, word_123C0 + +loc_528: ; DATA XREF: _main+20Cw + mov ax, word_123C2 + shr cx, 3 + shl ax, 4 + add cx, ax + shl ax, 2 + add cx, ax + +loc_538: ; DATA XREF: sub_123E+1Br sub_B462+7r + mov word_123CE, cx + +loc_53C: ; DATA XREF: sub_9CDD+37r + lodsw + xchg ah, al + mov word_123C4, ax + mov cx, ax + neg ax + mov word ptr cs:loc_667+1, ax + inc ax + +loc_54B: ; DATA XREF: sub_9CDD+14r sub_9CDD+2Cr ... + mov word ptr cs:loc_606+1, ax + dec ax + add ax, ax + mov word ptr cs:loc_5FB+1, ax + add cx, cx + mov ax, cx + add ax, 160h + mov word_123D2, ax + add cx, cx + mov word_123CC, cx + add ax, cx + mov word_123D4, ax + mov word ptr cs:loc_6A2+1, ax + mov word ptr cs:loc_6D5+2, ax + mov word ptr cs:loc_650+2, ax + mov ax, word_123C0 + and ax, 7 + add ax, word_123C4 + mov word_123DC, ax + mov cx, ax + lodsw + xchg ah, al + mov word_123C6, ax + mov word_123DA, ax + test bl, 80h + jnz short loc_5A5 + mov cx, 30h ; '0' + mov di, 100h + +loc_59A: ; CODE XREF: seg000:059Fj + lodsb + shr al, 4 + stosb + loop loc_59A + mov bx, si + jmp short loc_5B3 +; --------------------------------------------------------------------------- + +loc_5A5: ; CODE XREF: seg000:0592j + mov bx, si + mov si, 272h + mov di, 100h + mov cx, 0Ch + rep movs word ptr es:[di], word ptr cs:[si] + +loc_5B3: ; CODE XREF: seg000:05A3j + test byte ptr word_123C9, 1 + jz short loc_5BD + call sub_BE3 + +loc_5BD: ; CODE XREF: seg000:05B8j + call sub_8BE + mov dh, 1 + mov di, 160h + xor al, al + call loc_796 + mov cx, word_123C4 + rep stosw + xor bp, bp + ; Hack (jmp loc_659) + db 0e9h + db 084h + db 000h +; --------------------------------------------------------------------------- + +loc_5D5: ; CODE XREF: seg000:05F7j + mov dl, [bx] + inc bx + mov dh, 8 + +loc_5DA: ; DATA XREF: seg000:042Ew + ; Hack (cmp bx, 0) + db 081h + db 0fbh + db 000h + db 000h + jnz short loc_5F9 + call sub_8D8 + jmp short loc_5F9 +; --------------------------------------------------------------------------- + +loc_5E5: ; CODE XREF: seg000:0602j + mov dl, [bx] + inc bx + mov dh, 8 + +loc_5EA: ; DATA XREF: seg000:0432w + ; Hack (cmp bx, 0) + db 081h + db 0fbh + db 000h + db 000h + jnz short loc_604 + call sub_8D8 + jmp short loc_604 +; --------------------------------------------------------------------------- + +loc_5F5: ; CODE XREF: seg000:065Fj + dec dh + jz short loc_5D5 + +loc_5F9: ; CODE XREF: seg000:05DEj seg000:05E3j + add dl, dl + +loc_5FB: ; DATA XREF: seg000:0552w + mov si, 0 + jnb short loc_676 + dec dh + jz short loc_5E5 + +loc_604: ; CODE XREF: seg000:05EEj seg000:05F3j + add dl, dl + +loc_606: ; DATA XREF: seg000:loc_54Bw + mov si, 0 + jnb short loc_676 + dec si + dec si + jmp short loc_676 +; --------------------------------------------------------------------------- + +loc_60F: ; CODE XREF: seg000:065Bj + mov dl, [bx] + inc bx + mov dh, 8 + +loc_614: ; DATA XREF: seg000:0436w + ; Hack (cmp bx, 0) + db 081h + db 0fbh + db 000h + db 000h + jnz short loc_65D + call sub_8D8 + jmp short loc_65D +; --------------------------------------------------------------------------- + +loc_61F: ; CODE XREF: seg000:0663j + mov dl, [bx] + inc bx + mov dh, 8 + +loc_624: ; DATA XREF: seg000:043Aw + ; Hack (cmp bx, 0) + db 081h + db 0fbh + db 000h + db 000h + jnz short loc_665 + call sub_8D8 + jmp short loc_665 +; --------------------------------------------------------------------------- + +loc_62F: ; CODE XREF: seg000:0680j + mov dl, [bx] + inc bx + mov dh, 8 + +loc_634: ; DATA XREF: seg000:043Ew + ; Hack (cmp bx, 0) + db 081h + db 0fbh + db 000h + db 000h + jnz short loc_682 + call sub_8D8 + jmp short loc_682 +; --------------------------------------------------------------------------- + +loc_63F: ; CODE XREF: seg000:068Ej + mov dl, [bx] + inc bx + mov dh, 8 + +loc_644: ; DATA XREF: seg000:0442w + ; Hack (cmp bx, 0) + db 081h + db 0fbh + db 000h + db 000h + jnz short loc_690 + call sub_8D8 + jmp short loc_690 +; --------------------------------------------------------------------------- + +loc_64F: ; CODE XREF: seg000:0684j + movsw + +loc_650: ; DATA XREF: seg000:0573w + ; Hack (cmp di, 0) + db 081h + db 0ffh + db 000h + db 000h + jnz short loc_659 + call sub_930 + +loc_659: ; CODE XREF: seg000:05D2j seg000:0654j ... + dec dh + jz short loc_60F + +loc_65D: ; CODE XREF: seg000:0618j seg000:061Dj + add dl, dl + jb short loc_5F5 + dec dh + jz short loc_61F + +loc_665: ; CODE XREF: seg000:0628j seg000:062Dj + add dl, dl + +loc_667: ; DATA XREF: seg000:0546w + mov si, 0 + jb short loc_676 + mov si, 0FFFCh + mov ax, [di-2] + cmp ah, al + jz short loc_6C1 + +loc_676: ; CODE XREF: seg000:05FEj seg000:0609j ... + cmp si, bp + mov bp, si + jz short loc_6CC + add si, di + +loc_67E: ; CODE XREF: seg000:06CAj + dec dh + jz short loc_62F + +loc_682: ; CODE XREF: seg000:0638j seg000:063Dj + add dl, dl + jnb short loc_64F + mov ax, 1 + xor cx, cx + +loc_68B: ; CODE XREF: seg000:0692j + inc cx + dec dh + jz short loc_63F + +loc_690: ; CODE XREF: seg000:0648j seg000:064Dj + add dl, dl + jb short loc_68B + +loc_694: ; CODE XREF: seg000:069Cj + dec dh + jz short loc_6B1 + +loc_698: ; CODE XREF: seg000:06BAj seg000:06BFj + add dl, dl + adc ax, ax + loop loc_694 + jb short loc_6FB + +loc_6A0: ; CODE XREF: seg000:06F9j seg000:0704j ... + mov cx, ax + +loc_6A2: ; DATA XREF: seg000:056Bw + mov ax, 0 + sub ax, di + shr ax, 1 + cmp cx, ax + jnb short loc_6ED + rep movsw + jmp short loc_659 +; --------------------------------------------------------------------------- + +loc_6B1: ; CODE XREF: seg000:0696j + mov dl, [bx] + inc bx + mov dh, 8 + +loc_6B6: ; DATA XREF: seg000:0446w + ; Hack (cmp bx, 0) + db 081h + db 0fbh + db 000h + db 000h + jnz short loc_698 + call sub_8D8 + jmp short loc_698 +; --------------------------------------------------------------------------- + +loc_6C1: ; CODE XREF: seg000:0674j + cmp si, bp + mov bp, si + jz short loc_6CC + lea si, [di-2] + jmp short loc_67E +; --------------------------------------------------------------------------- + +loc_6CC: ; CODE XREF: seg000:067Aj seg000:06C5j + mov al, [di-1] + +loc_6CF: ; CODE XREF: seg000:06E1j + call loc_796 + stosw + mov al, ah + +loc_6D5: ; DATA XREF: seg000:056Fw + ; Hack (cmp di, 0) + db 081h + db 0ffh + db 000h + db 000h + jz short loc_6E8 + +loc_6DB: ; CODE XREF: seg000:06EBj + dec dh + jz short loc_711 + +loc_6DF: ; CODE XREF: seg000:071Aj seg000:071Fj + add dl, dl + jb short loc_6CF + xor bp, bp + jmp loc_659 +; --------------------------------------------------------------------------- + +loc_6E8: ; CODE XREF: seg000:06D9j + call sub_930 + jmp short loc_6DB +; --------------------------------------------------------------------------- + +loc_6ED: ; CODE XREF: seg000:06ABj + sub cx, ax + xchg ax, cx + rep movsw + call sub_930 + sub si, word_123CC + jmp short loc_6A0 +; --------------------------------------------------------------------------- + +loc_6FB: ; CODE XREF: seg000:069Ej + xor cx, cx + +loc_6FD: ; CODE XREF: seg000:0702j seg000:070Fj + movsw + cmp di, word_123D4 + loopne loc_6FD + jnz short loc_6A0 + call sub_930 + sub si, word_123CC + jcxz short loc_6A0 + jmp short loc_6FD +; --------------------------------------------------------------------------- + +loc_711: ; CODE XREF: seg000:06DDj + mov dl, [bx] + inc bx + mov dh, 8 + +loc_716: ; DATA XREF: seg000:044Aw + ; Hack (cmp bx, 0) + db 081h + db 0fbh + db 000h + db 000h + jnz short loc_6DF + call sub_8D8 + jmp short loc_6DF +; --------------------------------------------------------------------------- + +loc_721: ; CODE XREF: seg000:0783j + mov dl, [bx] + inc bx + mov dh, 8 + +loc_726: ; DATA XREF: seg000:044Ew + ; Hack (cmp bx, 0) + db 081h + db 0fbh + db 000h + db 000h + jnz short loc_785 + call sub_8D8 + jmp short loc_785 +; --------------------------------------------------------------------------- + +loc_731: ; CODE XREF: seg000:079Ej + mov dl, [bx] + inc bx + mov dh, 8 + +loc_736: ; DATA XREF: seg000:0416w + ; Hack (cmp bx, 0) + db 081h + db 0fbh + db 000h + db 000h + jnz short loc_7A0 + call sub_8D8 + jmp short loc_7A0 +; --------------------------------------------------------------------------- + +loc_741: ; CODE XREF: seg000:07A6j + mov dl, [bx] + inc bx + mov dh, 8 + +loc_746: ; DATA XREF: seg000:041Aw + ; Hack (cmp bx, 0) + db 081h + db 0fbh + db 000h + db 000h + jnz short loc_7A8 + call sub_8D8 + jmp short loc_7A8 +; --------------------------------------------------------------------------- + +loc_751: ; CODE XREF: seg000:07B1j + mov dl, [bx] + inc bx + mov dh, 8 + +loc_756: ; DATA XREF: seg000:041Ew + ; Hack (cmp bx, 0) + db 081h + db 0fbh + db 000h + db 000h + jnz short loc_7B3 + call sub_8D8 + jmp short loc_7B3 +; --------------------------------------------------------------------------- + +loc_761: ; CODE XREF: seg000:07B9j + mov dl, [bx] + inc bx + mov dh, 8 + +loc_766: ; DATA XREF: seg000:0422w + ; Hack (cmp bx, 0) + db 081h + db 0fbh + db 000h + db 000h + jnz short loc_7BB + call sub_8D8 + jmp short loc_7BB +; --------------------------------------------------------------------------- + +loc_771: ; CODE XREF: seg000:07C1j + mov dl, [bx] + inc bx + mov dh, 8 + +loc_776: ; DATA XREF: seg000:0426w + ; Hack (cmp bx, 0) + db 081h + db 0fbh + db 000h + db 000h + jnz short loc_7C3 + call sub_8D8 + jmp short loc_7C3 +; --------------------------------------------------------------------------- + +loc_781: ; CODE XREF: seg000:07A2j + dec dh + jz short loc_721 + +loc_785: ; CODE XREF: seg000:072Aj seg000:072Fj + add dl, dl + jb short loc_78C + lodsb + jmp short loc_7FB +; --------------------------------------------------------------------------- + +loc_78C: ; CODE XREF: seg000:0787j + mov ax, [si] + xchg ah, al + mov [si], ax + xor ah, ah + jmp short loc_7FB +; --------------------------------------------------------------------------- + +loc_796: ; CODE XREF: seg000:05C7p + ; seg000:loc_6CFp + mov bp, di + xor ah, ah + mov si, ax + dec dh + jz short loc_731 + +loc_7A0: ; CODE XREF: seg000:073Aj seg000:073Fj + add dl, dl + jb short loc_781 + dec dh + jz short loc_741 + +loc_7A8: ; CODE XREF: seg000:074Aj seg000:074Fj + add dl, dl + mov cx, 1 + jnb short loc_7C7 + dec dh + jz short loc_751 + +loc_7B3: ; CODE XREF: seg000:075Aj seg000:075Fj + add dl, dl + jnb short loc_7BF + dec dh + jz short loc_761 + +loc_7BB: ; CODE XREF: seg000:076Aj seg000:076Fj + add dl, dl + adc cx, cx + +loc_7BF: ; CODE XREF: seg000:07B5j + dec dh + jz short loc_771 + +loc_7C3: ; CODE XREF: seg000:077Aj seg000:077Fj + add dl, dl + adc cx, cx + +loc_7C7: ; CODE XREF: seg000:07ADj + dec dh + jz short loc_7DB + +loc_7CB: ; CODE XREF: seg000:07E4j seg000:07E9j + add dl, dl + adc cx, cx + add si, cx + std + lodsb + lea di, [si+1] + rep movsb + stosb + jmp short loc_7FB +; --------------------------------------------------------------------------- + +loc_7DB: ; CODE XREF: seg000:07C9j + mov dl, [bx] + inc bx + mov dh, 8 + +loc_7E0: ; DATA XREF: seg000:042Aw + ; Hack (cmp bx, 0) + db 081h + db 0fbh + db 000h + db 000h + jnz short loc_7CB + call sub_8D8 + jmp short loc_7CB +; --------------------------------------------------------------------------- + +loc_7EB: ; CODE XREF: seg000:0801j + mov dl, [bx] + inc bx + mov dh, 8 + +loc_7F0: ; DATA XREF: seg000:loc_456w + ; Hack (cmp bx, 0) + db 081h + db 0fbh + db 000h + db 000h + jnz short loc_803 + call sub_8D8 + jmp short loc_803 +; --------------------------------------------------------------------------- + +loc_7FB: ; CODE XREF: seg000:078Aj seg000:0794j ... + xor ah, ah + mov si, ax + dec dh + jz short loc_7EB + +loc_803: ; CODE XREF: seg000:07F4j seg000:07F9j + add dl, dl + jb short loc_844 + dec dh + jz short loc_85E + +loc_80B: ; CODE XREF: seg000:0867j seg000:086Cj + add dl, dl + mov cx, 1 + jnb short loc_82A + dec dh + jz short loc_86E + +loc_816: ; CODE XREF: seg000:0877j seg000:087Cj + add dl, dl + jnb short loc_822 + dec dh + jz short loc_87E + +loc_81E: ; CODE XREF: seg000:0887j seg000:088Cj + add dl, dl + adc cx, cx + +loc_822: ; CODE XREF: seg000:0818j + dec dh + jz short loc_88E + +loc_826: ; CODE XREF: seg000:0897j seg000:089Cj + add dl, dl + adc cx, cx + +loc_82A: ; CODE XREF: seg000:0810j + dec dh + jz short loc_89E + +loc_82E: ; CODE XREF: seg000:08A7j seg000:08ACj + add dl, dl + adc cx, cx + add si, cx + std + mov ah, al + lodsb + lea di, [si+1] + rep movsb + stosb + xchg ah, al + mov di, bp + cld + retn +; --------------------------------------------------------------------------- + +loc_844: ; CODE XREF: seg000:0805j + dec dh + jz short loc_8AE + +loc_848: ; CODE XREF: seg000:08B7j seg000:08BCj + add dl, dl + jb short loc_852 + mov ah, [si] + mov di, bp + cld + retn +; --------------------------------------------------------------------------- + +loc_852: ; CODE XREF: seg000:084Aj + mov cx, [si] + xchg ch, cl + mov [si], cx + mov ah, cl + mov di, bp + cld + retn +; --------------------------------------------------------------------------- + +loc_85E: ; CODE XREF: seg000:0809j + mov dl, [bx] + inc bx + mov dh, 8 + +loc_863: ; DATA XREF: seg000:loc_45Aw + ; Hack (cmp bx, 0) + db 081h + db 0fbh + db 000h + db 000h + jnz short loc_80B + call sub_8D8 + jmp short loc_80B +; --------------------------------------------------------------------------- + +loc_86E: ; CODE XREF: seg000:0814j + mov dl, [bx] + inc bx + mov dh, 8 + +loc_873: ; DATA XREF: seg000:045Ew + ; Hack (cmp bx, 0) + db 081h + db 0fbh + db 000h + db 000h + jnz short loc_816 + call sub_8D8 + jmp short loc_816 +; --------------------------------------------------------------------------- + +loc_87E: ; CODE XREF: seg000:081Cj + mov dl, [bx] + inc bx + mov dh, 8 + +loc_883: ; DATA XREF: seg000:0462w + ; Hack (cmp bx, 0) + db 081h + db 0fbh + db 000h + db 000h + jnz short loc_81E + call sub_8D8 + jmp short loc_81E +; --------------------------------------------------------------------------- + +loc_88E: ; CODE XREF: seg000:0824j + mov dl, [bx] + inc bx + mov dh, 8 + +loc_893: ; DATA XREF: seg000:0466w + ; Hack (cmp bx, 0) + db 081h + db 0fbh + db 000h + db 000h + jnz short loc_826 + call sub_8D8 + jmp short loc_826 +; --------------------------------------------------------------------------- + +loc_89E: ; CODE XREF: seg000:082Cj + mov dl, [bx] + inc bx + mov dh, 8 + +loc_8A3: ; DATA XREF: seg000:046Aw + ; Hack (cmp bx, 0) + db 081h + db 0fbh + db 000h + db 000h + jnz short loc_82E + call sub_8D8 + jmp short loc_82E +; --------------------------------------------------------------------------- + +loc_8AE: ; CODE XREF: seg000:0846j + mov dl, [bx] + inc bx + mov dh, 8 + +loc_8B3: ; DATA XREF: seg000:0452w + ; Hack (cmp bx, 0) + db 081h + db 0fbh + db 000h + db 000h + jnz short loc_848 + call sub_8D8 + jmp short loc_848 + +; =============== S U B R O U T I N E ======================================= + + +sub_8BE proc near ; CODE XREF: seg000:loc_5BDp + xor di, di + mov ax, 1000h + +loc_8C3: ; CODE XREF: sub_8BE+11j + mov cx, 10h + +loc_8C6: ; CODE XREF: sub_8BE+Bj + stosb + sub al, 10h + loop loc_8C6 + add al, 10h + dec ah + jnz short loc_8C3 + retn +sub_8BE endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_8D2 proc near ; CODE XREF: seg000:0470p + mov ax, 3D00h + int 21h ; DOS - 2+ - OPEN DISK FILE WITH HANDLE + ; DS:DX -> ASCIZ filename + ; AL = access mode + ; 0 - read + retn +sub_8D2 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_8D8 proc near ; CODE XREF: seg000:0481p seg000:05E0p ... + push ax + push cx + push dx + mov bx, word_123D0 + mov dx, 1F60h + push dx + mov cx, word_123D6 + mov ah, 3Fh + int 21h ; DOS - 2+ - READ FROM FILE WITH HANDLE + ; BX = file handle, CX = number of bytes to read + ; DS:DX -> buffer + jb short loc_8F2 + pop bx + pop dx + pop cx + pop ax + retn +; --------------------------------------------------------------------------- + +loc_8F2: ; CODE XREF: sub_8D8+13j + call sub_8FB + mov sp, cs:word_2A2 + retn +sub_8D8 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_8FB proc near ; CODE XREF: sub_8D8:loc_8F2p + ; sub_930:loc_B78p + mov bx, word_123D0 + mov ah, 3Eh + int 21h ; DOS - 2+ - CLOSE A FILE WITH HANDLE + ; BX = file handle + retn +sub_8FB endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_904 proc near ; CODE XREF: seg000:04C0p + cmp ax, 102h + jz short loc_918 + mov ch, 0C0h ; '' + mov ah, 42h ; 'B' + int 18h ; TRANSFER TO ROM BASIC + ; causes transfer to ROM-based BASIC (IBM-PC) + ; often reboots a compatible; often has no effect at all + mov ah, 40h ; '@' + int 18h ; TRANSFER TO ROM BASIC + ; causes transfer to ROM-based BASIC (IBM-PC) + ; often reboots a compatible; often has no effect at all + mov al, 1 + out 6Ah, al ; PC-98 GDC (6a): + ; + retn +; --------------------------------------------------------------------------- + +loc_918: ; CODE XREF: sub_904+3j + mov ch, 80h ; '' + mov ah, 42h ; 'B' + int 18h ; TRANSFER TO ROM BASIC + ; causes transfer to ROM-based BASIC (IBM-PC) + ; often reboots a compatible; often has no effect at all + mov al, 8 + out 68h, al + mov ah, 40h ; '@' + int 18h ; TRANSFER TO ROM BASIC + ; causes transfer to ROM-based BASIC (IBM-PC) + ; often reboots a compatible; often has no effect at all + mov al, 1 + out 6Ah, al ; PC-98 GDC (6a): + ; + or byte_123CB, 4 + retn +sub_904 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_930 proc near ; CODE XREF: seg000:0656p + pusha + push es + cmp word_123CE, 7D00h + jl short loc_949 + sub word_123CE, 7D00h + or byte_123CB, 1 + mov al, 1 + out 0A6h, al ; Interrupt Controller #2, 8259A + +loc_949: ; CODE XREF: sub_930+8j + mov si, word_123D4 + mov di, 160h + mov cx, word_123C4 + sub si, cx + sub si, cx + rep movsw + mov si, di + mov cx, 4 + +loc_95F: ; CODE XREF: sub_930+22Ej + push cx + mov di, word_123CE + mov ax, word_123C0 + and ax, 7 + jz short loc_9E4 + mov cx, 8 + sub cx, ax + push cx + mov ah, 0FFh + shl ah, cl + not al + xor bx, bx + mov dx, bx + +loc_97C: ; CODE XREF: sub_930+5Dj + lodsb + add al, al + adc bl, bl + add al, al + adc bh, bh + add al, al + adc dl, dl + add al, al + adc dh, dh + loop loc_97C + mov cx, 0A800h + mov es, cx + assume es:nothing + mov al, 0C0h ; '' + out 7Ch, al + mov al, dh + out 7Eh, al + mov al, dl + out 7Eh, al + mov al, bh + out 7Eh, al + mov al, bl + out 7Eh, al + mov al, ah + test byte ptr word_123C9, 40h + jz short loc_9D3 + mov ah, byte ptr word_123C9+1 + shr ah, 1 + jnb short loc_9BB + not dh + +loc_9BB: ; CODE XREF: sub_930+87j + shr ah, 1 + jnb short loc_9C1 + not dl + +loc_9C1: ; CODE XREF: sub_930+8Dj + shr ah, 1 + jnb short loc_9C7 + not bh + +loc_9C7: ; CODE XREF: sub_930+93j + shr ah, 1 + jnb short loc_9CD + not bl + +loc_9CD: ; CODE XREF: sub_930+99j + or bx, dx + or bl, bh + or al, bl + +loc_9D3: ; CODE XREF: sub_930+7Fj + stosb + xor al, al + out 7Ch, al + pop ax + mov cx, word_123C4 + sub cx, ax + shr cx, 3 + jmp short loc_9EB +; --------------------------------------------------------------------------- + +loc_9E4: ; CODE XREF: sub_930+3Aj + mov cx, word_123C4 + shr cx, 3 + +loc_9EB: ; CODE XREF: sub_930+B2j sub_930+164j ... + lodsw + add al, al + adc bl, bl + add ah, ah + adc bl, bl + add al, al + adc bh, bh + add ah, ah + adc bh, bh + add al, al + adc dl, dl + add ah, ah + adc dl, dl + add al, al + adc dh, dh + add ah, ah + adc dh, dh + lodsw + add al, al + adc bl, bl + add ah, ah + adc bl, bl + add al, al + adc bh, bh + add ah, ah + adc bh, bh + add al, al + adc dl, dl + add ah, ah + adc dl, dl + add al, al + adc dh, dh + add ah, ah + adc dh, dh + lodsw + add al, al + adc bl, bl + add ah, ah + adc bl, bl + add al, al + adc bh, bh + add ah, ah + adc bh, bh + add al, al + adc dl, dl + add ah, ah + adc dl, dl + add al, al + adc dh, dh + add ah, ah + adc dh, dh + lodsw + add al, al + adc bl, bl + add ah, ah + adc bl, bl + add al, al + adc bh, bh + add ah, ah + adc bh, bh + add al, al + adc dl, dl + add ah, ah + adc dl, dl + add al, al + adc dh, dh + add ah, ah + adc dh, dh + mov ax, 0A800h + mov es, ax + test byte ptr word_123C9, 40h + jnz short loc_A97 + mov es:[di], dh + mov es:[di-8000h], dl + mov ah, 0B8h ; '' + mov es, ax + assume es:nothing + mov es:[di], bh + mov ah, 0E0h ; '' + mov es, ax + assume es:nothing + mov al, bl + stosb + dec cx + jz short loc_AD4 + jmp loc_9EB +; --------------------------------------------------------------------------- + +loc_A97: ; CODE XREF: sub_930+149j + mov ah, byte ptr word_123C9+1 + mov al, 0C0h ; '' + out 7Ch, al + mov al, dh + out 7Eh, al + mov al, dl + out 7Eh, al + mov al, bh + out 7Eh, al + mov al, bl + out 7Eh, al + shr ah, 1 + jnb short loc_AB5 + not dh + +loc_AB5: ; CODE XREF: sub_930+181j + shr ah, 1 + jnb short loc_ABB + not dl + +loc_ABB: ; CODE XREF: sub_930+187j + shr ah, 1 + jnb short loc_AC1 + not bh + +loc_AC1: ; CODE XREF: sub_930+18Dj + shr ah, 1 + jnb short loc_AC7 + not bl + +loc_AC7: ; CODE XREF: sub_930+193j + mov ax, dx + or ax, bx + or al, ah + stosb + dec cx + jz short loc_AD4 + jmp loc_9EB +; --------------------------------------------------------------------------- + +loc_AD4: ; CODE XREF: sub_930+162j sub_930+19Fj + xor al, al + out 7Ch, al + mov cx, word_123DC + and cx, 7 + jz short loc_B4F + mov ah, 8 + sub ah, cl + xor bx, bx + mov dx, bx + +loc_AE9: ; CODE XREF: sub_930+1CAj + lodsb + add al, al + adc bl, bl + add al, al + adc bh, bh + add al, al + adc dl, dl + add al, al + adc dh, dh + loop loc_AE9 + mov cl, ah + mov ch, 0FFh + shl ch, cl + shl bx, cl + shl dx, cl + mov ax, 0A800h + mov es, ax + assume es:nothing + mov al, 0C0h ; '' + out 7Ch, al + mov al, dh + out 7Eh, al + mov al, dl + out 7Eh, al + mov al, bh + out 7Eh, al + mov al, bl + out 7Eh, al + mov al, ch + test byte ptr word_123C9, 40h + jz short loc_B4A + mov ah, byte ptr word_123C9+1 + shr ah, 1 + jnb short loc_B32 + not dh + +loc_B32: ; CODE XREF: sub_930+1FEj + shr ah, 1 + jnb short loc_B38 + not dl + +loc_B38: ; CODE XREF: sub_930+204j + shr ah, 1 + jnb short loc_B3E + not bh + +loc_B3E: ; CODE XREF: sub_930+20Aj + shr ah, 1 + jnb short loc_B44 + not bl + +loc_B44: ; CODE XREF: sub_930+210j + or bx, dx + or bl, bh + or al, bl + +loc_B4A: ; CODE XREF: sub_930+1F6j + stosb + xor al, al + out 7Ch, al + +loc_B4F: ; CODE XREF: sub_930+1AFj + pop cx + add word_123CE, 50h ; 'P' + dec word_123DA + jz short loc_B68 + dec cx + jz short loc_B61 + jmp loc_95F +; --------------------------------------------------------------------------- + +loc_B61: ; CODE XREF: sub_930+22Cj + pop es + assume es:nothing + popa + mov di, word_123D2 + retn +; --------------------------------------------------------------------------- + +loc_B68: ; CODE XREF: sub_930+229j + test byte_123CB, 1 + jle short loc_B78 + mov al, 0 + out 0A6h, al ; Interrupt Controller #2, 8259A + and byte_123CB, 0FDh + +loc_B78: ; CODE XREF: sub_930+23Dj + call sub_8FB + mov sp, cs:word_2A2 + xor ax, ax + retn +sub_930 endp + +; --------------------------------------------------------------------------- + db 2 dup(0), 26h, 0, 4Ch, 0, 72h, 0, 98h, 0, 0BEh, 0, 0E4h + db 0, 0Ah, 1, 30h, 1, 56h, 1, 7Ch, 1, 0A2h, 1, 0C8h, 1 + db 0EEh, 1, 14h, 2, 3Ah, 2, 2 dup(0), 4Bh, 0, 96h, 0, 0E1h + db 0, 2Ch, 1, 77h, 1, 0C2h, 1, 0Dh, 2, 58h, 2, 0A3h, 2 + db 0EEh, 2, 39h, 3, 84h, 3, 0CFh, 3, 1Ah, 4, 65h, 4, 2 dup(0) + db 0Fh, 0, 1Eh, 0, 2Dh, 0, 3Ch, 0, 4Bh, 0, 5Ah, 0, 69h + db 0, 78h, 0, 87h, 0, 96h, 0, 0A5h, 0, 0B4h, 0, 0C3h, 0 + db 0D2h, 0, 0E1h, 0 + +; =============== S U B R O U T I N E ======================================= + + +sub_BE3 proc near ; CODE XREF: seg000:02FFp seg000:0353p ... + push bx + mov bl, byte_123C8 + mov bh, 64h ; 'd' + mov di, 150h + xor cx, cx + +loc_BEF: ; CODE XREF: sub_BE3+18j + mov al, cl + mul bl + div bh + stosb + inc cl + cmp cl, 10h + jnz short loc_BEF + mov si, 100h + mov bx, 150h + mov cx, 10h + xor ah, ah + test byte ptr word_123C9, 10h + jnz short loc_C25 + +loc_C0F: ; CODE XREF: sub_BE3+3Ej + mov al, ah + out 0A8h, al ; Interrupt Controller #2, 8259A + lodsb + xlat + out 0ACh, al ; Interrupt Controller #2, 8259A + lodsb + xlat + out 0AAh, al ; Interrupt Controller #2, 8259A + lodsb + xlat + out 0AEh, al ; Interrupt Controller #2, 8259A + inc ah + loop loc_C0F + pop bx + retn +; --------------------------------------------------------------------------- + +loc_C25: ; CODE XREF: sub_BE3+2Aj sub_BE3+82j + mov al, 10h + sub al, cl + out 0A8h, al ; Interrupt Controller #2, 8259A + mov dx, 40h ; '@' + lodsb + add al, al + mov di, ax + add dx, cs:[di+0B83h] + lodsb + add al, al + mov di, ax + add dx, cs:[di+0BA3h] + lodsb + add al, al + mov di, ax + add dx, cs:[di+0BC3h] + mov al, 7 + sub al, dh + xlat + mov dl, al + shr dl, 1 + sbb al, al + out 0AEh, al ; Interrupt Controller #2, 8259A + shr dl, 1 + sbb al, al + out 0ACh, al ; Interrupt Controller #2, 8259A + shr dl, 1 + sbb al, al + out 0AAh, al ; Interrupt Controller #2, 8259A + loop loc_C25 + pop bx + retn +sub_BE3 endp + +; --------------------------------------------------------------------------- + db 0 + +; =============== S U B R O U T I N E ======================================= + + +sub_C6A proc far ; CODE XREF: sub_CE2+19p + mov ah, 42h ; 'B' + mov ch, 0C0h ; '' + int 18h ; TRANSFER TO ROM BASIC + ; causes transfer to ROM-based BASIC (IBM-PC) + ; often reboots a compatible; often has no effect at all + mov ax, 0A800h + mov word_12A32, ax + mov word_12AF8, ax + mov word_12A34, 3E80h + xor ax, ax + mov word_12AEC, ax + mov word_12AF2, ax + mov es, ax + assume es:seg000 + mov ah, byte ptr es:loc_54B+2 + and ah, 4 + add ah, 3Fh ; '?' + and ah, 40h + mov word_12A3A, ax + mov ax, 27Fh + mov word_12AF0, ax + mov word_12AEE, ax + mov ax, 190h + mov word_12A36, ax + dec ax + mov word_12AF6, ax + mov word_12AF4, ax + mov word_12AFA, 7CB0h + retf +sub_C6A endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_CB8 proc far ; CODE XREF: sub_CE2+1Dp + mov al, 80h ; '' + pushf + cli + out 7Ch, al + popf + xor ax, ax + mov dx, 7Eh ; '~' + out dx, al + out dx, al + out dx, al + out dx, al + mov bx, di + xor di, di + mov cx, word_12A34 + mov es, word_12A32 + assume es:nothing + rep stosw + mov di, bx + out 7Ch, al + retf +sub_CB8 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_CDC proc far ; CODE XREF: sub_CE2+15p + mov ah, 40h ; '@' + int 18h ; TRANSFER TO ROM BASIC + ; causes transfer to ROM-based BASIC (IBM-PC) + ; often reboots a compatible; often has no effect at all + retf +sub_CDC endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_CE2 proc far ; CODE XREF: sub_B6E9+3DP + mov al, 41h ; 'A' + out 6Ah, al ; PC-98 GDC (6a): + ; Set display mode to LCD + mov word_12A3E, 0 + push cs + call loc_D08 + mov al, 0 + out 0A4h, al ; Interrupt Controller #2, 8259A + out 0A6h, al ; Interrupt Controller #2, 8259A + push cs + call near ptr sub_CDC + push cs + call near ptr sub_C6A + push cs + call near ptr sub_CB8 + push cs + call near ptr sub_E12 + retf +sub_CE2 endp + +; --------------------------------------------------------------------------- + nop + +loc_D08: ; CODE XREF: sub_CE2+Bp sub_E12+30p + cld + push si + mov ax, word_12A3E + cwd + not dx + and ax, dx + sub ax, 0C8h ; '' + sbb dx, dx + and ax, dx + add ax, 0C8h ; '' + mov dh, al + xor bx, bx + mov ch, bl + cmp dh, 64h ; 'd' + jbe short loc_D2E + mov ch, 0Fh + sub dh, 0C8h ; '' + neg dh + +loc_D2E: ; CODE XREF: seg000:0D25j + mov si, 18E6h + mov dl, 64h ; 'd' + cmp word_12A70, bx + jnz short loc_D72 + +loc_D39: ; CODE XREF: seg000:0D6Dj + mov al, bl + out 0A8h, al ; Interrupt Controller #2, 8259A + lodsw + shr ax, 4 + mov cl, ah + and al, 0Fh + xor al, ch + mul dh + div dl + xor al, ch + out 0ACh, al ; Interrupt Controller #2, 8259A + mov al, cl + xor al, ch + mul dh + div dl + xor al, ch + out 0AAh, al ; Interrupt Controller #2, 8259A + lodsb + shr al, 4 + xor al, ch + mul dh + div dl + xor al, ch + out 0AEh, al ; Interrupt Controller #2, 8259A + inc bx + cmp bx, 10h + jl short loc_D39 + pop si + retf +; --------------------------------------------------------------------------- + nop + +loc_D72: ; CODE XREF: seg000:0D37j + mov bx, dx + mov dx, 871Eh + mov al, 0A0h ; '' + out 0F6h, al + in al, dx + cmp al, 0FFh + jnz short loc_D87 + mov dx, 0AE8Eh + in al, dx + shr al, 2 + +loc_D87: ; CODE XREF: seg000:0D7Ej + shr al, 1 + cmc + sbb al, al + mov cs:byte_DF0, al + mov dx, bx + push di + mov di, 0 + +loc_D96: ; CODE XREF: seg000:0E0Dj + mov ax, di + out 0A8h, al ; Interrupt Controller #2, 8259A + lodsw + mov bx, ax + shr bx, 4 + and bl, ch + lodsb + and al, ch + xor al, ch + mul dh + div dl + xor al, ch + xchg al, bh + xor al, ch + mul dh + div dl + xor al, ch + xchg al, bl + xor al, ch + mul dh + div dl + xor al, ch + xchg al, bl + mov ah, bh + cmp bh, al + ja short loc_DCB + mov bh, al + +loc_DCB: ; CODE XREF: seg000:0DC7j + cmp bh, bl + ja short loc_DD1 + mov bh, bl + +loc_DD1: ; CODE XREF: seg000:0DCDj + shl al, 1 + add al, bl + shl al, 1 + add al, ah + add al, bh + mov cl, 3 + mul cl + mov cl, 14h + div cl + shr al, 1 + adc al, 0 + sub al, 2 + cmc + sbb ah, ah + and ah, al +; --------------------------------------------------------------------------- + db 80h, 0F4h +byte_DF0 db 0 ; DATA XREF: seg000:0D8Cw +; --------------------------------------------------------------------------- + shr ah, 1 + sbb al, al + and al, 0Fh + out 0AEh, al ; Interrupt Controller #2, 8259A + shr ah, 1 + sbb al, al + and al, 0Fh + out 0ACh, al ; Interrupt Controller #2, 8259A + shr ah, 1 + sbb al, al + and al, 0Fh + out 0AAh, al ; Interrupt Controller #2, 8259A + inc di + cmp di, 10h + jl short loc_D96 + pop di + pop si + retf + +; =============== S U B R O U T I N E ======================================= + + +sub_E12 proc far ; CODE XREF: sub_CE2+21p + push si + push di + push ds + pop es + assume es:dseg + mov di, 18E6h + mov si, 7B0h + mov cx, 18h + rep movsw + pop di + pop si + mov al, 0 + out 6Ah, al ; PC-98 GDC (6a): + ; + mov al, 4 + out 0AEh, al ; Interrupt Controller #2, 8259A + mov al, 26h ; '&' + out 0ACh, al ; Interrupt Controller #2, 8259A + mov al, 15h + out 0AAh, al ; Interrupt Controller #2, 8259A + mov al, 37h ; '7' + out 0A8h, al ; Interrupt Controller #2, 8259A + mov al, 1 + out 6Ah, al ; PC-98 GDC (6a): + ; + mov word_12A3E, 64h ; 'd' + push cs + call loc_D08 + retf +sub_E12 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_E46 proc far ; CODE XREF: sub_E82+3p sub_EF6+8p + push si + push di + mov ah, 52h + int 21h ; DOS - 2+ internal - GET LIST OF LISTS + ; Return: ES:BX -> DOS list of lists + cld + mov bx, es:[bx-2] + +loc_E51: ; CODE XREF: sub_E46+2Fj + mov es, bx + assume es:nothing + inc bx + mov ax, es:1 + or ax, ax + jz short loc_E69 + mov di, 10h + mov cx, 0Ah + mov si, 7E6h + repe cmpsb + jz short loc_E7A + +loc_E69: ; CODE XREF: sub_E46+14j + mov ax, es:3 + add bx, ax + mov al, es:0 + cmp al, 4Dh ; 'M' + jz short loc_E51 + mov bx, 0 + +loc_E7A: ; CODE XREF: sub_E46+21j + mov ax, bx + mov word_12A72, ax + pop di + pop si + retf +sub_E46 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_E82 proc far ; CODE XREF: sub_B6E9+42P + push si + push di + push cs + call near ptr sub_E46 + or ax, ax + mov ax, 2 + jnz short loc_EF3 + mov ax, 5800h + int 21h ; DOS - 3+ - GET/SET MEMORY ALLOCATION STRATEGY + ; AL = function code: get allocation strategy + mov dx, ax + mov ax, 5801h + mov bx, 1 + int 21h ; DOS - 3+ - GET/SET MEMORY ALLOCATION STRATEGY + ; AL = function code: set allocation strategy + mov ah, 48h ; 'H' + mov bx, 4 + int 21h ; DOS - 2+ - ALLOCATE MEMORY + ; BX = number of 16-byte paragraphs desired + mov cx, 0 + jb short loc_EEA + mov bx, cs + cmp bx, ax + jnb short loc_EC5 + mov es, ax + assume es:nothing + mov ah, 49h + int 21h ; DOS - 2+ - FREE MEMORY + ; ES = segment address of area to be freed + mov ax, 5801h + mov bx, 2 + int 21h ; DOS - 3+ - GET/SET MEMORY ALLOCATION STRATEGY + ; AL = function code: set allocation strategy + mov ah, 48h ; 'H' + mov bx, 4 + int 21h ; DOS - 2+ - ALLOCATE MEMORY + ; BX = number of 16-byte paragraphs desired + +loc_EC5: ; CODE XREF: sub_E82+2Cj + mov cx, ax + mov word_12A72, ax + dec cx + mov es, cx + assume es:nothing + mov ax, 0FFFFh + mov es:1, ax + inc cx + mov es, cx + assume es:nothing + cld + xor di, di + mov si, 7E6h + mov cx, 0Ah + rep movsb + xor ax, ax + stosw + stosw + stosw + mov cx, 1 + +loc_EEA: ; CODE XREF: sub_E82+26j + mov ax, 5801h + mov bx, dx + int 21h ; DOS - 3+ - GET/SET MEMORY ALLOCATION STRATEGY + ; AL = function code: set allocation strategy + mov ax, cx + +loc_EF3: ; CODE XREF: sub_E82+Bj + pop di + pop si + retf +sub_E82 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_EF6 proc far ; CODE XREF: sub_B73C+14P + mov ax, word_12A72 + or ax, ax + jnz short loc_F05 + push cs + call near ptr sub_E46 + or ax, ax + jnz short locret_F11 + +loc_F05: ; CODE XREF: sub_EF6+5j + mov es, ax + assume es:nothing + mov ah, 49h + int 21h ; DOS - 2+ - FREE MEMORY + ; ES = segment address of area to be freed + mov word_12A72, 0 + +locret_F11: ; CODE XREF: sub_EF6+Dj + retf +sub_EF6 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_F12 proc far ; CODE XREF: sub_F5C+13p sub_E27C+CP ... + +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = dword ptr 0Ah + + push bp + mov bp, sp + push si + push di + push ds + mov ah, 52h + int 21h ; DOS - 2+ internal - GET LIST OF LISTS + ; Return: ES:BX -> DOS list of lists + cld + mov bx, es:[bx-2] + +loc_F21: ; CODE XREF: sub_F12+3Cj + mov es, bx + inc bx + mov ax, es:1 + or ax, ax + jz short loc_F42 + mov ax, es:3 + cmp ax, [bp+arg_0] + jnz short loc_F42 + mov cx, [bp+arg_2] + lds si, [bp+arg_4] + mov di, 10h + repe cmpsb + jz short loc_F53 + +loc_F42: ; CODE XREF: sub_F12+18j sub_F12+21j + mov ax, es:3 + add bx, ax + mov al, es:0 + cmp al, 4Dh ; 'M' + jz short loc_F21 + mov bx, 0 + +loc_F53: ; CODE XREF: sub_F12+2Ej + mov ax, bx + pop ds + pop di + pop si + pop bp + retf 8 +sub_F12 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_F5C proc far ; CODE XREF: sub_E27C+1FP + +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = dword ptr 0Ah + + push bp + mov bp, sp + push si + push di + push ds + push word ptr [bp+arg_4+2] + push word ptr [bp+arg_4] + push [bp+arg_2] + push [bp+arg_0] + push cs + call near ptr sub_F12 + or ax, ax + jnz short loc_FD0 + mov ax, 5800h + int 21h ; DOS - 3+ - GET/SET MEMORY ALLOCATION STRATEGY + ; AL = function code: get allocation strategy + mov dx, ax + mov ax, 5801h + mov bx, 1 + int 21h ; DOS - 3+ - GET/SET MEMORY ALLOCATION STRATEGY + ; AL = function code: set allocation strategy + mov ah, 48h ; 'H' + mov bx, [bp+arg_0] + int 21h ; DOS - 2+ - ALLOCATE MEMORY + ; BX = number of 16-byte paragraphs desired + mov cx, 0 + jb short loc_FC7 + mov bx, cs + cmp bx, ax + jnb short loc_FAC + mov es, ax + assume es:nothing + mov ah, 49h + int 21h ; DOS - 2+ - FREE MEMORY + ; ES = segment address of area to be freed + mov ax, 5801h + mov bx, 2 + int 21h ; DOS - 3+ - GET/SET MEMORY ALLOCATION STRATEGY + ; AL = function code: set allocation strategy + mov ah, 48h ; 'H' + mov bx, [bp+arg_0] + int 21h ; DOS - 2+ - ALLOCATE MEMORY + ; BX = number of 16-byte paragraphs desired + +loc_FAC: ; CODE XREF: sub_F5C+39j + mov cx, ax + push ax + dec cx + mov es, cx + assume es:nothing + mov ax, 0FFFFh + mov es:1, ax + inc cx + mov es, cx + assume es:nothing + xor di, di + mov cx, [bp+arg_2] + lds si, [bp+arg_4] + rep movsb + pop cx + +loc_FC7: ; CODE XREF: sub_F5C+33j + mov ax, 5801h + mov bx, dx + int 21h ; DOS - 3+ - GET/SET MEMORY ALLOCATION STRATEGY + ; AL = function code: set allocation strategy + mov ax, cx + +loc_FD0: ; CODE XREF: sub_F5C+18j + pop ds + pop di + pop si + pop bp + retf 8 +sub_F5C endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_FD8 proc far ; CODE XREF: sub_D9E3+25P sub_DA22+25P ... + +arg_0 = word ptr 6 +arg_2 = dword ptr 8 + + push bp + mov bp, sp + push si + push di + cmp word_12A8A, 0 + jz short loc_105C + mov bx, [bp+arg_0] + les di, [bp+arg_2] + assume es:nothing + +loc_FEA: ; CODE XREF: sub_FD8+7Fj + mov ax, word_13BB4 + cmp word_13BB2, ax + jb short loc_1020 + add word_13BAE, ax + adc word_13BB0, 0 + push bx + push ds + mov cx, word_12A8A + mov bx, word_12A8C + lds dx, dword_13BAA + mov ah, 3Fh + int 21h ; DOS - 2+ - READ FROM FILE WITH HANDLE + ; BX = file handle, CX = number of bytes to read + ; DS:DX -> buffer + pop ds + pop bx + cmc + sbb dx, dx + and ax, dx + mov word_13BB4, ax + jz short loc_107B + mov word_13BB2, 0 + +loc_1020: ; CODE XREF: sub_FD8+19j + mov si, word_13BB4 + sub si, word_13BB2 + sub si, bx + sbb ax, ax + and si, ax + add si, bx + mov ax, es + or ax, di + jz short loc_1051 + or si, si + jz short loc_1051 + push si + push ds + mov cx, si + mov ax, word_13BB2 + lds si, dword_13BAA + add si, ax + shr cx, 1 + rep movsw + adc cx, cx + rep movsb + pop ds + pop si + +loc_1051: ; CODE XREF: sub_FD8+5Cj sub_FD8+60j + add word_13BB2, si + sub bx, si + jnz short loc_FEA + jmp short loc_1081 +; --------------------------------------------------------------------------- + nop + +loc_105C: ; CODE XREF: sub_FD8+Aj + push ds + mov cx, [bp+arg_0] + mov bx, word_12A8C + lds dx, [bp+arg_2] + mov ah, 3Fh + int 21h ; DOS - 2+ - READ FROM FILE WITH HANDLE + ; BX = file handle, CX = number of bytes to read + ; DS:DX -> buffer + pop ds + add word_13BAE, ax + adc word_13BB0, 0 + mov bx, cx + sub bx, ax + jz short loc_1081 + +loc_107B: ; CODE XREF: sub_FD8+40j + mov word_13BB6, 1 + +loc_1081: ; CODE XREF: sub_FD8+81j sub_FD8+A1j + mov ax, [bp+arg_0] + sub ax, bx + pop di + pop si + pop bp + retf 6 +sub_FD8 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_108C proc far ; CODE XREF: sub_10F8+1p sub_1144+1p + mov bx, word_12A8C + cmp bx, 0FFFFh + jz short locret_10F6 + mov ax, word_13BB2 + cmp word_13BB4, ax + jnb short loc_10CA + push ds + mov cx, word_13BB2 + lds dx, dword_13BAA + mov ah, 40h + int 21h ; DOS - 2+ - WRITE TO FILE WITH HANDLE + ; BX = file handle, CX = number of bytes to write, DS:DX -> buffer + pop ds + jb short loc_10BD + add word_13BAE, ax + adc word_13BB0, 0 + cmp word_13BB2, ax + jz short loc_10C3 + +loc_10BD: ; CODE XREF: sub_108C+20j + mov word_13BB8, 1 + +loc_10C3: ; CODE XREF: sub_108C+2Fj + mov word_13BB2, 0 + retf +; --------------------------------------------------------------------------- + +loc_10CA: ; CODE XREF: sub_108C+10j + cmp word_13BB4, 0 + jz short locret_10F6 + mov dx, ax + mov cx, 0 + add dx, word_13BAE + mov word_13BB4, cx + mov word_13BB2, cx + adc cx, word_13BB0 + mov ax, 4200h + mov bx, word_12A8C + int 21h ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK) + ; AL = method: offset from beginning of file + mov word_13BAE, ax + mov word_13BB0, dx + +locret_10F6: ; CODE XREF: sub_108C+7j sub_108C+43j + retf +sub_108C endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_10F8 proc far ; CODE XREF: sub_D9E3+36P sub_DA22+2AP ... + push cs + call near ptr sub_108C + mov ah, 3Eh + int 21h ; DOS - 2+ - CLOSE A FILE WITH HANDLE + ; BX = file handle + mov word_12A8C, 0FFFFh + retf +sub_10F8 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_1108 proc far ; CODE XREF: sub_D9E3+7P sub_DA22+7P ... + +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + xor ax, ax + mov bx, word_12A8C + cmp bx, 0FFFFh + jnz short loc_113F + push [bp+arg_2] + push [bp+arg_0] + nop + push cs + call near ptr sub_12BC + sbb bx, bx + or ax, bx + mov word_12A8C, ax + xor ax, ax + mov word_13BB4, ax + mov word_13BAE, ax + mov word_13BB0, ax + mov word_13BB2, ax + mov word_13BB6, ax + mov word_13BB8, ax + lea ax, [bx+1] + +loc_113F: ; CODE XREF: sub_1108+Cj + pop bp + retf 4 +sub_1108 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_1144 proc far ; CODE XREF: sub_D9E3+1AP sub_DA22+1AP ... + push cs + call near ptr sub_108C + cmp bx, 0FFFFh + jz short locret_1175 + push bp + mov bp, sp + mov al, [bp+6] + mov ah, 42h ; 'B' + mov dx, [bp+8] + mov cx, [bp+0Ah] + int 21h ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK) + ; AL = method: + ; 0-from beginnig,1-from current,2-from end + pop bp + mov ax, 4201h + mov dx, 0 + mov cx, dx + int 21h ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK) + ; AL = method: offset from present location + mov word_13BB6, 0 + mov word_13BAE, ax + mov word_13BB0, dx + +locret_1175: ; CODE XREF: sub_1144+7j + retf 6 +sub_1144 endp + +; --------------------------------------------------------------------------- + mov ax, word_13BB2 + xor dx, dx + add ax, word_13BAE + adc dx, word_13BB0 + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_1186 proc far ; CODE XREF: sub_E3C5+18P + +arg_0 = word ptr 8 + + push bp + push es + mov bp, sp + mov es, [bp+arg_0] + mov ah, 49h + int 21h ; DOS - 2+ - FREE MEMORY + ; ES = segment address of area to be freed + pop es + pop bp + retf 2 +sub_1186 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_1196 proc far ; CODE XREF: _main+107P + push si + mov cl, 0Fh + mov ax, 0 + int 0DCh ; used by BASIC while in interpreter + test word_12AE6, 1 + jnz short loc_11B7 + mov word_12AE6, 3 + mov cx, 0Ch + mov ax, 0FFh + mov dx, 192Ah + int 0DCh ; used by BASIC while in interpreter + +loc_11B7: ; CODE XREF: sub_1196+Ej + mov byte_13ECC, 0FEh ; '' + mov word_13ECD, 2020h + mov word_13ECF, 2020h + mov word_13ED1, 7F20h + mov bx, 1 + +loc_11D1: ; CODE XREF: sub_1196+4Dj + mov word_13ED3, bx + mov cx, 0Dh + mov ax, bx + mov dx, 1C3Ch + int 0DCh ; used by BASIC while in interpreter + inc bx + cmp bx, 14h + jle short loc_11D1 + mov byte_13ECC, 7Fh ; '' + mov bx, 15h + +loc_11ED: ; CODE XREF: sub_1196+69j + mov word_13ECD, bx + mov cx, 0Dh + mov ax, bx + mov dx, 1C3Ch + int 0DCh ; used by BASIC while in interpreter + inc bx + cmp bx, 38h ; '8' + jle short loc_11ED + pop si + retf +sub_1196 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_1204 proc far ; CODE XREF: sub_A79D:loc_A7AEP + test word_12AE6, 2 + jnz short loc_120D + retf +; --------------------------------------------------------------------------- + +loc_120D: ; CODE XREF: sub_1204+6j + and word_12AE6, 0FFFEh + mov cx, 0Dh + mov ax, 0FFh + mov dx, 192Ah + int 0DCh ; used by BASIC while in interpreter + mov cl, 0Fh + mov ax, 1 + int 0DCh ; used by BASIC while in interpreter + retf +sub_1204 endp + +; --------------------------------------------------------------------------- + nop + xor ax, ax + xchg ax, word_12AE8 + test ax, ax + jnz short locret_1284 + mov ah, 6 + mov dl, 0FFh + int 21h ; DOS - DIRECT CONSOLE I/O CHARACTER OUTPUT + ; DL = character <> FFh + ; Return: ZF set = no character + ; ZF clear = character recieved, AL = character + mov ah, 0 + jz short loc_1285 + cmp al, 7Fh ; '' + jnz short locret_1284 + +; =============== S U B R O U T I N E ======================================= + + +sub_123E proc far ; CODE XREF: seg000:12A0p + mov ah, 7 + int 21h ; DOS - DIRECT STDIN INPUT, NO ECHO + mov ah, 1 + cmp al, 15h + jb short locret_1284 + cmp al, 20h ; ' ' + jnb short locret_1284 + sub al, 15h + mov dx, 0 + mov es, dx + assume es:seg000 + mov ah, dl + mov bx, ax + shl bx, 1 + mov al, byte ptr es:loc_538+2 + and al, 19h + jnz short loc_1266 + mov ax, [bx+7FEh] + retf +; --------------------------------------------------------------------------- + +loc_1266: ; CODE XREF: sub_123E+21j + cmp al, 1 + jnz short loc_126F + mov ax, [bx+814h] + retf +; --------------------------------------------------------------------------- + +loc_126F: ; CODE XREF: sub_123E+2Aj + cmp al, 8 + jnz short loc_1278 + mov ax, [bx+840h] + retf +; --------------------------------------------------------------------------- + +loc_1278: ; CODE XREF: sub_123E+33j + cmp al, 10h + jnz short loc_1281 + mov ax, [bx+82Ah] + retf +; --------------------------------------------------------------------------- + +loc_1281: ; CODE XREF: sub_123E+3Cj + mov ax, 100h + +locret_1284: ; CODE XREF: seg000:122Ej seg000:123Cj ... + retf +sub_123E endp + +; --------------------------------------------------------------------------- + +loc_1285: ; CODE XREF: seg000:1238j + mov ax, 0FFFFh + retf +; --------------------------------------------------------------------------- + nop + +loc_128A: ; CODE XREF: seg000:12A6j + xor ax, ax + xchg ax, word_12AE8 + test ax, ax + jnz short locret_12A8 + mov ah, 7 + int 21h ; DOS - DIRECT STDIN INPUT, NO ECHO + mov ah, 0 + cmp al, 7Fh ; '' + jz short loc_129F + retf +; --------------------------------------------------------------------------- + +loc_129F: ; CODE XREF: seg000:129Cj + push cs + call near ptr sub_123E + cmp ax, 0FFFFh + jz short loc_128A + +locret_12A8: ; CODE XREF: seg000:1292j + retf +; --------------------------------------------------------------------------- + nop + mov ah, 0 + int 18h ; TRANSFER TO ROM BASIC + ; causes transfer to ROM-based BASIC (IBM-PC) + ; often reboots a compatible; often has no effect at all + retf +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_12B0 proc far ; CODE XREF: _main:loc_B135P + mov ah, 1 + int 18h ; TRANSFER TO ROM BASIC + ; causes transfer to ROM-based BASIC (IBM-PC) + ; often reboots a compatible; often has no effect at all + shr bh, 1 + sbb bx, bx + and ax, bx + retf +sub_12B0 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_12BC proc far ; CODE XREF: sub_1108+16p + mov bx, sp + mov ah, 3Dh ; '=' + mov al, byte_12AEA + push ds + lds dx, ss:[bx+4] + int 21h ; DOS - 2+ - OPEN DISK FILE WITH HANDLE + ; DS:DX -> ASCIZ filename + ; AL = access mode + ; 0 - read + pop ds + jb short loc_12D0 + retf 4 +; --------------------------------------------------------------------------- + +loc_12D0: ; CODE XREF: sub_12BC+Fj + mov ax, 0FFFEh + retf 4 +sub_12BC endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_12D6 proc far ; CODE XREF: sub_130C+1p sub_D304+3P + mov al, 0 + out 7Ch, al + mov al, 7 + out 6Ah, al ; PC-98 GDC (6a): + ; + mov al, 5 + out 6Ah, al ; PC-98 GDC (6a): + ; + mov al, 80h ; '' + out 7Ch, al + mov al, 6 + out 6Ah, al ; PC-98 GDC (6a): + ; + retf +sub_12D6 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_12EC proc far ; CODE XREF: sub_130C+27p sub_D338+86P + mov ax, 0FFF0h + mov dx, 4A0h + out dx, ax + mov ax, 0FFFFh + mov dx, 4A8h + out dx, ax + mov al, 7 + out 6Ah, al ; PC-98 GDC (6a): + ; + mov al, 4 + out 6Ah, al ; PC-98 GDC (6a): + ; + mov al, 0 + out 7Ch, al + mov al, 6 + out 6Ah, al ; PC-98 GDC (6a): + ; + retf +sub_12EC endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_130C proc far ; CODE XREF: sub_B6E9+38P sub_B784+29P + push cs + call near ptr sub_12D6 + mov dx, 4A0h + mov ax, 0FFF0h + out dx, ax + mov dx, 4A2h + mov ax, 0FFh + out dx, ax + mov dx, 4A8h + mov ax, 0FFFFh + out dx, ax + mov dx, 4ACh + xor ax, ax + out dx, ax + mov dx, 4AEh + mov ax, 0Fh + out dx, ax + push cs + call near ptr sub_12EC + retf +sub_130C endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_1338 proc far ; CODE XREF: sub_A66A:loc_A6AFP + ; sub_A66A:loc_A6C8P + mov ax, 4E35h + mul word ptr dword_12AFC+2 + mov cx, ax + mov ax, 15Ah + mul word ptr dword_12AFC + add cx, ax + mov ax, 4E35h + mul word ptr dword_12AFC + add ax, 1 + adc dx, cx + mov word ptr dword_12AFC, ax + mov ax, dx + mov word ptr dword_12AFC+2, ax + and ah, 7Fh + retf +sub_1338 endp + +; --------------------------------------------------------------------------- + db 34h dup(0) +byte_1396 db 0 ; DATA XREF: seg000:15BCr + ; seg000:loc_15E8r +word_1397 dw 0FFFFh ; DATA XREF: seg000:15C3r seg000:15EFr ... +byte_1399 db 0 +byte_139A db 0 ; DATA XREF: seg000:160Dw + db 2 dup(0), 80h, 7Fh, 50h, 32h, 0C0h, 0E6h, 0F0h, 0B0h + db 20h, 0E6h, 0A0h, 0E6h, 20h, 58h, 0CDh, 2, 0CFh, 50h + db 0B0h, 20h, 0E6h, 8, 0EBh, 0, 0B0h, 0Bh, 0E6h, 8, 0EBh + db 0, 0E4h, 8, 0Ah, 0C0h, 75h, 4, 0B0h, 20h, 0E6h, 0, 58h + db 0EBh, 0 +off_13C8 dd 13FCB850h ; DATA XREF: seg000:1591o +; --------------------------------------------------------------------------- + call sub_E940 + jb short loc_13D9 + pop ax + ; Hack (jmp start) + db 0eah + db 000h + db 000h + db 000h + db 000h +; --------------------------------------------------------------------------- + +loc_13D9: ; CODE XREF: seg000:13D1j + xchg ax, bx + mov ax, seg dseg + mov ds, ax + call sub_1AA0 + pop ax + +locret_13E3: ; DATA XREF: seg000:15A8o + iret +; --------------------------------------------------------------------------- + db 1Eh, 56h, 57h, 0B8h + dw seg dseg +aOE db 'ظe',0 +a6g db '6/',0 + db 5, 0C0h, 0, 36h, 0A3h, 31h, 0, 0A1h, 0A0h, 8, 36h, 0A3h + db 27h, 0, 1Eh, 0Eh, 1Fh, 8Ch, 0D8h, 36h, 33h, 6, 27h + db 0, 8Eh, 0D8h, 0B8h, 34h, 35h, 0B9h, 0Bh, 0, 0BFh, 62h + db 13h, 0CDh, 21h, 89h, 1Dh, 8Ch, 45h, 2, 83h, 0C7h, 4 + db 40h, 0E2h, 0F3h, 1Eh, 57h, 0B1h, 0, 0B8h + dw seg dseg +aOG db '؃>',8,0 + db 74h, 14h, 0B4h, 4, 33h, 0C9h, 0CDh, 1Ah, 0B1h, 2, 80h + db 0FDh, 19h, 74h, 7, 80h, 0FDh, 20h, 74h, 2, 0B1h, 1 + db 5Fh, 1Fh, 88h, 0Eh, 96h, 13h, 80h, 0F9h, 2, 75h, 12h + db 0B8h, 75h, 35h, 0CDh, 21h, 89h, 1Dh, 8Ch, 45h, 2, 83h + db 0C7h, 4, 0B8h, 2, 35h, 0EBh, 17h, 80h, 0F9h, 1, 75h + db 29h, 54h, 58h, 3Bh, 0C4h, 0B8h, 10h, 35h, 74h, 9, 0E4h + db 0Ah, 24h, 40h, 0A2h, 99h, 13h, 0B0h, 16h, 8Ah, 0D8h + db 0B7h, 25h, 89h, 1Eh, 97h, 13h, 0CDh, 21h, 89h, 1Dh + db 8Ch, 45h, 2, 89h, 1Eh, 0D5h, 13h, 8Ch, 6, 0D7h, 13h + db 1Fh, 0BBh, 2 dup(0FFh), 8Eh, 6, 7Ah, 0, 26h, 8Eh, 6 + db 2Ch, 0, 2Bh, 0FFh, 0B9h, 0FFh, 7Fh, 0B0h, 0, 0FCh, 0F2h + db 0AEh, 0E3h, 1Fh, 26h, 3Ah, 5, 74h, 1Ah, 26h, 81h, 3Dh + db 38h, 37h, 75h, 0F0h, 26h, 8Bh, 55h, 2, 80h, 0FAh, 3Dh + db 75h, 0E7h, 43h, 80h, 0E6h, 0DFh, 80h, 0FEh, 59h, 75h + db 1, 43h, 5Fh, 5Eh, 33h, 0C0h, 0Bh, 0DBh, 74h, 5Dh, 7Fh + db 3Ch, 8Bh, 0Eh, 0B0h, 8, 0E3h, 58h, 0DBh, 0E3h, 0C7h + db 6, 0B0h, 8, 2 dup(0), 0D9h, 3Eh, 0B0h, 8, 0B9h, 14h + db 0, 0E2h, 0FEh, 8Bh, 0Eh, 0B0h, 8, 81h, 0E1h, 3Fh, 0Fh + db 81h, 0F9h, 3Fh, 3, 75h, 35h, 0C7h, 6, 0B0h, 8, 2 dup(0FFh) + db 0DDh, 3Eh, 0B0h, 8, 0B9h, 14h, 0, 0E2h, 0FEh, 0F7h + db 6, 0B0h, 8, 0BFh, 0B8h, 75h, 1Eh, 40h, 54h, 59h, 3Bh + db 0CCh, 75h, 17h, 0DBh, 0E3h, 2Eh, 0D9h, 6, 9Bh, 13h + db 0D9h, 0E0h, 2Eh, 0D8h, 1Eh, 9Bh, 13h, 9Bh, 0DFh, 0E0h + db 9Eh, 0B0h, 2, 74h, 1, 40h, 98h, 0A3h, 0B0h, 8, 36h + db 0A2h, 26h, 0, 1Fh, 1Eh +; --------------------------------------------------------------------------- + push bp + mov bp, sp + sub sp, 8 + mov bx, seg dseg + mov ds, bx + cmp word_12B40, 0 + mov word ptr [bp-8], offset e087_Entry + mov word ptr [bp-6], seg seg013 + mov word ptr [bp-4], offset e087_Shortcut + mov word ptr [bp-2], seg seg013 + jnz short loc_1572 + mov word ptr [bp-8], offset loc_11007 + mov word ptr [bp-6], seg seg014 + mov word ptr [bp-4], offset loc_11595 + mov word ptr [bp-2], seg seg014 + +loc_1572: ; CODE XREF: seg000:155Cj + mov ax, 2534h + mov cx, 0Ah + lds dx, [bp-8] + +loc_157B: ; CODE XREF: seg000:157Ej + int 21h ; DOS - SET INTERRUPT VECTOR + ; AL = interrupt number + ; DS:DX = new vector to be used for specified interrupt + inc ax + loop loc_157B + mov ax, 253Eh + lds dx, [bp-4] + int 21h ; DOS - SET INTERRUPT VECTOR + ; AL = interrupt number + ; DS:DX = new vector to be used for specified interrupt + mov ds, bx + cmp word_12B40, 0 + jnz short loc_15BA + mov word ptr ss:61h, offset off_13C8 + mov word ptr ss:63h, cs + push cs + pop ds + assume ds:seg000 + mov ax, ds + xor ax, ss:27h + mov ds, ax + assume ds:dseg + mov word_13665, offset locret_13E3 + mov word_13667, cs + mov word_13627, 0FFFFh + jmp short loc_160B +; --------------------------------------------------------------------------- + +loc_15BA: ; CODE XREF: seg000:158Fj + push cs + pop ds + assume ds:seg000 + cmp byte_1396, 2 + jnz short loc_15E8 + mov ax, word_1397 + mov dx, 13C8h + int 21h ; DOS - DOS v??? - OEM FUNCTION + mov ds, bx + assume ds:dseg + cmp word_12B40, 0 + jz short loc_160B + mov ax, word_1230C + xchg ah, al + cmp ax, 1403h + jnz short loc_160B + mov ax, 2575h + push cs + pop ds + assume ds:seg000 + mov dx, 139Fh + int 21h ; DOS - SET INTERRUPT VECTOR + ; AL = interrupt number + ; DS:DX = new vector to be used for specified interrupt + +loc_15E8: ; CODE XREF: seg000:15C1j + cmp byte_1396, 1 + jnz short loc_160B + mov ax, word_1397 + mov dx, 13C8h + cmp al, 16h + jnz short loc_15FC + mov dx, 13AEh + +loc_15FC: ; CODE XREF: seg000:15F7j + int 21h ; DOS - DOS v??? - OEM FUNCTION + cmp al, 16h + jnz short loc_160B + pushf + cli + in al, 0Ah ; DMA controller, 8237A-5. + ; single mask bit register + ; 0-1: select channel (00=0; 01=1; 10=2; 11=3) + ; 2: 1=set mask for channel; 0=clear mask (enable) + and al, 0BFh + out 0Ah, al ; DMA controller, 8237A-5. + ; single mask bit register + ; 0-1: select channel (00=0; 01=1; 10=2; 11=3) + ; 2: 1=set mask for channel; 0=clear mask (enable) + popf + +loc_160B: ; CODE XREF: seg000:15B8j seg000:15D2j ... + mov ds, bx + assume ds:dseg + mov cs:byte_139A, 1 + ; Hack (fninit) + db 0cdh + db 037h + db 0e3h + mov word ptr ss:41h, 0 + mov word ptr ss:43h, 0 + mov ax, word_12B20 + mov [bp-8], ax + cmp word_12B40, 3 + jl short loc_1635 + or word ptr [bp-8], 2 + +loc_1635: ; CODE XREF: seg000:162Fj + push si + ; Hack (fldcw word ptr [bp-8]) + db 0cdh + db 035h + db 06eh + db 0f8h + pop si + mov ax, [bp-8] + and ss:22h, ax + xor ax, ax + cwd + mov sp, bp + pop bp + pop ds + retn +; --------------------------------------------------------------------------- + push ds + mov ax, seg dseg + mov ds, ax + cmp cs:byte_139A, 0 + jz short loc_16AF + push ds + ; Hack (fninit) + db 0cdh + db 037h + db 0e3h + mov ax, 2534h + mov bx, 1362h + mov cx, 0Bh + +loc_1666: ; CODE XREF: seg000:166Fj + lds dx, cs:[bx] + int 21h ; DOS - SET INTERRUPT VECTOR + ; AL = interrupt number + ; DS:DX = new vector to be used for specified interrupt + add bx, 4 + inc ax + loop loc_1666 + pop ds + cmp word_12B40, 0 + jz short loc_16AF + cmp cs:byte_1396, 2 + jnz short loc_168C + mov ax, 2575h + lds dx, cs:[bx] + int 21h ; DOS - SET INTERRUPT VECTOR + ; AL = interrupt number + ; DS:DX = new vector to be used for specified interrupt + add bx, 4 + +loc_168C: ; CODE XREF: seg000:167Fj + mov ax, cs:word_1397 + cmp cs:byte_1396, 1 + jnz short loc_16AA + cmp al, 16h + jnz short loc_16AA + xchg ax, dx + pushf + cli + in al, 0Ah ; DMA controller, 8237A-5. + ; single mask bit register + ; 0-1: select channel (00=0; 01=1; 10=2; 11=3) + ; 2: 1=set mask for channel; 0=clear mask (enable) + or al, cs:byte_1399 + out 0Ah, al ; DMA controller, 8237A-5. + ; single mask bit register + ; 0-1: select channel (00=0; 01=1; 10=2; 11=3) + ; 2: 1=set mask for channel; 0=clear mask (enable) + popf + xchg ax, dx + +loc_16AA: ; CODE XREF: seg000:1696j seg000:169Aj + lds dx, cs:[bx] + int 21h ; DOS - + +loc_16AF: ; CODE XREF: seg000:1657j seg000:1677j + mov cs:byte_139A, 0 + pop ds + retn + +; =============== S U B R O U T I N E ======================================= + + +sub_16B7 proc far ; CODE XREF: sub_115C9:loc_11606P + mov ax, cs:word_1397 + retf +sub_16B7 endp + + +; =============== S U B R O U T I N E ======================================= + +; BCC v4.x/5.x DOS runtime +; Attributes: library function bp-based frame + +unknown_libname_1 proc near ; CODE XREF: sub_16DE+11Fp + ; sub_16DE+15Cp + push bp + mov bp, sp + mov al, 5Fh ; '_' + and al, dl + cmp al, 47h ; 'G' + jnz short loc_16D5 + +loc_16C7: ; CODE XREF: unknown_libname_1+15j + cmp byte ptr es:[bx-1], 30h ; '0' + jnz short loc_16D5 + dec bx + cmp bx, cx + ja short loc_16C7 + jmp short loc_16DC +; --------------------------------------------------------------------------- + +loc_16D5: ; CODE XREF: unknown_libname_1+9j + ; unknown_libname_1+10j + cmp es:[bx-1], ah + jnz short loc_16DC + dec bx + +loc_16DC: ; CODE XREF: unknown_libname_1+17j + ; unknown_libname_1+1Dj + pop bp + retn +unknown_libname_1 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_16DE proc near ; CODE XREF: sub_96ABj + ; DATA XREF: dseg:off_133CCo + +var_32 = byte ptr -32h +var_5 = byte ptr -5 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 4 +arg_2 = byte ptr 6 +arg_4 = byte ptr 8 +arg_6 = dword ptr 0Ah +arg_A = word ptr 0Eh +arg_C = word ptr 10h +arg_E = word ptr 12h + + push bp + mov bp, sp + sub sp, 32h + push si + push di + les bx, off_12FCC + assume es:nothing + mov al, es:[bx] + mov [bp+var_5], al + push es + mov ax, [bp+arg_A] + cmp ax, 28h ; '(' + jbe short loc_16FF + mov ax, 28h ; '(' + mov [bp+arg_A], ax + +loc_16FF: ; CODE XREF: sub_16DE+19j + mov [bp+var_4], ax + mov dl, [bp+arg_4] + and dl, 0DFh + cmp dl, 46h ; 'F' + jnz short loc_1718 + neg ax + jle short loc_1721 + sub ax, ax + mov [bp+arg_A], ax + jmp short loc_1721 +; --------------------------------------------------------------------------- + +loc_1718: ; CODE XREF: sub_16DE+2Dj + or ax, ax + jg short loc_1721 + mov ax, 1 + jmp short loc_172A +; --------------------------------------------------------------------------- + +loc_1721: ; CODE XREF: sub_16DE+31j sub_16DE+38j ... + cmp dl, 45h ; 'E' + jnz short loc_172A + inc ax + inc [bp+arg_A] + +loc_172A: ; CODE XREF: sub_16DE+41j sub_16DE+46j + push [bp+arg_E] + push [bp+arg_C] + push ax + push ss + lea bx, [bp+var_2] + push bx + push ss + lea si, [bp+var_32] + push si + mov ax, [bp+arg_0] + push ax + call sub_188C + xchg ax, bx + les di, [bp+arg_6] + cld + cmp bx, 7FFFh + jz short loc_1755 + cmp bx, 7FFEh + jz short loc_1768 + jmp short loc_177A +; --------------------------------------------------------------------------- + +loc_1755: ; CODE XREF: sub_16DE+6Dj + mov ax, 492Bh + cmp [bp+var_2], 0 + jz short loc_1760 + inc ax + inc ax + +loc_1760: ; CODE XREF: sub_16DE+7Ej + stosw + mov ax, 464Eh + stosw + jmp loc_187B +; --------------------------------------------------------------------------- + +loc_1768: ; CODE XREF: sub_16DE+73j + mov ax, 4E2Bh + cmp [bp+var_2], 0 + jz short loc_1773 + inc ax + inc ax + +loc_1773: ; CODE XREF: sub_16DE+91j + stosw + mov al, 41h ; 'A' + stosw + jmp loc_187B +; --------------------------------------------------------------------------- + +loc_177A: ; CODE XREF: sub_16DE+75j + cmp byte ptr [bp+var_2], 0 + jz short loc_1783 + mov al, 2Dh ; '-' + stosb + +loc_1783: ; CODE XREF: sub_16DE+A0j + mov dl, [bp+arg_4] + and dl, 5Fh + cmp dl, 46h ; 'F' + jz short loc_17A4 + cmp dl, 45h ; 'E' + jz short loc_180C + cmp bx, 0FFFDh + jl short loc_180C + mov ax, [bp+arg_A] + or ax, ax + jnz short loc_17A0 + inc ax + +loc_17A0: ; CODE XREF: sub_16DE+BFj + cmp bx, ax + jg short loc_180C + +loc_17A4: ; CODE XREF: sub_16DE+AEj + cmp bx, 28h ; '(' + jg short loc_180C + or bx, bx + jg short loc_17BE + mov ah, [bp+var_5] + mov al, 30h ; '0' + stosw + mov cx, 1 + jz short loc_17C1 + mov al, 30h ; '0' + +loc_17BA: ; CODE XREF: sub_16DE+DEj + stosb + inc bx + jnz short loc_17BA + +loc_17BE: ; CODE XREF: sub_16DE+CDj + mov cx, 0 + +loc_17C1: ; CODE XREF: sub_16DE+D8j sub_16DE+EBj ... + lods byte ptr ss:[si] + or al, al + jz short loc_17D2 + stosb + dec bx + jnz short loc_17C1 + mov al, [bp+var_5] + stosb + inc cx + jmp short loc_17C1 +; --------------------------------------------------------------------------- + +loc_17D2: ; CODE XREF: sub_16DE+E7j + mov ax, [bp+arg_A] + add cx, [bp+var_4] + cmp ax, cx + jbe short loc_17E9 + sub ax, cx + mov cx, ax + add bx, ax + mov al, 30h ; '0' + rep stosb + dec bx + jz short loc_1802 + +loc_17E9: ; CODE XREF: sub_16DE+FCj + dec bx + jz short loc_1802 + cmp [bp+arg_2], 0 + jnz short loc_1802 + mov dl, [bp+arg_4] + mov cx, word ptr [bp+arg_6] + xchg bx, di + mov ah, [bp+var_5] + call unknown_libname_1 ; BCC v4.x/5.x DOS runtime + xchg di, bx + +loc_1802: ; CODE XREF: sub_16DE+109j + ; sub_16DE+10Cj ... + cmp di, word ptr [bp+arg_6] + jnz short loc_180A + mov al, 30h ; '0' + stosb + +loc_180A: ; CODE XREF: sub_16DE+127j + jmp short loc_187B +; --------------------------------------------------------------------------- + +loc_180C: ; CODE XREF: sub_16DE+B3j sub_16DE+B8j ... + lods word ptr ss:[si] + stosb + mov al, [bp+var_5] + or ah, ah + jnz short loc_181F + cmp [bp+arg_2], 0 + jz short loc_183F + stosb + jmp short loc_183F +; --------------------------------------------------------------------------- + +loc_181F: ; CODE XREF: sub_16DE+136j + stosb + mov al, ah + +loc_1822: ; CODE XREF: sub_16DE+149j + stosb + lods byte ptr ss:[si] + or al, al + jnz short loc_1822 + cmp [bp+arg_2], 0 + jnz short loc_183F + mov dl, [bp+arg_4] + mov cx, word ptr [bp+arg_6] + xchg bx, di + mov ah, [bp+var_5] + call unknown_libname_1 ; BCC v4.x/5.x DOS runtime + xchg di, bx + +loc_183F: ; CODE XREF: sub_16DE+13Cj + ; sub_16DE+13Fj ... + mov al, 20h ; ' ' + and al, [bp+arg_4] + or al, 45h + stosb + mov ax, 2D2Bh + dec bx + jge short loc_1851 + xchg al, ah + neg bx + +loc_1851: ; CODE XREF: sub_16DE+16Dj + stosb + xchg ax, bx + mov cx, 3030h + cmp ax, 63h ; 'c' + jbe short loc_1874 + cmp ax, 3E7h + jbe short loc_186A + cwd + mov bx, 3E8h + div bx + add al, cl + stosb + xchg ax, dx + +loc_186A: ; CODE XREF: sub_16DE+180j + mov bl, 64h ; 'd' + div bl + add al, cl + stosb + xchg al, ah + cbw + +loc_1874: ; CODE XREF: sub_16DE+17Bj + mov bl, 0Ah + div bl + add ax, cx + stosw + +loc_187B: ; CODE XREF: sub_16DE+87j sub_16DE+99j ... + xor al, al + stosb + pop es + pop di + pop si + mov sp, bp + pop bp + retn 10h +sub_16DE endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + pop bp + retn + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_188C proc near ; CODE XREF: sub_16DE+61p + +var_10 = tbyte ptr -10h +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 4 +arg_2 = dword ptr 6 +arg_6 = dword ptr 0Ah +arg_A = word ptr 0Eh +arg_C = dword ptr 10h + + push bp + mov bp, sp + sub sp, 10h + push si + push di + mov [bp+var_2], 8000h + mov [bp+var_4], 0Ah + push es + les di, [bp+arg_C] + mov ax, 7FFFh + mov bx, [bp+arg_0] + mov cx, es:[bx+di] + and [bp+var_2], cx + and es:[bx+di], ax + shr bx, 1 + shr bx, 1 + shl bx, 1 + jmp cs:off_18BC[bx] +; --------------------------------------------------------------------------- +off_18BC dw offset loc_18C2 ; DATA XREF: sub_188C+2Br + dw offset loc_18C8 + dw offset loc_18CE +; --------------------------------------------------------------------------- + +loc_18C2: ; CODE XREF: sub_188C+2Bj + ; DATA XREF: sub_188C:off_18BCo + ; Hack (fld dword ptr es:[di]) + db 0cdh + db 03ch + db 0d9h + db 005h + jmp short loc_18DF +; --------------------------------------------------------------------------- + +loc_18C8: ; CODE XREF: sub_188C+2Bj + ; DATA XREF: sub_188C+32o + ; Hack (fld qword ptr es:[di]) + db 0cdh + db 03ch + db 0ddh + db 005h + jmp short loc_18DF +; --------------------------------------------------------------------------- + +loc_18CE: ; CODE XREF: sub_188C+2Bj + ; DATA XREF: sub_188C+34o + and ax, es:[di+8] + cmp ax, 7FFFh + jz short loc_18DB + and byte ptr es:[di], 0F0h + +loc_18DB: ; CODE XREF: sub_188C+49j + ; Hack (fld tbyte ptr es:[di]) + db 0cdh + db 03ch + db 0dbh + db 02dh + +loc_18DF: ; CODE XREF: sub_188C+3Aj sub_188C+40j + xor bx, bx + shl cx, 1 + rcl bx, 1 + les di, [bp+arg_6] + mov es:[di], bx + ; Hack (fxam) + db 0cdh + db 035h + db 0e5h + ; Hack (fnstsw [bp+var_6]) + db 0cdh + db 039h + db 07eh + db 0fah + ; Hack (wait) + db 0cdh + db 03dh + mov ax, [bp+var_6] + and ah, 47h + cmp ah, 40h ; '@' + jz short loc_1915 + cmp ah, 5 + jz short loc_1910 + cmp ah, 1 + jz short loc_190B + jmp short loc_1943 +; --------------------------------------------------------------------------- + +loc_190B: ; CODE XREF: sub_188C+7Bj + mov dx, 7FFEh + jmp short loc_193D +; --------------------------------------------------------------------------- + +loc_1910: ; CODE XREF: sub_188C+76j + mov dx, 7FFFh + jmp short loc_193D +; --------------------------------------------------------------------------- + +loc_1915: ; CODE XREF: sub_188C+71j sub_188C+EAj ... + mov dx, 1 + mov al, 30h ; '0' + les di, [bp+arg_6] + mov word ptr es:[di], 0 + mov cx, [bp+arg_A] + or cx, cx + jg short loc_192C + neg cx + inc cx + +loc_192C: ; CODE XREF: sub_188C+9Bj + cmp cx, 28h ; '(' + jbe short loc_1934 + mov cx, 28h ; '(' + +loc_1934: ; CODE XREF: sub_188C+A3j + cld + les di, [bp+arg_2] + rep stosb + xor al, al + stosb + +loc_193D: ; CODE XREF: sub_188C+82j sub_188C+87j + ; Hack (fstp st) + db 0cdh + db 039h + db 0d8h + jmp loc_1A88 +; --------------------------------------------------------------------------- + +loc_1943: ; CODE XREF: sub_188C+7Dj + ; Hack (fstp st) + db 0cdh + db 035h + db 0c0h + ; Hack (fstp [bp+var_10]) + db 0cdh + db 037h + db 07eh + db 0f0h + ; Hack (wait) + db 0cdh + db 03dh + mov ax, word ptr [bp+var_10+8] + sub ax, 3FFFh + mov dx, 4D10h + imul dx + xchg ax, bx + mov ah, 4Dh ; 'M' + mov al, byte ptr [bp+var_10+7] + shl al, 1 + mul ah + add ax, bx + adc dx, 0 + neg ax + adc dx, 0 + mov ax, [bp+arg_A] + or ax, ax + jg short loc_1978 + neg ax + add ax, dx + jl short loc_1915 + +loc_1978: ; CODE XREF: sub_188C+E4j + cmp ax, 12h + jle short loc_1980 + mov ax, 12h + +loc_1980: ; CODE XREF: sub_188C+EFj + mov bx, ax + sub ax, dx + +loc_1984: ; CODE XREF: sub_188C+118j + ; sub_188C+120j + jz short loc_19AE + mov si, ax + jge short loc_198C + neg ax + +loc_198C: ; CODE XREF: sub_188C+FCj + cmp ax, 1344h + jle short loc_1994 + mov ax, 1344h + +loc_1994: ; CODE XREF: sub_188C+103j + push ax ; p + nop + push cs + call near ptr _pow10 + pop ax + or si, si + jg short loc_19A6 + ; Hack (fdivp st(1), st) + db 0cdh + db 03ah + db 0f9h + add ax, si + jmp short loc_1984 +; --------------------------------------------------------------------------- + +loc_19A6: ; CODE XREF: sub_188C+111j + ; Hack (fmulp st(1), st) + db 0cdh + db 03ah + db 0c9h + xchg ax, si + sub ax, si + jmp short loc_1984 +; --------------------------------------------------------------------------- + +loc_19AE: ; CODE XREF: sub_188C:loc_1984j + push bx ; p + nop + push cs + call near ptr _pow10 + pop ax + ; Hack (fcomp st(1)) + db 0cdh + db 034h + db 0d9h + ; Hack (fnstsw [bp+var_6]) + db 0cdh + db 039h + db 07eh + db 0fah + ; Hack (wait) + db 0cdh + db 03dh + test byte ptr [bp+var_6+1], 45h + jz short loc_19D8 + inc dx + inc bx + cmp bx, 12h + ja short loc_19D1 + cmp [bp+arg_A], 0 + jle short loc_19FE + +loc_19D1: ; CODE XREF: sub_188C+13Dj + ; Hack (fidiv [bp+var_4]) + db 0cdh + db 03ah + db 076h + db 0fch + dec bx + jmp short loc_19FE +; --------------------------------------------------------------------------- + +loc_19D8: ; CODE XREF: sub_188C+136j + mov ax, bx + dec ax + push ax ; p + nop + push cs + call near ptr _pow10 + pop ax + ; Hack (fcomp st(1)) + db 0cdh + db 034h + db 0d9h + ; Hack (fnstsw [bp+var_6]) + db 0cdh + db 039h + db 07eh + db 0fah + ; Hack (wait) + db 0cdh + db 03dh + test byte ptr [bp+var_6+1], 41h + jnz short loc_19FE + dec dx + dec bx + cmp [bp+arg_A], 0 + jle short loc_19FE + ; Hack (fimul [bp+var_4]) + db 0cdh + db 03ah + db 04eh + db 0fch + inc bx + +loc_19FE: ; CODE XREF: sub_188C+143j + ; sub_188C+14Aj ... + or bx, bx + jl short loc_1A27 + ; Hack (frndint) + db 0cdh + db 035h + db 0fch + ; Hack (fbstp [bp+var_10]) + db 0cdh + db 03bh + db 076h + db 0f0h + les di, [bp+arg_2] + add di, bx + push di + xor al, al + std + stosb + lea si, [bp+var_10] + mov cx, 4 + ; Hack (wait) + db 0cdh + db 03dh + or bx, bx + jnz short loc_1A2E + mov ch, ss:[si] + xor ch, 1 + jz short loc_1A49 + +loc_1A27: ; CODE XREF: sub_188C+174j + ; Hack (fldz) + db 0cdh + db 035h + db 0eeh + pop di + jmp loc_1915 +; --------------------------------------------------------------------------- + +loc_1A2E: ; CODE XREF: sub_188C+191j + ; sub_188C+1BBj + mov al, ss:[si] + inc si + mov ah, al + shr ah, cl + and al, 0Fh + add ax, 3030h + stosb + or ch, al + dec bx + jz short loc_1A49 + mov al, ah + stosb + or ch, al + dec bx + jnz short loc_1A2E + +loc_1A49: ; CODE XREF: sub_188C+199j + ; sub_188C+1B3j + pop bx + and ch, 0Fh + jnz short loc_1A60 + inc dx + cmp [bp+arg_A], 0 + jg short loc_1A5A + mov byte ptr es:[bx], 30h ; '0' + +loc_1A5A: ; CODE XREF: sub_188C+1C8j + inc bx + mov byte ptr es:[di+1], 31h ; '1' + +loc_1A60: ; CODE XREF: sub_188C+1C1j + mov cx, [bp+arg_A] + or cx, cx + jg short loc_1A6B + neg cx + add cx, dx + +loc_1A6B: ; CODE XREF: sub_188C+1D9j + cmp cx, 28h ; '(' + jbe short loc_1A73 + mov cx, 28h ; '(' + +loc_1A73: ; CODE XREF: sub_188C+1E2j + mov byte ptr es:[bx], 0 + mov ax, bx + sub ax, word ptr [bp+arg_2] + sub cx, ax + jbe short loc_1A88 + +loc_1A80: ; CODE XREF: sub_188C+1FAj + mov word ptr es:[bx], 30h ; '0' + inc bx + loop loc_1A80 + +loc_1A88: ; CODE XREF: sub_188C+B4j + ; sub_188C+1F2j + cld + les di, [bp+arg_C] + mov bx, [bp+arg_0] + mov cx, [bp+var_2] + or es:[bx+di], cx + pop es + mov ax, dx + pop di + pop si + mov sp, bp + pop bp + retn 10h +sub_188C endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_1AA0 proc near ; CODE XREF: seg000:13DFp + +var_8 = dword ptr -8 +var_4 = dword ptr -4 + + push bp + mov bp, sp + sub sp, 8 + mov word ptr [bp+var_4+2], ss + mov word ptr [bp+var_4], bx + mov ax, word ptr dword_13FA0 + or ax, word ptr dword_13FA0+2 + jz short loc_1B14 + xor ax, ax + push ax + push ax + mov ax, 8 + push ax + call dword_13FA0 + add sp, 6 + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + push dx + push ax + mov ax, 8 + push ax + call dword_13FA0 + add sp, 6 + cmp word ptr [bp+var_8+2], 0 + jnz short loc_1AE3 + cmp word ptr [bp+var_8], 1 + jz short loc_1B43 + +loc_1AE3: ; CODE XREF: sub_1AA0+3Bj + mov ax, word ptr [bp+var_8] + or ax, word ptr [bp+var_8+2] + jz short loc_1B14 + xor ax, ax + push ax + push ax + mov ax, 8 + push ax + call dword_13FA0 + les bx, [bp+var_4] + mov ax, 6 + imul word ptr es:[bx] + mov bx, ax + push word ptr [bx+8ACh] + mov ax, 8 + push ax + call [bp+var_8] + add sp, 0Ah + mov sp, bp + pop bp + retn +; --------------------------------------------------------------------------- + +loc_1B14: ; CODE XREF: sub_1AA0+13j sub_1AA0+49j + les bx, [bp+var_4] + mov ax, 6 + imul word ptr es:[bx] + mov dx, 8ACh + add dx, 2 + add ax, dx + mov bx, ax + push word ptr [bx+2] + push word ptr [bx] + push ds + mov ax, 931h + push ax ; format + push ds + mov ax, 0A22h + push ax ; stream + nop + push cs + call near ptr _fprintf + add sp, 0Ch + nop + push cs + call near ptr _abort +; --------------------------------------------------------------------------- + +loc_1B43: ; CODE XREF: sub_1AA0+41j + mov sp, bp + pop bp + retn +sub_1AA0 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_1B47 proc near ; CODE XREF: _pow10+6p + +arg_0 = word ptr 4 + + push bp + mov bp, sp + push si + mov ax, [bp+arg_0] + cmp ax, 0ECBCh + jge short loc_1B59 + ; Hack (fldz) + db 0cdh + db 035h + db 0eeh + jmp loc_1C0B +; --------------------------------------------------------------------------- + +loc_1B59: ; CODE XREF: sub_1B47+Aj + cmp ax, 1344h + jle short loc_1B66 + ; Hack (fld flt_12C58) + db 0cdh + db 035h + db 006h + db 0c8h + db 009h + jmp loc_1C0B +; --------------------------------------------------------------------------- + +loc_1B66: ; CODE XREF: sub_1B47+15j + or ax, ax + jnz short loc_1B70 + ; Hack (fld1) + db 0cdh + db 035h + db 0e8h + jmp loc_1C0B +; --------------------------------------------------------------------------- + +loc_1B70: ; CODE XREF: sub_1B47+21j + or ax, ax + jge short loc_1B76 + neg ax + +loc_1B76: ; CODE XREF: sub_1B47+2Bj + mov si, 7 + and si, ax + shl si, 1 + shl si, 1 + ; Hack (fld dword ptr [si+94Ch]) + db 0cdh + db 035h + db 084h + db 04ch + db 009h + shr ax, 1 + shr ax, 1 + shr ax, 1 + shr ax, 1 + jnb short loc_1B93 + ; Hack (fmul flt_12BFC) + db 0cdh + db 034h + db 00eh + db 06ch + db 009h + +loc_1B93: ; CODE XREF: sub_1B47+45j + jnz short loc_1B97 + jmp short loc_1C00 +; --------------------------------------------------------------------------- + +loc_1B97: ; CODE XREF: sub_1B47:loc_1B93j + shr ax, 1 + jnb short loc_1BA0 + ; Hack (fmul dbl_12C00) + db 0cdh + db 038h + db 00eh + db 070h + db 009h + +loc_1BA0: ; CODE XREF: sub_1B47+52j + shr ax, 1 + jnb short loc_1BAC + ; Hack (fld tbyte_12C08) + db 0cdh + db 037h + db 02eh + db 078h + db 009h + ; Hack (fmulp st(1), st) + db 0cdh + db 03ah + db 0c9h + +loc_1BAC: ; CODE XREF: sub_1B47+5Bj + shr ax, 1 + jnb short loc_1BB8 + ; Hack (fld tbyte_12C12) + db 0cdh + db 037h + db 02eh + db 082h + db 009h + ; Hack (fmulp st(1), st) + db 0cdh + db 03ah + db 0c9h + +loc_1BB8: ; CODE XREF: sub_1B47+67j + shr ax, 1 + jnb short loc_1BC4 + ; Hack (fld tbyte_12C1C) + db 0cdh + db 037h + db 02eh + db 08Ch + db 009h + ; Hack (fmulp st(1), st) + db 0cdh + db 03ah + db 0c9h + +loc_1BC4: ; CODE XREF: sub_1B47+73j + shr ax, 1 + jnb short loc_1BD0 + ; Hack (fld tbyte_12C26) + db 0cdh + db 037h + db 02eh + db 096h + db 009h + ; Hack (fmulp st(1), st) + db 0cdh + db 03ah + db 0c9h + +loc_1BD0: ; CODE XREF: sub_1B47+7Fj + shr ax, 1 + jnb short loc_1BDC + ; Hack (fld tbyte_12C30) + db 0cdh + db 037h + db 02eh + db 0a0h + db 009h + ; Hack (fmulp st(1), st) + db 0cdh + db 03ah + db 0c9h + +loc_1BDC: ; CODE XREF: sub_1B47+8Bj + shr ax, 1 + jnb short loc_1BE8 + ; Hack (fld tbyte_12C3A) + db 0cdh + db 037h + db 02eh + db 0aah + db 009h + ; Hack (fmulp st(1), st) + db 0cdh + db 03ah + db 0c9h + +loc_1BE8: ; CODE XREF: sub_1B47+97j + shr ax, 1 + jnb short loc_1BF4 + ; Hack (fld tbyte_12C44) + db 0cdh + db 037h + db 02eh + db 0b4h + db 009h + ; Hack (fmulp st(1), st) + db 0cdh + db 03ah + db 0c9h + +loc_1BF4: ; CODE XREF: sub_1B47+A3j + shr ax, 1 + jnb short loc_1C00 + ; Hack (fld tbyte_12C44) + db 0cdh + db 037h + db 02eh + db 0beh + db 009h + ; Hack (fmulp st(1), st) + db 0cdh + db 03ah + db 0c9h + +loc_1C00: ; CODE XREF: sub_1B47+4Ej sub_1B47+AFj + test byte ptr [bp+arg_0+1], 80h + jz short loc_1C0B + ; Hack (fdivr flt_12BDC) + db 0cdh + db 034h + db 03eh + db 04ch + db 009h + +loc_1C0B: ; CODE XREF: sub_1B47+Fj sub_1B47+1Cj ... + pop si + pop bp + retn 2 +sub_1B47 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; double __cdecl pow10(int p) +_pow10 proc far ; CODE XREF: sub_188C+10Bp + ; sub_188C+125p ... + +p = word ptr 6 + + push bp + mov bp, sp + push [bp+p] + call sub_1B47 + pop bp + retf +_pow10 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_1C1B proc far ; CODE XREF: sub_C247+9BP sub_C247+DCP ... + +var_A = qword ptr -0Ah +var_2 = word ptr -2 + + push bp + mov bp, sp + sub sp, 0Ah + ; Hack (fnstcw [bp+var_2]) + db 0cdh + db 035h + db 07eh + db 0feh + ; Hack (wait) + db 0cdh + db 03dh + mov al, byte ptr [bp+var_2+1] + or byte ptr [bp+var_2+1], 0Ch + ; Hack (fldcw [bp+var_2]) + db 0cdh + db 035h + db 06eh + db 0feh + ; Hack (fistp [bp+var_A]) + db 0cdh + db 03bh + db 07eh + db 0f6h + mov byte ptr [bp+var_2+1], al + ; Hack (fldcw [bp+var_2]) + db 0cdh + db 035h + db 06eh + db 0feh + mov ax, word ptr [bp+var_A] + mov dx, word ptr [bp+var_A+2] + mov sp, bp + pop bp + retf +sub_1C1B endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: noreturn + +sub_1C47 proc far ; CODE XREF: start+80p start+10Dp ... + push si + push di + push ds + mov ax, 9CCh + push ax ; buf + nop + push cs + call near ptr ___ErrorMessage + mov ax, 3 + push ax ; status + nop + push cs + call near ptr __exit +sub_1C47 endp + +; --------------------------------------------------------------------------- + add sp, 6 + pop di + pop si + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; char *__cdecl stpcpy(char *dest, const char *src) +_stpcpy proc far ; CODE XREF: __DOSENV+DDp + ; __DOSENV+140p ... + +var_2 = word ptr -2 +dest = dword ptr 6 +_s = dword ptr 0Ah + + push bp + mov bp, sp + sub sp, 2 + push si + push di + push word ptr [bp+_s+2] + push word ptr [bp+_s] ; s + nop + push cs + call near ptr _strlen + pop cx + pop cx + mov [bp+var_2], ax + inc ax + push ax ; n + push word ptr [bp+_s+2] + push word ptr [bp+_s] ; src + push word ptr [bp+dest+2] + push word ptr [bp+dest] ; dest + nop + push cs + call near ptr _memcpy + add sp, 0Ah + mov dx, word ptr [bp+dest+2] + mov ax, word ptr [bp+dest] + add ax, [bp+var_2] + pop di + pop si + mov sp, bp + pop bp + retf +_stpcpy endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function noreturn + +; void abort(void) +_abort proc far ; CODE XREF: sub_1AA0+A0p + ; terminate(void)+4p ... + push si + push di + mov ax, 16h + push ax + nop + push cs + call near ptr sub_3A01 + pop cx + nop + push cs + call near ptr sub_1C47 +_abort endp + +; --------------------------------------------------------------------------- + pop di + pop si + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl atexit(void (*func)(void)) +_atexit proc far + +func = dword ptr 6 + + push bp + mov bp, sp + push si + push di + cmp word_12C7C, 20h ; ' ' + jnz short loc_1CC4 + mov ax, 1 + jmp short loc_1CE0 +; --------------------------------------------------------------------------- + +loc_1CC4: ; CODE XREF: _atexit+Aj + mov bx, word_12C7C + mov cl, 2 + shl bx, cl + mov dx, word ptr [bp+func+2] + mov ax, word ptr [bp+func] + mov [bx+1C84h], dx + mov [bx+1C82h], ax + inc word_12C7C + xor ax, ax + +loc_1CE0: ; CODE XREF: _atexit+Fj + pop di + pop si + pop bp + retf +_atexit endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl registerbgidriver(void (*driver)(void)) +_registerbgidriver proc far ; CODE XREF: _registerbgifont+Dp + ; seg000:25DAp ... + +driver = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + push si + push di + push [bp+arg_2] + push [bp+driver] + nop + push cs + call near ptr sub_318E + pop cx + pop cx + pop di + pop si + pop bp + retf +_registerbgidriver endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl registerbgifont(void (*font)(void)) +_registerbgifont proc far ; CODE XREF: sub_86BB+3A5p + ; sub_D631+3EP ... + +driver = dword ptr 6 + + push bp + mov bp, sp + push si + push di + push word ptr [bp+driver+2] + push word ptr [bp+driver] ; driver + nop + push cs + call near ptr _registerbgidriver + pop cx + pop cx + pop di + pop si + pop bp + retf +_registerbgifont endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __stdcall _DOSENV(__int32, char *src, int, int) +__DOSENV proc near ; CODE XREF: sub_9F6A+1E4p + +dest = dword ptr -0Ah +var_6 = word ptr -6 +var_4 = dword ptr -4 +arg_0 = dword ptr 4 +src = dword ptr 8 +arg_8 = word ptr 0Ch +arg_A = word ptr 0Eh + + push bp + mov bp, sp + sub sp, 0Ah + push si + push di + mov [bp+var_6], 1 + mov dx, [bp+arg_A] + mov ax, [bp+arg_8] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + or ax, dx + jz short loc_1D62 + mov [bp+var_6], 0 + jmp short loc_1D4D +; --------------------------------------------------------------------------- + +loc_1D34: ; CODE XREF: __DOSENV+50j + les bx, [bp+var_4] + add word ptr [bp+var_4], 4 + push word ptr es:[bx+2] + push word ptr es:[bx] ; s + nop + push cs + call near ptr _strlen + pop cx + pop cx + inc ax + add [bp+var_6], ax + +loc_1D4D: ; CODE XREF: __DOSENV+22j + les bx, [bp+var_4] + mov ax, es:[bx] + or ax, es:[bx+2] + jz short loc_1D62 + les bx, es:[bx] + cmp byte ptr es:[bx], 0 + jnz short loc_1D34 + +loc_1D62: ; CODE XREF: __DOSENV+1Bj __DOSENV+47j + inc [bp+var_6] + mov ax, word ptr [bp+src] + or ax, word ptr [bp+src+2] + jz short loc_1D80 + push word ptr [bp+src+2] + push word ptr [bp+src] ; s + nop + push cs + call near ptr _strlen + pop cx + pop cx + add ax, 3 + add [bp+var_6], ax + +loc_1D80: ; CODE XREF: __DOSENV+5Bj + cmp [bp+var_6], 8000h + jb short loc_1D8A + jmp loc_1E71 +; --------------------------------------------------------------------------- + +loc_1D8A: ; CODE XREF: __DOSENV+75j + mov ax, [bp+var_6] + add ax, 0Fh + push ax + nop + push cs + call near ptr sub_32C1 + pop cx + mov word ptr [bp+dest+2], dx + mov word ptr [bp+dest], ax + or ax, dx + jnz short loc_1DA4 + jmp loc_1E71 +; --------------------------------------------------------------------------- + +loc_1DA4: ; CODE XREF: __DOSENV+8Fj + les bx, [bp+arg_0] + mov ax, word ptr [bp+dest] + mov es:[bx+2], dx + mov es:[bx], ax + add word ptr [bp+dest], 0Fh + and word ptr [bp+dest], 0FFF0h + mov dx, [bp+arg_A] + mov ax, [bp+arg_8] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + or ax, dx + jz short loc_1E1A + les bx, [bp+var_4] + mov ax, es:[bx] + or ax, es:[bx+2] + jz short loc_1E1A + jmp short loc_1E03 +; --------------------------------------------------------------------------- + +loc_1DD7: ; CODE XREF: __DOSENV+106j + les bx, [bp+var_4] + add word ptr [bp+var_4], 4 + push word ptr es:[bx+2] + push word ptr es:[bx] ; src + push word ptr [bp+dest+2] + push word ptr [bp+dest] ; dest + nop + push cs + call near ptr _stpcpy + add sp, 8 + mov word ptr [bp+dest+2], dx + mov word ptr [bp+dest], ax + les bx, [bp+dest] + mov byte ptr es:[bx], 0 + inc word ptr [bp+dest] + +loc_1E03: ; CODE XREF: __DOSENV+C5j + les bx, [bp+var_4] + mov ax, es:[bx] + or ax, es:[bx+2] + jz short loc_1E24 + les bx, es:[bx] + cmp byte ptr es:[bx], 0 + jnz short loc_1DD7 + jmp short loc_1E24 +; --------------------------------------------------------------------------- + +loc_1E1A: ; CODE XREF: __DOSENV+B7j __DOSENV+C3j + les bx, [bp+dest] + mov byte ptr es:[bx], 0 + inc word ptr [bp+dest] + +loc_1E24: ; CODE XREF: __DOSENV+FDj + ; __DOSENV+108j + les bx, [bp+dest] + mov byte ptr es:[bx], 0 + inc word ptr [bp+dest] + mov ax, word ptr [bp+src] + or ax, word ptr [bp+src+2] + jz short loc_1E66 + les bx, [bp+dest] + mov word ptr es:[bx], 1 + add word ptr [bp+dest], 2 + push word ptr [bp+src+2] + push word ptr [bp+src] ; src + push word ptr [bp+dest+2] + push word ptr [bp+dest] ; dest + nop + push cs + call near ptr _stpcpy + add sp, 8 + mov word ptr [bp+dest+2], dx + mov word ptr [bp+dest], ax + les bx, [bp+dest] + mov byte ptr es:[bx], 0 + inc word ptr [bp+dest] + +loc_1E66: ; CODE XREF: __DOSENV+124j + mov dx, word ptr [bp+dest+2] + mov ax, word ptr [bp+dest] + sub ax, [bp+var_6] + jmp short loc_1E75 +; --------------------------------------------------------------------------- + +loc_1E71: ; CODE XREF: __DOSENV+77j __DOSENV+91j + xor dx, dx + xor ax, ax + +loc_1E75: ; CODE XREF: __DOSENV+15Fj + pop di + pop si + mov sp, bp + pop bp + retn 0Ch +__DOSENV endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; unsigned int __cdecl _dos_getfileattr(const char *filename, unsigned int *attrib) +__dos_getfileattr proc far ; CODE XREF: __TMPNAM+43p + +filename = dword ptr 6 +attrib = dword ptr 0Ah + + push bp + mov bp, sp + push si + push di + push ds + mov ah, 43h ; 'C' + xor al, al + lds dx, [bp+filename] + int 21h ; DOS - 2+ - GET FILE ATTRIBUTES + ; DS:DX -> ASCIZ file name or directory + ; name without trailing slash + pop ds + jb short loc_1E99 + les bx, [bp+attrib] + mov es:[bx], cx + xor ax, ax + jmp short loc_1E9D +; --------------------------------------------------------------------------- + +loc_1E99: ; CODE XREF: __dos_getfileattr+10j + push ax + call __DOSERROR + +loc_1E9D: ; CODE XREF: __dos_getfileattr+1Aj + pop di + pop si + pop bp + retf +__dos_getfileattr endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; unsigned int __cdecl _dos_setfileattr(const char *filename, unsigned int attrib) +__dos_setfileattr proc far + +filename = dword ptr 6 +attrib = word ptr 0Ah + + push bp + mov bp, sp + push si + push di + push ds + mov ah, 43h ; 'C' + mov al, 1 + lds dx, [bp+filename] + mov cx, [bp+attrib] + int 21h ; DOS - 2+ - SET FILE ATTRIBUTES + ; DS:DX -> ASCIZ file name + ; CX = file attribute bits + pop ds + jb short loc_1EBA + xor ax, ax + jmp short loc_1EBE +; --------------------------------------------------------------------------- + +loc_1EBA: ; CODE XREF: __dos_setfileattr+13j + push ax + call __DOSERROR + +loc_1EBE: ; CODE XREF: __dos_setfileattr+17j + pop di + pop si + pop bp + retf +__dos_setfileattr endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; void __cdecl _dos_getdrive(unsigned int *drive) +__dos_getdrive proc far ; CODE XREF: sub_45E7+66p + +drive = dword ptr 6 + + push bp + mov bp, sp + push si + push di + mov ah, 19h + int 21h ; DOS - GET DEFAULT DISK NUMBER + mov ah, 0 + inc ax + les bx, [bp+drive] + mov es:[bx], ax + pop di + pop si + pop bp + retf +__dos_getdrive endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; void __cdecl _dos_setdrive(unsigned int drive, unsigned int *ndrives) +__dos_setdrive proc far + +drive = word ptr 6 +ndrives = dword ptr 8 + + push bp + mov bp, sp + push si + push di + mov dl, byte ptr [bp+drive] + dec dl + mov ah, 0Eh + int 21h ; DOS - SELECT DISK + ; DL = new default drive number (0 = A, 1 = B, etc.) + ; Return: AL = number of logical drives + mov ah, 0 + les bx, [bp+ndrives] + mov es:[bx], ax + pop di + pop si + pop bp + retf +__dos_setdrive endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl __far __ErrorMessage(char *buf) +___ErrorMessage proc far ; CODE XREF: seg000:016Ap sub_1C47+9p + +buf = dword ptr 6 + + push bp + mov bp, sp + push si + push di + push word ptr [bp+buf+2] + push word ptr [bp+buf] ; s + nop + push cs + call near ptr _strlen + pop cx + pop cx + push ax ; len + push word ptr [bp+buf+2] + push word ptr [bp+buf] ; buf + mov al, byte_12CB6 + cbw + push ax ; handle + nop + push cs + call near ptr __rtl_write + add sp, 8 + pop di + pop si + pop bp + retf +___ErrorMessage endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +sub_1F1C proc far ; CODE XREF: sub_1F21+29P sub_1F21+43P ... + push si + push di + pop di + pop si + retf +sub_1F1C endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_1F21 proc near ; CODE XREF: _exit+Cp __exit+Fp ... + +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = word ptr 8 + + push bp + mov bp, sp + push si + push di + cmp [bp+arg_4], 0 + jnz short loc_1F4E + jmp short loc_1F3E +; --------------------------------------------------------------------------- + +loc_1F2E: ; CODE XREF: sub_1F21+22j + dec word_12C7C + mov bx, word_12C7C + mov cl, 2 + shl bx, cl + call dword ptr [bx+1C82h] + +loc_1F3E: ; CODE XREF: sub_1F21+Bj + cmp word_12C7C, 0 + jnz short loc_1F2E + nop + push cs + call __cleanup + call off_12C7E + +loc_1F4E: ; CODE XREF: sub_1F21+9j + nop + push cs + call near ptr __restorezero + nop + push cs + call near ptr __checknull + cmp [bp+arg_2], 0 + jnz short loc_1F75 + cmp [bp+arg_4], 0 + jnz short loc_1F6C + call off_12C82 + call off_12C86 + +loc_1F6C: ; CODE XREF: sub_1F21+41j + push [bp+arg_0] + nop + push cs + call __terminate +; --------------------------------------------------------------------------- + pop cx + +loc_1F75: ; CODE XREF: sub_1F21+3Bj + pop di + pop si + pop bp + retn 6 +sub_1F21 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function noreturn bp-based frame + +; void __cdecl exit(int status) +_exit proc far ; CODE XREF: start+143p sub_B7C3+1CP ... + +status = word ptr 6 + + push bp + mov bp, sp + push si + push di + xor ax, ax + push ax + push ax + push [bp+status] + call sub_1F21 + pop di + pop si + pop bp + retf +_exit endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function noreturn bp-based frame + +; void __cdecl _exit(int status) +__exit proc far ; CODE XREF: seg000:0175p sub_1C47+12p ... + +status = word ptr 6 + + push bp + mov bp, sp + push si + push di + mov ax, 1 + push ax + xor ax, ax + push ax + push [bp+status] + call sub_1F21 + pop di + pop si + pop bp + retf +__exit endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +; void _cexit(void) +__cexit proc far ; CODE XREF: __exec+216p + push si + push di + xor ax, ax + push ax + mov ax, 1 + push ax + xor ax, ax + push ax + call sub_1F21 + pop di + pop si + retf +__cexit endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +; void _c_exit(void) +__c_exit proc far + push si + push di + mov ax, 1 + push ax + push ax + xor ax, ax + push ax + call sub_1F21 + pop di + pop si + retf +__c_exit endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +SCOPY@ proc far ; CODE XREF: sub_A66A+1CP sub_A96A+14P ... + +arg_0 = dword ptr 6 +arg_4 = dword ptr 0Ah + + push bp + mov bp, sp + push si + push di + push ds + lds si, [bp+arg_0] + les di, [bp+arg_4] + cld + shr cx, 1 + rep movsw + adc cx, cx + rep movsb + pop ds + pop di + pop si + pop bp + retf 8 +SCOPY@ endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; void (__cdecl __interrupt far *__cdecl getvect(int interruptno))() +_getvect proc far ; CODE XREF: seg000:3999p sub_B2C3+12P ... + +interruptno = byte ptr 6 + + push bp + mov bp, sp + push si + push di + mov ah, 35h ; '5' + mov al, [bp+interruptno] + int 21h ; DOS - 2+ - GET INTERRUPT VECTOR + ; AL = interrupt number + ; Return: ES:BX = value of interrupt vector + xchg ax, bx + mov dx, es + pop di + pop si + pop bp + retf +_getvect endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; void __cdecl setvect(int interruptno, void (__interrupt far *isr)()) +_setvect proc far ; CODE XREF: seg000:38DEp seg000:39DBp ... + +interruptno = byte ptr 6 +_isr = dword ptr 8 + + push bp + mov bp, sp + push si + push di + mov ah, 25h ; '%' + mov al, [bp+interruptno] + push ds + lds dx, [bp+_isr] + int 21h ; DOS - SET INTERRUPT VECTOR + ; AL = interrupt number + ; DS:DX = new vector to be used for specified interrupt + pop ds + pop di + pop si + pop bp + retf +_setvect endp + +; --------------------------------------------------------------------------- + +N_LDIV@: + pop cx + push cs + push cx + +LDIV@: + xor cx, cx + jmp short loc_2027 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +N_LUDIV@ proc far ; CODE XREF: sub_8508+66p + pop cx + push cs + push cx + +F_LUDIV@: + mov cx, 1 + jmp short loc_2027 +; --------------------------------------------------------------------------- + +N_LMOD@: + pop cx + push cs + push cx + +F_LMOD@: + mov cx, 2 + jmp short loc_2027 +; --------------------------------------------------------------------------- + +N_LUMOD@: + pop cx + push cs + push cx + +LUMOD@: + mov cx, 3 + +loc_2027: ; CODE XREF: seg000:200Fj N_LUDIV@+6j ... + push bp + push si + push di + mov bp, sp + mov di, cx + mov ax, [bp+0Ah] + mov dx, [bp+0Ch] + mov bx, [bp+0Eh] + mov cx, [bp+10h] + or cx, cx + jnz short loc_2046 + or dx, dx + jz short loc_20AB + or bx, bx + jz short loc_20AB + +loc_2046: ; CODE XREF: N_LUDIV@+2Bj + test di, 1 + jnz short loc_2068 + or dx, dx + jns short loc_205A + neg dx + neg ax + sbb dx, 0 + or di, 0Ch + +loc_205A: ; CODE XREF: N_LUDIV@+3Dj + or cx, cx + jns short loc_2068 + neg cx + neg bx + sbb cx, 0 + xor di, 4 + +loc_2068: ; CODE XREF: N_LUDIV@+39j N_LUDIV@+4Bj + mov bp, cx + mov cx, 20h ; ' ' + push di + xor di, di + xor si, si + +loc_2072: ; CODE XREF: N_LUDIV@:loc_2089j + shl ax, 1 + rcl dx, 1 + rcl si, 1 + rcl di, 1 + cmp di, bp + jb short loc_2089 + ja short loc_2084 + cmp si, bx + jb short loc_2089 + +loc_2084: ; CODE XREF: N_LUDIV@+6Dj + sub si, bx + sbb di, bp + inc ax + +loc_2089: ; CODE XREF: N_LUDIV@+6Bj N_LUDIV@+71j + loop loc_2072 + pop bx + test bx, 2 + jz short loc_2098 + mov ax, si + mov dx, di + shr bx, 1 + +loc_2098: ; CODE XREF: N_LUDIV@+7Fj + test bx, 4 + jz short loc_20A5 + neg dx + neg ax + sbb dx, 0 + +loc_20A5: ; CODE XREF: N_LUDIV@+8Bj N_LUDIV@+A5j + pop di + pop si + pop bp + retf 8 +; --------------------------------------------------------------------------- + +loc_20AB: ; CODE XREF: N_LUDIV@+2Fj N_LUDIV@+33j + div bx + test di, 2 + jz short loc_20B4 + xchg ax, dx + +loc_20B4: ; CODE XREF: N_LUDIV@+A0j + xor dx, dx + jmp short loc_20A5 +N_LUDIV@ endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +N_LXLSH@ proc far ; CODE XREF: __sbrk+Fp + pop bx + push cs + push bx + +LXLSH@: + cmp cl, 10h + jnb short loc_20D0 + mov bx, ax + shl ax, cl + shl dx, cl + neg cl + add cl, 10h + shr bx, cl + or dx, bx + retf +; --------------------------------------------------------------------------- + +loc_20D0: ; CODE XREF: N_LXLSH@+6j + sub cl, 10h + xchg ax, dx + xor ax, ax + shl dx, cl + retf +N_LXLSH@ endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +N_PADD@ proc far ; CODE XREF: __sbrk+38p sub_4320+4Dp + pop es + push cs + push es + +F_PADD@: + or cx, cx + jge short loc_20EC + not bx + not cx + add bx, 1 + adc cx, 0 + jmp short loc_211B +; --------------------------------------------------------------------------- + +loc_20EC: ; CODE XREF: N_PADD@+5j N_PADD@+40j + add ax, bx + jnb short loc_20F4 + add dx, 1000h + +loc_20F4: ; CODE XREF: N_PADD@+15j + mov ch, cl + mov cl, 4 + shl ch, cl + add dh, ch + mov ch, al + shr ax, cl + add dx, ax + mov al, ch + and ax, 0Fh + retf +; --------------------------------------------------------------------------- + +N_PSUB@: + pop es + push cs + push es + +F_PSUB@: + or cx, cx + jge short loc_211B + not bx + not cx + add bx, 1 + adc cx, 0 + jmp short loc_20EC +; --------------------------------------------------------------------------- + +loc_211B: ; CODE XREF: N_PADD@+11j N_PADD@+34j + sub ax, bx + jnb short loc_2123 + sub dx, 1000h + +loc_2123: ; CODE XREF: N_PADD@+44j + mov bh, cl + mov cl, 4 + shl bh, cl + xor bl, bl + sub dx, bx + mov ch, al + shr ax, cl + add dx, ax + mov al, ch + and ax, 0Fh + retf +N_PADD@ endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__IOERROR proc near ; CODE XREF: __DOSERROR+8p _lseek+25p ... + +arg_0 = word ptr 4 + + push bp + mov bp, sp + push si + push di + mov dx, [bp+arg_0] + or dx, dx + jl short loc_215C + cmp dx, 58h ; 'X' + jle short loc_214D + +loc_214A: ; CODE XREF: __IOERROR+29j + mov dx, 57h ; 'W' + +loc_214D: ; CODE XREF: __IOERROR+Fj + mov word_12E4A, dx + mov bx, dx + mov al, [bx+0BBCh] + cbw + mov dx, ax + jmp short loc_216A +; --------------------------------------------------------------------------- + +loc_215C: ; CODE XREF: __IOERROR+Aj + neg dx + cmp dx, word_131DC + jg short loc_214A + mov word_12E4A, 0FFFFh + +loc_216A: ; CODE XREF: __IOERROR+21j + mov word_1230E, dx + mov ax, 0FFFFh + pop di + pop si + pop bp + retn 2 +__IOERROR endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__DOSERROR proc near ; CODE XREF: __dos_getfileattr+1Dp + ; __dos_setfileattr+1Ap + +arg_0 = word ptr 4 + + push bp + mov bp, sp + push si + push di + push [bp+arg_0] + call __IOERROR + mov ax, [bp+arg_0] + pop di + pop si + pop bp + retn 2 +__DOSERROR endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl isatty(int handle) +_isatty proc far ; CODE XREF: seg000:2711p seg000:274Ap ... + +handle = word ptr 6 + + push bp + mov bp, sp + push si + push di + mov ax, 4400h + mov bx, [bp+handle] + int 21h ; DOS - 2+ - IOCTL - GET DEVICE INFORMATION + ; BX = file or device handle + xchg ax, dx + and ax, 80h + pop di + pop si + pop bp + retf +_isatty endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__LONGTOA proc near ; CODE XREF: __UTOA+1Bp + ; __VPRINTER+220p + +var_22 = byte ptr -22h +arg_0 = byte ptr 4 +arg_2 = byte ptr 6 +arg_4 = word ptr 8 +arg_6 = dword ptr 0Ah +arg_A = word ptr 0Eh +arg_C = word ptr 10h + + push bp + mov bp, sp + sub sp, 22h + push si + push di + push es + les di, [bp+arg_6] + mov bx, [bp+arg_4] + cmp bx, 24h ; '$' + ja short loc_2210 + cmp bl, 2 + jb short loc_2210 + mov ax, [bp+arg_A] + mov cx, [bp+arg_C] + or cx, cx + jge short loc_21D5 + cmp [bp+arg_2], 0 + jz short loc_21D5 + mov byte ptr es:[di], 2Dh ; '-' + inc di + neg cx + neg ax + sbb cx, 0 + +loc_21D5: ; CODE XREF: __LONGTOA+21j + ; __LONGTOA+27j + lea si, [bp+var_22] + jcxz short loc_21EA + +loc_21DA: ; CODE XREF: __LONGTOA+48j + xchg ax, cx + sub dx, dx + div bx + xchg ax, cx + div bx + mov ss:[si], dl + inc si + jcxz short loc_21F2 + jmp short loc_21DA +; --------------------------------------------------------------------------- + +loc_21EA: ; CODE XREF: __LONGTOA+38j + ; __LONGTOA+54j + sub dx, dx + div bx + mov ss:[si], dl + inc si + +loc_21F2: ; CODE XREF: __LONGTOA+46j + or ax, ax + jnz short loc_21EA + lea cx, [bp+var_22] + neg cx + add cx, si + cld + +loc_21FE: ; CODE XREF: __LONGTOA+6Ej + dec si + mov al, ss:[si] + sub al, 0Ah + jnb short loc_220A + add al, 3Ah ; ':' + jmp short loc_220D +; --------------------------------------------------------------------------- + +loc_220A: ; CODE XREF: __LONGTOA+64j + add al, [bp+arg_0] + +loc_220D: ; CODE XREF: __LONGTOA+68j + stosb + loop loc_21FE + +loc_2210: ; CODE XREF: __LONGTOA+12j + ; __LONGTOA+17j + mov al, 0 + stosb + pop es + mov dx, word ptr [bp+arg_6+2] + mov ax, word ptr [bp+arg_6] + pop di + pop si + mov sp, bp + pop bp + retn 0Eh +__LONGTOA endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__UTOA proc near ; CODE XREF: __MKNAME+3Fp + +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = word ptr 8 + + push bp + mov bp, sp + push si + push di + xor ax, ax + push ax + push [bp+arg_4] + push [bp+arg_2] + push [bp+arg_0] + mov ax, 0Ah + push ax + mov al, 0 + push ax + mov al, 61h ; 'a' + push ax + call __LONGTOA + pop di + pop si + pop bp + retn 6 +__UTOA endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; __int32 __cdecl lseek(int handle, __int32 offset, int fromwhere) +_lseek proc far ; CODE XREF: _fseek+67p _ftell+1Bp ... + +handle = word ptr 6 +_offset = word ptr 8 +arg_4 = word ptr 0Ah +fromwhere = byte ptr 0Ch + + push bp + mov bp, sp + push si + push di + mov bx, [bp+handle] + add bx, bx + and word ptr [bx+0B8Ch], 0FDFFh + mov ah, 42h ; 'B' + mov al, [bp+fromwhere] + mov bx, [bp+handle] + mov cx, [bp+arg_4] + mov dx, [bp+_offset] + int 21h ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK) + ; AL = method: + ; 0-from beginnig,1-from current,2-from end + jb short loc_226A + jmp short loc_226F +; --------------------------------------------------------------------------- + +loc_226A: ; CODE XREF: _lseek+20j + push ax + call __IOERROR + cwd + +loc_226F: ; CODE XREF: _lseek+22j + pop di + pop si + pop bp + retf +_lseek endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __stdcall _MKNAME(int, int, int, char *dest) +__MKNAME proc near ; CODE XREF: __TMPNAM+2Dp _fclose+A2p + +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = word ptr 8 +dest = dword ptr 0Ah + + push bp + mov bp, sp + push si + push di + mov ax, word ptr [bp+dest] + or ax, word ptr [bp+dest+2] + jnz short loc_2288 + mov word ptr [bp+dest+2], ds + mov word ptr [bp+dest], 1D02h + +loc_2288: ; CODE XREF: __MKNAME+Bj + push [bp+arg_0] + mov ax, [bp+arg_2] + or ax, [bp+arg_4] + jnz short loc_229A + mov dx, ds + mov ax, 0C16h + jmp short loc_22A0 +; --------------------------------------------------------------------------- + +loc_229A: ; CODE XREF: __MKNAME+1Ej + mov dx, [bp+arg_4] + mov ax, [bp+arg_2] + +loc_22A0: ; CODE XREF: __MKNAME+25j + push dx + push ax ; src + push word ptr [bp+dest+2] + push word ptr [bp+dest] ; dest + nop + push cs + call near ptr _stpcpy + add sp, 8 + push dx + push ax + call __UTOA + push ds + mov ax, 0C1Ah + push ax ; src + push word ptr [bp+dest+2] + push word ptr [bp+dest] ; dest + nop + push cs + call near ptr _strcat + add sp, 8 + mov dx, word ptr [bp+dest+2] + mov ax, word ptr [bp+dest] + pop di + pop si + pop bp + retn 0Ah +__MKNAME endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __stdcall _TMPNAM(__int32, char *dest) +__TMPNAM proc near + +attrib = word ptr -2 +arg_0 = dword ptr 4 +dest = dword ptr 8 + + push bp + mov bp, sp + sub sp, 2 + push si + push di + +loc_22DC: ; CODE XREF: __TMPNAM+4Bj + push word ptr [bp+dest+2] + push word ptr [bp+dest] ; dest + xor ax, ax + push ax ; int + push ax ; int + les bx, [bp+arg_0] + cmp word ptr es:[bx], 0FFFFh + jnz short loc_22F4 + mov ax, 2 + jmp short loc_22F7 +; --------------------------------------------------------------------------- + +loc_22F4: ; CODE XREF: __TMPNAM+19j + mov ax, 1 + +loc_22F7: ; CODE XREF: __TMPNAM+1Ej + les bx, [bp+arg_0] + add es:[bx], ax + mov ax, es:[bx] + push ax ; int + call __MKNAME + mov word ptr [bp+dest+2], dx + mov word ptr [bp+dest], ax + push ss + lea ax, [bp+attrib] + push ax ; attrib + push word ptr [bp+dest+2] + push word ptr [bp+dest] ; filename + nop + push cs + call near ptr __dos_getfileattr + add sp, 8 + or ax, ax + jz short loc_22DC + mov dx, word ptr [bp+dest+2] + mov ax, word ptr [bp+dest] + pop di + pop si + mov sp, bp + pop bp + retn 8 +__TMPNAM endp + +; --------------------------------------------------------------------------- + dd byte_255A + db 4, 0, 0FAh, 0FFh, 0Ah dup(0), 0DCh, 0FFh, 2 dup(0) + db 5, 3 dup(0), 2Fh, 23h +; --------------------------------------------------------------------------- + push bp + mov bp, sp + sub sp, 24h + push si + push di + mov ax, seg seg000 + mov bx, 233Dh + nop + push cs + call near ptr ___InitExceptBlocks + xor ax, ax + push ax + push ax + push ax + push ax + mov ax, 5 + push ax + mov ax, seg seg000 + push ax + mov ax, 2435h + push ax + xor ax, ax + push ax + push ax + push ds + mov ax, 0C20h + push ax + push ss + lea ax, [bp-6] + push ax + nop + push cs + call near ptr @xmsg@$bctr$qmx4xmsg ; xmsg::xmsg(xmsg &) + add sp, 8 + mov ax, word_12EB4 + mov [bp-2], ax + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + lea ax, [bp-6] + push ss + push ax + push cs + mov ax, 255Ah + push ax + nop + push cs + call near ptr @_ThrowException$qnvt1t1t1uiuiuinuc ; _ThrowException(void *,void *,void *,void *,uint,uint,uint,uchar *) + add sp, 1Ah + pop di + pop si + mov sp, bp + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; set_new_handler(void (*)(void)) +@set_new_handler$qnqv$v proc far + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + sub sp, 4 + push si + push di + mov dx, seg_12EB8 + mov ax, word_12EB6 + mov [bp+var_2], dx + mov [bp+var_4], ax + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + mov seg_12EB8, dx + mov word_12EB6, ax + mov dx, [bp+var_2] + mov ax, [bp+var_4] + pop di + pop si + mov sp, bp + pop bp + retf +@set_new_handler$qnqv$v endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; operator new(unsigned int) +@$bnew$qui proc far ; CODE XREF: sub_2621+Ap + ; xalloc::xalloc(string &,uint)+13p ... + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 + + push bp + mov bp, sp + sub sp, 4 + push si + push di + mov [bp+var_2], 0 + mov [bp+var_4], 0 + cmp [bp+arg_0], 0 + jz short loc_2401 + mov ax, [bp+arg_0] + jmp short loc_2404 +; --------------------------------------------------------------------------- + +loc_2401: ; CODE XREF: operator new(uint)+16j + mov ax, 1 + +loc_2404: ; CODE XREF: operator new(uint)+1Bj + mov [bp+arg_0], ax + jmp short loc_240D +; --------------------------------------------------------------------------- + +loc_2409: ; CODE XREF: operator new(uint)+43j + call dword ptr word_12EB6 + +loc_240D: ; CODE XREF: operator new(uint)+23j + push [bp+arg_0] + nop + push cs + call near ptr sub_32C1 + pop cx + mov [bp+var_2], dx + mov [bp+var_4], ax + or ax, dx + jnz short loc_2429 + mov ax, word_12EB6 + or ax, seg_12EB8 + jnz short loc_2409 + +loc_2429: ; CODE XREF: operator new(uint)+3Aj + mov dx, [bp+var_2] + mov ax, [bp+var_4] + pop di + pop si + mov sp, bp + pop bp + retf +@$bnew$qui endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + push word ptr [bp+0Ch] + push word ptr [bp+0Ah] + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr @xmsg@$bctr$qmx4xmsg ; xmsg::xmsg(xmsg &) + add sp, 8 + les bx, [bp+0Ah] + mov ax, es:[bx+4] + les bx, [bp+6] + mov es:[bx+4], ax + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + mov dx, [bp+8] + mov ax, [bp+6] + pop di + pop si + pop bp + retf +; --------------------------------------------------------------------------- + dd byte_255A + db 2 dup(0), 20h, 0Ch + dw seg dseg + dd byte_2520 + db 4, 0, 0FCh, 0FFh, 0Ah dup(0), 0DEh, 0FFh, 2 dup(0) + db 5, 3 dup(0), 78h, 24h + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; string::contains(char const *)const +@string@contains$xqnxc proc far ; DATA XREF: dseg:114Eo + +var_22 = word ptr -22h +var_16 = word ptr -16h +driver = byte ptr -4 + + push bp + mov bp, sp + sub sp, 22h + push si + push di + mov ax, seg seg000 + mov bx, 2490h + nop + push cs + call near ptr ___InitExceptBlocks + mov [bp+var_16], 6 + xor ax, ax + push ax + push ds + mov ax, 0C2Ah + push ax ; s + push ss + lea ax, [bp+driver] + push ax ; __int32 + call @string@$bctr$qnxc ; string::string(char *) + add sp, 8 + lea ax, [bp+driver] + push ss + push ax + push ds + mov ax, 0C20h + push ax + nop + push cs + call near ptr @xalloc@$bctr$qmx6stringui ; xalloc::xalloc(string &,uint) + mov ax, 2 + push ax ; char + push ss + lea ax, [bp+driver] + push ax ; driver + call @string@$bdtr$qv ; string::~string(void) + add sp, 10h + push [bp+var_22] + nop + push cs + call near ptr ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf +@string@contains$xqnxc endp + +; --------------------------------------------------------------------------- + +loc_24F9: ; DATA XREF: dseg:1184o + push si + push di + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + xor ax, ax + push ax + push ds + mov ax, 0C20h + push ax + nop + push cs + call near ptr @xmsg@$bdtr$qv ; xmsg::~xmsg(void) + add sp, 6 + pop di + pop si + retf +; --------------------------------------------------------------------------- +byte_2520 db 4, 0, 3, 0, 26h, 0, 2 dup(0FFh), 3, 0, 2Eh, 0, 32h + ; DATA XREF: seg000:2482o + db 0Dh dup(0), 1, 0, 1, 0, 5, 3 + dw seg seg015 + db 5, 0, 36h, 0, 73h, 74h, 72h, 69h, 6Eh, 67h, 0Eh dup(0) +byte_255A db 6, 0, 3, 0, 26h, 0, 2 dup(0FFh), 7, 0, 2Eh, 0, 3Ah + ; DATA XREF: seg000:232Fo seg000:2478o + db 0Dh dup(0), 2, 0, 2, 0, 9Ch, 25h + dw seg seg000 + db 5, 0, 3Eh, 0, 78h, 61h, 2 dup(6Ch), 6Fh, 63h, 2 dup(0) + db 0E9h, 25h + dw seg seg000 + db 2 dup(0), 3, 0Dh dup(0) +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + mov ax, [bp+6] + or ax, [bp+8] + jz short loc_25E3 + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + xor ax, ax + push ax + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr @xmsg@$bdtr$qv ; xmsg::~xmsg(void) + add sp, 6 + test byte ptr [bp+0Ah], 1 + jz short loc_25E1 + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr _registerbgidriver + pop cx + pop cx + jmp short loc_25E5 +; --------------------------------------------------------------------------- + +loc_25E1: ; CODE XREF: seg000:25D0j + jmp short loc_25E5 +; --------------------------------------------------------------------------- + +loc_25E3: ; CODE XREF: seg000:25A7j + xor ax, ax + +loc_25E5: ; CODE XREF: seg000:25DFj + ; seg000:loc_25E1j + pop di + pop si + pop bp + retf +; --------------------------------------------------------------------------- + db 4, 0, 3, 0, 26h, 0, 2 dup(0FFh), 3, 0, 2Ch, 0, 30h + db 0Dh dup(0), 1, 0, 1, 0, 1Eh, 5Eh + dw seg seg000 + db 5, 0, 34h, 0, 78h, 6Dh, 73h, 67h, 0Eh dup(0) + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_2621 proc far ; CODE XREF: seg001:0011P sub_D631+4EP ... + +arg_0 = word ptr 6 + + push bp + mov bp, sp + push si + push di + push [bp+arg_0] + nop + push cs + call near ptr @$bnew$qui ; operator new(uint) + pop cx + pop di + pop si + pop bp + retf +sub_2621 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +N_LXMUL@ proc near ; CODE XREF: sub_4320+5p sub_8508+51p ... + push si + xchg ax, si + xchg ax, dx + test ax, ax + jz short loc_263C + mul bx + +loc_263C: ; CODE XREF: N_LXMUL@+5j + jcxz short loc_2643 + xchg ax, cx + mul si + add ax, cx + +loc_2643: ; CODE XREF: N_LXMUL@:loc_263Cj + xchg ax, si + mul bx + add dx, si + pop si + retn +N_LXMUL@ endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +N_PCMP@ proc near ; CODE XREF: __brk+13p __brk+26p ... + push cx + mov ch, al + mov cl, 4 + shr ax, cl + add dx, ax + mov al, ch + mov ah, bl + shr bx, cl + pop cx + add cx, bx + mov bl, ah + and ax, 0Fh + and bx, 0Fh + cmp dx, cx + jnz short locret_266A + cmp ax, bx + +locret_266A: ; CODE XREF: N_PCMP@+1Cj + retn +N_PCMP@ endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl _rtl_read(int handle, void *buf, unsigned int len) +__rtl_read proc far ; CODE XREF: __read+12p sub_41ED+88p ... + +handle = word ptr 6 +buf = dword ptr 8 +len = word ptr 0Ch + + push bp + mov bp, sp + push si + push di + mov bx, [bp+handle] + add bx, bx + test byte ptr [bx+0B8Ch], 2 + jz short loc_2682 + mov ax, 5 + push ax + jmp short loc_2696 +; --------------------------------------------------------------------------- + +loc_2682: ; CODE XREF: __rtl_read+Fj + push ds + mov ah, 3Fh ; '?' + mov bx, [bp+handle] + mov cx, [bp+len] + lds dx, [bp+buf] + int 21h ; DOS - 2+ - READ FROM FILE WITH HANDLE + ; BX = file handle, CX = number of bytes to read + ; DS:DX -> buffer + pop ds + jb short loc_2695 + jmp short loc_2699 +; --------------------------------------------------------------------------- + +loc_2695: ; CODE XREF: __rtl_read+26j + push ax + +loc_2696: ; CODE XREF: __rtl_read+15j + call __IOERROR + +loc_2699: ; CODE XREF: __rtl_read+28j + pop di + pop si + pop bp + retf +__rtl_read endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl _read(int handle, void *buf, unsigned int len) +__read proc far ; CODE XREF: ___read+8Fp + +handle = word ptr 6 +buf = dword ptr 8 +len = word ptr 0Ch + + push bp + mov bp, sp + push si + push di + push [bp+len] ; len + push word ptr [bp+buf+2] + push word ptr [bp+buf] ; buf + push [bp+handle] ; handle + push cs + call near ptr __rtl_read + add sp, 8 + pop di + pop si + pop bp + retf +__read endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; void __cdecl segread(struct SREGS *segp) +_segread proc far ; CODE XREF: _int86+Fp _intdos+Fp ... + +segp = dword ptr 6 + + push bp + mov bp, sp + push si + push di + mov bx, es + les si, [bp+segp] + mov es:[si], bx + mov ax, [bp+4] + mov es:[si+2], ax + mov word ptr es:[si+4], ss + mov word ptr es:[si+6], ds + mov es, bx + pop di + pop si + pop bp + retf +_segread endp + +; --------------------------------------------------------------------------- + +__setupio: + push si + push di + mov cx, 5 + jmp short loc_2704 +; --------------------------------------------------------------------------- + +loc_26E2: ; CODE XREF: seg000:2708j + mov bx, cx + add bx, bx + mov word ptr [bx+0B8Ch], 0 + mov ax, 14h + imul cx + mov dx, ax + mov bx, ax + mov byte ptr [bx+9FEh], 0FFh + add ax, 9FAh + mov bx, dx + mov [bx+0A0Ch], ax + inc cx + +loc_2704: ; CODE XREF: seg000:26E0j + cmp cx, word_12E1A + jb short loc_26E2 + mov al, byte_12C8E + cbw + push ax + nop + push cs + call near ptr _isatty + pop cx + or ax, ax + jnz short loc_271F + and word_12C8C, 0FDFFh + +loc_271F: ; CODE XREF: seg000:2717j + mov ax, 200h + push ax + test byte ptr word_12C8C+1, 2 + jz short loc_272F + mov ax, 1 + jmp short loc_2731 +; --------------------------------------------------------------------------- + +loc_272F: ; CODE XREF: seg000:2728j + xor ax, ax + +loc_2731: ; CODE XREF: seg000:272Dj + push ax + xor ax, ax + push ax + push ax + push ds + mov ax, 9FAh + push ax + nop + push cs + call _setvbuf + add sp, 0Ch + mov al, byte_12CA2 + cbw + push ax + nop + push cs + call near ptr _isatty + pop cx + or ax, ax + jnz short loc_2758 + and word_12CA0, 0FDFFh + +loc_2758: ; CODE XREF: seg000:2750j + mov ax, 200h + push ax + test byte ptr word_12CA0+1, 2 + jz short loc_2768 + mov ax, 2 + jmp short loc_276A +; --------------------------------------------------------------------------- + +loc_2768: ; CODE XREF: seg000:2761j + xor ax, ax + +loc_276A: ; CODE XREF: seg000:2766j + push ax + xor ax, ax + push ax + push ax + push ds + mov ax, 0A0Eh + push ax + nop + push cs + call _setvbuf + add sp, 0Ch + pop di + pop si + retn + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +; struct lconv *localeconv(void) +_localeconv proc far + push si + push di + mov dx, ds + mov ax, 0D3Ch + pop di + pop si + retf +_localeconv endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl toupper(int ch) +_toupper proc far ; CODE XREF: sub_45E7+4Fp sub_E62E+12P + +arg_0 = word ptr 6 + + push bp + mov bp, sp + push si + push di + mov dx, [bp+arg_0] + cmp dx, 0FFFFh + jnz short loc_279B + mov ax, 0FFFFh + jmp short loc_27B5 +; --------------------------------------------------------------------------- + +loc_279B: ; CODE XREF: _toupper+Bj + mov al, dl + mov ah, 0 + mov bx, ax + test (__ctype+1)[bx], 8 + jz short loc_27B1 + mov al, dl + mov ah, 0 + add ax, 0FFE0h + jmp short loc_27B5 +; --------------------------------------------------------------------------- + +loc_27B1: ; CODE XREF: _toupper+1Dj + mov al, dl + mov ah, 0 + +loc_27B5: ; CODE XREF: _toupper+10j _toupper+26j + pop di + pop si + pop bp + retf +_toupper endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl unlink(const char *path) +_unlink proc far ; CODE XREF: _fclose+A9p + +_path = dword ptr 6 + + push bp + mov bp, sp + push si + push di + push ds + mov ah, 41h ; 'A' + lds dx, [bp+_path] + int 21h ; DOS - 2+ - DELETE A FILE (UNLINK) + ; DS:DX -> ASCIZ pathname of file to delete (no wildcards allowed) + pop ds + jb short loc_27CD + xor ax, ax + jmp short loc_27D1 +; --------------------------------------------------------------------------- + +loc_27CD: ; CODE XREF: _unlink+Ej + push ax + call __IOERROR + +loc_27D1: ; CODE XREF: _unlink+12j + pop di + pop si + pop bp + retf +_unlink endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +sub_27D5 proc near ; CODE XREF: __VPRINTER+257p + ; __VPRINTER+260p + mov al, dh + call sub_27DC + mov al, dl +sub_27D5 endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +sub_27DC proc near ; CODE XREF: sub_27D5+2p + aam 10h + xchg ah, al + call sub_27E5 + xchg ah, al +sub_27DC endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +sub_27E5 proc near ; CODE XREF: sub_27DC+4p + add al, 90h ; '' + daa + adc al, 40h ; '@' + daa + stosb + retn +sub_27E5 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__VPRINTER proc near ; CODE XREF: _fprintf+19p _printf+18p ... + +var_96 = byte ptr -96h +var_46 = byte ptr -46h +var_45 = byte ptr -45h +var_16 = word ptr -16h +var_14 = word ptr -14h +var_12 = word ptr -12h +var_10 = word ptr -10h +var_E = word ptr -0Eh +var_B = byte ptr -0Bh +var_A = word ptr -0Ah +var_8 = word ptr -8 +var_6 = byte ptr -6 +var_5 = byte ptr -5 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 4 +arg_2 = dword ptr 6 + +; FUNCTION CHUNK AT 2851 SIZE 0000042F BYTES + + push bp + mov bp, sp + sub sp, 96h + push si + push di + mov [bp+var_12], 0 + mov [bp+var_14], 50h ; 'P' + mov [bp+var_16], 0 + jmp short loc_2851 +__VPRINTER endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +sub_2807 proc near ; CODE XREF: __VPRINTER:loc_2ABEp + ; __VPRINTER:loc_2B1Ep ... + push di + mov cx, 0FFFFh + xor al, al + repne scasb + not cx + dec cx + pop di + retn +sub_2807 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +sub_2814 proc near ; CODE XREF: __VPRINTER+3B7p + ; __VPRINTER+3C8p ... + mov ss:[di], al + inc di + dec byte ptr [bp-14h] + jnz short locret_2850 +sub_2814 endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +sub_281D proc near ; CODE XREF: __VPRINTER+86p + ; __VPRINTER+40Ep ... + push bx + push cx + push dx + push es + lea ax, [bp-96h] + sub di, ax + push ss + lea ax, [bp-96h] + push ax + push di + push word ptr [bp+0Ch] + push word ptr [bp+0Ah] + call word ptr [bp+0Eh] + or ax, ax + jnz short loc_2840 + mov word ptr [bp-16h], 1 + +loc_2840: ; CODE XREF: sub_281D+1Cj + mov word ptr [bp-14h], 50h ; 'P' + add [bp-12h], di + lea di, [bp-96h] + pop es + pop dx + pop cx + pop bx + +locret_2850: ; CODE XREF: sub_2814+7j + retn +sub_281D endp ; sp-analysis failed + +; --------------------------------------------------------------------------- +; START OF FUNCTION CHUNK FOR __VPRINTER + +loc_2851: ; CODE XREF: __VPRINTER+18j + push es + cld + lea di, [bp+var_96] + mov [bp+var_4], di + +loc_285A: ; CODE XREF: __VPRINTER:loc_2C49j + mov di, [bp+var_4] + +loc_285D: ; CODE XREF: __VPRINTER:loc_2C0Dj + les si, [bp+arg_2] + +loc_2860: ; CODE XREF: __VPRINTER+84j + ; __VPRINTER+89j + lods byte ptr es:[si] + or al, al + jz short loc_2878 + cmp al, 25h ; '%' + jz short loc_287B + +loc_286A: ; CODE XREF: __VPRINTER+95j + mov ss:[di], al + inc di + dec byte ptr [bp+var_14] + jg short loc_2860 + call sub_281D + jmp short loc_2860 +; --------------------------------------------------------------------------- + +loc_2878: ; CODE XREF: __VPRINTER+77j + jmp loc_2C60 +; --------------------------------------------------------------------------- + +loc_287B: ; CODE XREF: __VPRINTER+7Bj + mov [bp+var_10], si + lods byte ptr es:[si] + cmp al, 25h ; '%' + jz short loc_286A + mov [bp+var_4], di + xor cx, cx + mov [bp+var_E], cx + mov [bp+var_2], 20h ; ' ' + mov [bp+var_B], cl + mov [bp+var_8], 0FFFFh + mov [bp+var_A], 0FFFFh + jmp short loc_28A2 +; --------------------------------------------------------------------------- + +loc_28A0: ; CODE XREF: __VPRINTER+E2j + ; __VPRINTER+EDj ... + lods byte ptr es:[si] + +loc_28A2: ; CODE XREF: __VPRINTER+B1j + xor ah, ah + mov dx, ax + mov bx, ax + sub bl, 20h ; ' ' + cmp bl, 60h ; '`' + jnb short loc_28C3 + mov bl, [bx+0D7Fh] + cmp bx, 17h + jbe short loc_28BC + jmp loc_2C4C +; --------------------------------------------------------------------------- + +loc_28BC: ; CODE XREF: __VPRINTER+CAj + add bx, bx + jmp cs:off_2C80[bx] +; --------------------------------------------------------------------------- + +loc_28C3: ; CODE XREF: __VPRINTER+C1j + ; __VPRINTER+DCj ... + jmp loc_2C4C +; --------------------------------------------------------------------------- + +loc_28C6: ; CODE XREF: __VPRINTER+D1j + ; DATA XREF: seg000:2C82o + cmp ch, 0 + ja short loc_28C3 + or [bp+var_2], 1 + jmp short loc_28A0 +; --------------------------------------------------------------------------- + +loc_28D1: ; CODE XREF: __VPRINTER+D1j + ; DATA XREF: seg000:2C86o + cmp ch, 0 + ja short loc_28C3 + or [bp+var_2], 2 + jmp short loc_28A0 +; --------------------------------------------------------------------------- + +loc_28DC: ; CODE XREF: __VPRINTER+D1j + ; DATA XREF: seg000:off_2C80o + cmp ch, 0 + ja short loc_28C3 + cmp [bp+var_B], 2Bh ; '+' + jz short loc_28EA + mov [bp+var_B], dl + +loc_28EA: ; CODE XREF: __VPRINTER+F8j + jmp short loc_28A0 +; --------------------------------------------------------------------------- + +loc_28EC: ; CODE XREF: __VPRINTER+D1j + ; DATA XREF: seg000:2CACo + and [bp+var_2], 0FFDFh + jmp short loc_28F6 +; --------------------------------------------------------------------------- + +loc_28F2: ; CODE XREF: __VPRINTER+D1j + ; DATA XREF: seg000:2CAEo + or [bp+var_2], 20h + +loc_28F6: ; CODE XREF: __VPRINTER+103j + ; __VPRINTER+1A1j ... + mov ch, 5 + jmp short loc_28A0 +; --------------------------------------------------------------------------- + +loc_28FA: ; CODE XREF: __VPRINTER+D1j + ; DATA XREF: seg000:2C92o + cmp ch, 0 + ja short loc_294C + test [bp+var_2], 2 + jnz short loc_292F + or [bp+var_2], 8 + mov ch, 1 + jmp short loc_28A0 +; --------------------------------------------------------------------------- + +loc_290E: ; CODE XREF: __VPRINTER+148j + ; __VPRINTER+155j ... + jmp loc_2C4C +; --------------------------------------------------------------------------- + +loc_2911: ; CODE XREF: __VPRINTER+D1j + ; DATA XREF: seg000:2C84o + mov di, [bp+arg_0] + mov ax, ss:[di] + add [bp+arg_0], 2 + cmp ch, 2 + jnb short loc_2932 + or ax, ax + jns short loc_292A + neg ax + or [bp+var_2], 2 + +loc_292A: ; CODE XREF: __VPRINTER+135j + mov [bp+var_8], ax + mov ch, 3 + +loc_292F: ; CODE XREF: __VPRINTER+117j + ; __VPRINTER+16Fj ... + jmp loc_28A0 +; --------------------------------------------------------------------------- + +loc_2932: ; CODE XREF: __VPRINTER+131j + cmp ch, 4 + jnz short loc_290E + mov [bp+var_A], ax + inc ch + jmp loc_28A0 +; --------------------------------------------------------------------------- + +loc_293F: ; CODE XREF: __VPRINTER+D1j + ; DATA XREF: seg000:2C88o + cmp ch, 4 + jnb short loc_290E + mov ch, 4 + inc [bp+var_A] + jmp loc_28A0 +; --------------------------------------------------------------------------- + +loc_294C: ; CODE XREF: __VPRINTER+D1j + ; __VPRINTER+110j + ; DATA XREF: ... + xchg ax, dx + sub al, 30h ; '0' + cbw + cmp ch, 2 + ja short loc_296E + mov ch, 2 + xchg ax, [bp+var_8] + or ax, ax + jl short loc_292F + shl ax, 1 + mov dx, ax + shl ax, 1 + shl ax, 1 + add ax, dx + add [bp+var_8], ax + jmp loc_28A0 +; --------------------------------------------------------------------------- + +loc_296E: ; CODE XREF: __VPRINTER+166j + cmp ch, 4 + jnz short loc_290E + xchg ax, [bp+var_A] + or ax, ax + jz short loc_292F + shl ax, 1 + mov dx, ax + shl ax, 1 + shl ax, 1 + add ax, dx + add [bp+var_A], ax + jmp loc_28A0 +; --------------------------------------------------------------------------- + +loc_298A: ; CODE XREF: __VPRINTER+D1j + ; DATA XREF: seg000:2C8Co + or [bp+var_2], 10h + jmp loc_28F6 +; --------------------------------------------------------------------------- + +loc_2991: ; CODE XREF: __VPRINTER+D1j + ; DATA XREF: seg000:2C8Eo + or [bp+var_2], 100h + +loc_2996: ; CODE XREF: __VPRINTER+D1j + ; DATA XREF: seg000:2C90o + and [bp+var_2], 0FFEFh + jmp loc_28F6 +; --------------------------------------------------------------------------- + +loc_299D: ; CODE XREF: __VPRINTER+D1j + ; DATA XREF: seg000:2C96o + mov bh, 8 + jmp short loc_29AB +; --------------------------------------------------------------------------- + +loc_29A1: ; CODE XREF: __VPRINTER+D1j + ; DATA XREF: seg000:2C98o + mov bh, 0Ah + jmp short loc_29AB +; --------------------------------------------------------------------------- + +loc_29A5: ; CODE XREF: __VPRINTER+D1j + ; DATA XREF: seg000:2C9Ao + mov bh, 10h + mov bl, 0E9h ; '' + add bl, dl + +loc_29AB: ; CODE XREF: __VPRINTER+1B2j + ; __VPRINTER+1B6j + mov [bp+var_B], 0 + mov [bp+var_5], dl + xor dx, dx + mov [bp+var_6], dl + mov di, [bp+arg_0] + mov ax, ss:[di] + jmp short loc_29CF +; --------------------------------------------------------------------------- + +loc_29BF: ; CODE XREF: __VPRINTER+D1j + ; DATA XREF: seg000:2C94o + mov bh, 0Ah + mov [bp+var_6], 1 + mov [bp+var_5], dl + mov di, [bp+arg_0] + mov ax, ss:[di] + cwd + +loc_29CF: ; CODE XREF: __VPRINTER+1D0j + inc di + inc di + mov word ptr [bp+arg_2], si + test [bp+var_2], 10h + jz short loc_29E0 + mov dx, ss:[di] + inc di + inc di + +loc_29E0: ; CODE XREF: __VPRINTER+1ECj + mov [bp+arg_0], di + lea di, [bp+var_45] + or ax, ax + jnz short loc_29FC + or dx, dx + jnz short loc_29FC + cmp [bp+var_A], 0 + jnz short loc_2A00 + mov byte ptr ss:[di], 0 + mov ax, di + jmp short loc_2A10 +; --------------------------------------------------------------------------- + +loc_29FC: ; CODE XREF: __VPRINTER+1FBj + ; __VPRINTER+1FFj + or [bp+var_2], 4 + +loc_2A00: ; CODE XREF: __VPRINTER+205j + push dx + push ax + push ss + push di + mov al, bh + cbw + push ax + mov al, [bp+var_6] + push ax + push bx + call __LONGTOA + +loc_2A10: ; CODE XREF: __VPRINTER+20Dj + push ss + pop es + mov dx, [bp+var_A] + or dx, dx + jge short loc_2A1C + jmp loc_2B10 +; --------------------------------------------------------------------------- + +loc_2A1C: ; CODE XREF: __VPRINTER+22Aj + jmp loc_2B1E +; --------------------------------------------------------------------------- + +loc_2A1F: ; CODE XREF: __VPRINTER+D1j + ; DATA XREF: seg000:2C9Co + mov [bp+var_5], dl + mov word ptr [bp+arg_2], si + lea di, [bp+var_46] + mov bx, [bp+arg_0] + push word ptr ss:[bx] + inc bx + inc bx + mov [bp+arg_0], bx + test [bp+var_2], 20h + jz short loc_2A4A + mov dx, ss:[bx] + inc bx + inc bx + mov [bp+arg_0], bx + push ss + pop es + call sub_27D5 + mov al, 3Ah ; ':' + stosb + +loc_2A4A: ; CODE XREF: __VPRINTER+24Bj + push ss + pop es + pop dx + call sub_27D5 + mov byte ptr ss:[di], 0 + mov [bp+var_6], 0 + and [bp+var_2], 0FFFBh + lea cx, [bp+var_46] + sub di, cx + xchg cx, di + mov dx, [bp+var_A] + cmp dx, cx + jg short loc_2A6C + mov dx, cx + +loc_2A6C: ; CODE XREF: __VPRINTER+27Bj + jmp loc_2B10 +; --------------------------------------------------------------------------- + +loc_2A6F: ; CODE XREF: __VPRINTER+D1j + ; DATA XREF: seg000:2CA0o + mov word ptr [bp+arg_2], si + mov [bp+var_5], dl + mov di, [bp+arg_0] + mov ax, ss:[di] + add [bp+arg_0], 2 + push ss + pop es + lea di, [bp+var_45] + xor ah, ah + mov ss:[di], ax + mov cx, 1 + jmp loc_2B53 +; --------------------------------------------------------------------------- + +loc_2A8F: ; CODE XREF: __VPRINTER+D1j + ; DATA XREF: seg000:2CA2o + mov word ptr [bp+arg_2], si + mov [bp+var_5], dl + mov di, [bp+arg_0] + test [bp+var_2], 20h + jnz short loc_2AAC + mov di, ss:[di] + add [bp+arg_0], 2 + push ds + pop es + assume es:dseg + or di, di + jmp short loc_2AB7 +; --------------------------------------------------------------------------- + +loc_2AAC: ; CODE XREF: __VPRINTER+2B0j + les di, ss:[di] + assume es:nothing + add [bp+arg_0], 4 + mov ax, es + or ax, di + +loc_2AB7: ; CODE XREF: __VPRINTER+2BDj + jnz short loc_2ABE + push ds + pop es + assume es:dseg + mov di, 0D78h + +loc_2ABE: ; CODE XREF: __VPRINTER:loc_2AB7j + call sub_2807 + cmp cx, [bp+var_A] + jbe short loc_2AC9 + mov cx, [bp+var_A] + +loc_2AC9: ; CODE XREF: __VPRINTER+2D7j + jmp loc_2B53 +; --------------------------------------------------------------------------- + +loc_2ACC: ; CODE XREF: __VPRINTER+D1j + ; DATA XREF: seg000:2C9Eo + mov word ptr [bp+arg_2], si + mov [bp+var_5], dl + mov di, [bp+arg_0] + mov cx, [bp+var_A] + or cx, cx + jge short loc_2ADF + mov cx, 6 + +loc_2ADF: ; CODE XREF: __VPRINTER+2EDj + push ss + push di + push cx + push ss + lea bx, [bp+var_45] + push bx + push dx + mov ax, 1 + and ax, [bp+var_2] + push ax + mov ax, [bp+var_2] + test ax, 100h + jz short loc_2B00 + mov ax, 8 + add [bp+arg_0], 0Ah + jmp short loc_2B07 +; --------------------------------------------------------------------------- + +loc_2B00: ; CODE XREF: __VPRINTER+308j + add [bp+arg_0], 8 + mov ax, 6 + +loc_2B07: ; CODE XREF: __VPRINTER+311j + push ax + call sub_96AB + push ss + pop es + assume es:nothing + lea di, [bp+var_45] + +loc_2B10: ; CODE XREF: __VPRINTER+22Cj + ; __VPRINTER:loc_2A6Cj + test [bp+var_2], 8 + jz short loc_2B2F + mov dx, [bp+var_8] + or dx, dx + jle short loc_2B2F + +loc_2B1E: ; CODE XREF: __VPRINTER:loc_2A1Cj + call sub_2807 + cmp byte ptr es:[di], 2Dh ; '-' + jnz short loc_2B28 + dec cx + +loc_2B28: ; CODE XREF: __VPRINTER+338j + sub dx, cx + jle short loc_2B2F + mov [bp+var_E], dx + +loc_2B2F: ; CODE XREF: __VPRINTER+328j + ; __VPRINTER+32Fj ... + cmp byte ptr es:[di], 2Dh ; '-' + jz short loc_2B40 + mov al, [bp+var_B] + or al, al + jz short loc_2B50 + dec di + mov es:[di], al + +loc_2B40: ; CODE XREF: __VPRINTER+346j + cmp [bp+var_E], 0 + jle short loc_2B50 + mov cx, [bp+var_A] + or cx, cx + jge short loc_2B50 + dec [bp+var_E] + +loc_2B50: ; CODE XREF: __VPRINTER+34Dj + ; __VPRINTER+357j ... + call sub_2807 + +loc_2B53: ; CODE XREF: __VPRINTER+29Fj + ; __VPRINTER:loc_2AC9j + mov si, di + mov di, [bp+var_4] + mov bx, [bp+var_8] + mov ax, 5 + and ax, [bp+var_2] + cmp ax, 5 + jnz short loc_2B79 + mov ah, [bp+var_5] + cmp ah, 6Fh ; 'o' + jnz short loc_2B7B + cmp [bp+var_E], 0 + jg short loc_2B79 + mov [bp+var_E], 1 + +loc_2B79: ; CODE XREF: __VPRINTER+377j + ; __VPRINTER+385j + jmp short loc_2B96 +; --------------------------------------------------------------------------- + +loc_2B7B: ; CODE XREF: __VPRINTER+37Fj + cmp ah, 78h ; 'x' + jz short loc_2B85 + cmp ah, 58h ; 'X' + jnz short loc_2B96 + +loc_2B85: ; CODE XREF: __VPRINTER+391j + or [bp+var_2], 40h + dec bx + dec bx + sub [bp+var_E], 2 + jge short loc_2B96 + mov [bp+var_E], 0 + +loc_2B96: ; CODE XREF: __VPRINTER:loc_2B79j + ; __VPRINTER+396j ... + add cx, [bp+var_E] + test [bp+var_2], 2 + jnz short loc_2BAC + jmp short loc_2BA8 +; --------------------------------------------------------------------------- + +loc_2BA2: ; CODE XREF: __VPRINTER+3BDj + mov al, 20h ; ' ' + call sub_2814 + dec bx + +loc_2BA8: ; CODE XREF: __VPRINTER+3B3j + cmp bx, cx + jg short loc_2BA2 + +loc_2BAC: ; CODE XREF: __VPRINTER+3B1j + test [bp+var_2], 40h + jz short loc_2BBE + mov al, 30h ; '0' + call sub_2814 + mov al, [bp+var_5] + call sub_2814 + +loc_2BBE: ; CODE XREF: __VPRINTER+3C4j + mov dx, [bp+var_E] + or dx, dx + jle short loc_2BEC + sub cx, dx + sub bx, dx + mov al, es:[si] + cmp al, 2Dh ; '-' + jz short loc_2BD8 + cmp al, 20h ; ' ' + jz short loc_2BD8 + cmp al, 2Bh ; '+' + jnz short loc_2BDF + +loc_2BD8: ; CODE XREF: __VPRINTER+3E1j + ; __VPRINTER+3E5j + lods byte ptr es:[si] + call sub_2814 + dec cx + dec bx + +loc_2BDF: ; CODE XREF: __VPRINTER+3E9j + xchg cx, dx + jcxz short loc_2BEA + +loc_2BE3: ; CODE XREF: __VPRINTER+3FBj + mov al, 30h ; '0' + call sub_2814 + loop loc_2BE3 + +loc_2BEA: ; CODE XREF: __VPRINTER+3F4j + xchg cx, dx + +loc_2BEC: ; CODE XREF: __VPRINTER+3D6j + jcxz short loc_2C00 + sub bx, cx + +loc_2BF0: ; CODE XREF: __VPRINTER:loc_2BFEj + lods byte ptr es:[si] + mov ss:[di], al + inc di + dec byte ptr [bp+var_14] + jg short loc_2BFE + call sub_281D + +loc_2BFE: ; CODE XREF: __VPRINTER+40Cj + loop loc_2BF0 + +loc_2C00: ; CODE XREF: __VPRINTER:loc_2BECj + or bx, bx + jle short loc_2C0D + mov cx, bx + +loc_2C06: ; CODE XREF: __VPRINTER+41Ej + mov al, 20h ; ' ' + call sub_2814 + loop loc_2C06 + +loc_2C0D: ; CODE XREF: __VPRINTER+415j + jmp loc_285D +; --------------------------------------------------------------------------- + +loc_2C10: ; CODE XREF: __VPRINTER+D1j + ; DATA XREF: seg000:2CA4o + mov word ptr [bp+arg_2], si + mov di, [bp+arg_0] + test [bp+var_2], 20h + jnz short loc_2C28 + mov di, ss:[di] + add [bp+arg_0], 2 + push ds + pop es + assume es:dseg + jmp short loc_2C2F +; --------------------------------------------------------------------------- + +loc_2C28: ; CODE XREF: __VPRINTER+42Ej + les di, ss:[di] + assume es:nothing + add [bp+arg_0], 4 + +loc_2C2F: ; CODE XREF: __VPRINTER+439j + mov ax, 50h ; 'P' + sub al, byte ptr [bp+var_14] + add ax, [bp+var_12] + mov es:[di], ax + test [bp+var_2], 10h + jz short loc_2C49 + inc di + inc di + mov word ptr es:[di], 0 + +loc_2C49: ; CODE XREF: __VPRINTER+453j + jmp loc_285A +; --------------------------------------------------------------------------- + +loc_2C4C: ; CODE XREF: __VPRINTER+CCj + ; __VPRINTER+D1j ... + mov si, [bp+var_10] + mov es, word ptr [bp+arg_2+2] + mov di, [bp+var_4] + mov al, 25h ; '%' + +loc_2C57: ; CODE XREF: __VPRINTER+471j + call sub_2814 + lods byte ptr es:[si] + or al, al + jnz short loc_2C57 + +loc_2C60: ; CODE XREF: __VPRINTER:loc_2878j + cmp byte ptr [bp+var_14], 50h ; 'P' + jge short loc_2C69 + call sub_281D + +loc_2C69: ; CODE XREF: __VPRINTER+477j + pop es + cmp [bp+var_16], 0 + jz short loc_2C75 + mov ax, 0FFFFh + jmp short loc_2C78 +; --------------------------------------------------------------------------- + +loc_2C75: ; CODE XREF: __VPRINTER+481j + mov ax, [bp+var_12] + +loc_2C78: ; CODE XREF: __VPRINTER+486j + pop di + pop si + mov sp, bp + pop bp + retn 0Ch +; END OF FUNCTION CHUNK FOR __VPRINTER +; --------------------------------------------------------------------------- +off_2C80 dw offset loc_28DC ; DATA XREF: __VPRINTER+D1r + dw offset loc_28C6 + dw offset loc_2911 + dw offset loc_28D1 + dw offset loc_293F + dw offset loc_294C + dw offset loc_298A + dw offset loc_2991 + dw offset loc_2996 + dw offset loc_28FA + dw offset loc_29BF + dw offset loc_299D + dw offset loc_29A1 + dw offset loc_29A5 + dw offset loc_2A1F + dw offset loc_2ACC + dw offset loc_2A6F + dw offset loc_2A8F + dw offset loc_2C10 + dw offset loc_2C4C + dw offset loc_2C4C + dw offset loc_2C4C + dw offset loc_28EC + dw offset loc_28F2 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__xclose proc far + +handle = word ptr -2 + + push bp + mov bp, sp + sub sp, 2 + push si + push di + mov [bp+handle], 2 + jmp short loc_2CCB +; --------------------------------------------------------------------------- + +loc_2CBF: ; CODE XREF: __xclose+22j + push [bp+handle] ; handle + nop + push cs + call near ptr _close + pop cx + inc [bp+handle] + +loc_2CCB: ; CODE XREF: __xclose+Dj + mov ax, [bp+handle] + cmp ax, word_12E1A + jb short loc_2CBF + pop di + pop si + mov sp, bp + pop bp + retf +__xclose endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +; __RefDestructorCount(void) +@__RefDestructorCount$qv proc far ; CODE XREF: seg000:238Ep seg000:245Ep ... + mov dx, ss + mov ax, 10h + retf +@__RefDestructorCount$qv endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +; __RefExceptionList(void) +@__RefExceptionList$qv proc far ; CODE XREF: ___InitExceptBlocks+5Cp + ; ___ExitExceptBlocks+4p + mov dx, ss + mov ax, 14h + retf +@__RefExceptionList$qv endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +___InitExceptBlocks proc far ; CODE XREF: seg000:235Bp + ; string::contains(char *)+10p ... + mov es, ax + mov dx, bx + mov cx, bp + mov bx, es:[bx+4] + add bx, cx + mov ss:[bx+6], dx + mov ss:[bx+8], ax + mov ax, sp + add ax, 4 + mov ss:[bx+0Ah], ax + mov ax, seg dseg + mov ss:[bx+0Eh], ax + mov ss:[bx+10h], si + mov word ptr ss:[bx+2], offset __ExceptionHandler + mov word ptr ss:[bx+4], seg seg000 + mov word ptr ss:[bx+0Ch], 0 + mov word ptr ss:[bx+12h], 0 + push bx + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + pop bx + xchg ax, bx + mov es, dx + mov cx, es:[bx] + mov dx, es:[bx+2] + mov bx, ax + mov ss:[bx+1Ah], cx + mov ss:[bx+1Ch], dx + push bx + push cs + call near ptr @__RefExceptionList$qv ; __RefExceptionList(void) + pop bx + xchg ax, bx + mov es, dx + mov cx, es:[bx] + mov es:[bx], ax + mov bx, ax + mov ss:[bx], cx + retf +___InitExceptBlocks endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +___ExitExceptBlocks proc far ; CODE XREF: string::contains(char *)+52p + ; seg000:2E55p ... + +arg_0 = word ptr 6 + + push bp + mov bp, sp + push cs + call near ptr @__RefExceptionList$qv ; __RefExceptionList(void) + mov bx, [bp+arg_0] + xchg ax, bx + mov es, dx + mov es:[bx], ax + pop bp + retf 2 +___ExitExceptBlocks endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function noreturn + +; terminate(void) +@terminate$qv proc near ; DATA XREF: dseg:0DEAo + push si + push di + nop + push cs + call near ptr _abort +@terminate$qv endp + +; --------------------------------------------------------------------------- + pop di + pop si + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; set_terminate(void (*)(void)) +@set_terminate$qnqv$v proc far + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + sub sp, 4 + push si + push di + les bx, ss:16h + mov dx, es:[bx+0Ch] + mov ax, es:[bx+0Ah] + mov [bp+var_2], dx + mov [bp+var_4], ax + mov ax, [bp+arg_0] + or ax, [bp+arg_2] + jz short loc_2DA9 + les bx, ss:16h + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + mov es:[bx+0Ch], dx + mov es:[bx+0Ah], ax + +loc_2DA9: ; CODE XREF: set_terminate(void (*)(void))+21j + mov dx, [bp+var_2] + mov ax, [bp+var_4] + pop di + pop si + mov sp, bp + pop bp + retf +@set_terminate$qnqv$v endp + +; --------------------------------------------------------------------------- + db 4 dup(0), 43h, 2Eh + dw seg seg000 + db 14h dup(0), 0E2h, 0FFh, 2 dup(0), 3, 0, 0B5h, 2Dh + dw seg seg000 + db 2 dup(0), 4, 0 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function noreturn bp-based frame + +___call_terminate proc far ; CODE XREF: unexpected(void)+3p + ; sub_6B93+272p ... + +var_26 = dword ptr -26h +var_22 = word ptr -22h +var_20 = word ptr -20h +var_1E = word ptr -1Eh +var_12 = word ptr -12h + + push bp + mov bp, sp + sub sp, 26h + push si + push di + mov ax, seg seg000 + mov bx, 2DCDh + nop + push cs + call near ptr ___InitExceptBlocks + mov [bp+var_22], ds + nop + push cs + call near ptr _flushall + les bx, ss:16h + mov dx, es:[bx+0Ch] + mov ax, es:[bx+0Ah] + mov word ptr [bp+var_26+2], dx + mov word ptr [bp+var_26], ax + mov [bp+var_12], 6 + les bx, ss:16h + cmp word ptr es:[bx+12h], 0 + jnz short loc_2E27 + les bx, ss:16h + mov word ptr es:[bx+12h], ds + +loc_2E27: ; CODE XREF: ___call_terminate+3Dj + les bx, ss:16h + mov ax, es:[bx+12h] + mov [bp+var_20], ax + mov ds, [bp+var_20] + call [bp+var_26] + mov ds, [bp+var_22] + mov [bp+var_12], 0 + jmp short loc_2E4B +; --------------------------------------------------------------------------- + mov ds, [bp+var_22] + nop + push cs + call near ptr @_CatchCleanup$qv ; _CatchCleanup(void) + +loc_2E4B: ; CODE XREF: ___call_terminate+62j + nop + push cs + call near ptr _abort +___call_terminate endp + +; --------------------------------------------------------------------------- + push word ptr [bp-1Eh] + nop + push cs + call near ptr ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function noreturn + +; unexpected(void) +@unexpected$qv proc near ; DATA XREF: dseg:0DEEo + push si + push di + push cs + call near ptr ___call_terminate +@unexpected$qv endp + +; --------------------------------------------------------------------------- + pop di + pop si + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; set_unexpected(void (*)(void)) +@set_unexpected$qnqv$v proc far + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + sub sp, 4 + push si + push di + les bx, ss:16h + mov dx, es:[bx+10h] + mov ax, es:[bx+0Eh] + mov [bp+var_2], dx + mov [bp+var_4], ax + mov ax, [bp+arg_0] + or ax, [bp+arg_2] + jz short loc_2E9D + les bx, ss:16h + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + mov es:[bx+10h], dx + mov es:[bx+0Eh], ax + +loc_2E9D: ; CODE XREF: set_unexpected(void (*)(void))+21j + mov dx, [bp+var_2] + mov ax, [bp+var_4] + pop di + pop si + mov sp, bp + pop bp + retf +@set_unexpected$qnqv$v endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function noreturn bp-based frame + +___call_unexpected proc far ; CODE XREF: __ExceptionHandler+127p + +var_6 = dword ptr -6 +var_2 = word ptr -2 + + push bp + mov bp, sp + sub sp, 6 + push si + push di + les bx, ss:16h + mov dx, es:[bx+10h] + mov ax, es:[bx+0Eh] + mov word ptr [bp+var_6+2], dx + mov word ptr [bp+var_6], ax + les bx, ss:16h + cmp word ptr es:[bx+14h], 0 + jnz short loc_2ED9 + les bx, ss:16h + mov word ptr es:[bx+14h], ds + +loc_2ED9: ; CODE XREF: ___call_unexpected+25j + les bx, ss:16h + mov ax, es:[bx+14h] + mov [bp+var_2], ax + push ds + mov ds, [bp+var_2] + call [bp+var_6] + pop ds + nop + push cs + call near ptr _abort +___call_unexpected endp + +; --------------------------------------------------------------------------- + pop di + pop si + mov sp, bp + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; __GetPolymorphicDTC(void *, unsigned int) +@__GetPolymorphicDTC$qnvui proc far + +var_8 = dword ptr -8 +var_4 = dword ptr -4 +arg_0 = dword ptr 6 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + sub sp, 8 + push si + push di + mov ax, word ptr [bp+arg_0] + or ax, word ptr [bp+arg_0+2] + jnz short loc_2F0C + xor ax, ax + jmp short loc_2F46 +; --------------------------------------------------------------------------- + +loc_2F0C: ; CODE XREF: __GetPolymorphicDTC(void *,uint)+Ej + les bx, [bp+arg_0] + add bx, [bp+arg_4] + mov ax, es:[bx] + mov word ptr [bp+var_4+2], ds + mov word ptr [bp+var_4], ax + les bx, [bp+var_4] + mov dx, word ptr [bp+var_4+2] + mov ax, word ptr [bp+var_4] + sub ax, es:[bx-2] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + les bx, [bp+var_4] + mov dx, es:[bx-6] + mov ax, es:[bx-8] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + les bx, [bp+var_8] + mov ax, es:[bx+1Ah] + +loc_2F46: ; CODE XREF: __GetPolymorphicDTC(void *,uint)+12j + pop di + pop si + mov sp, bp + pop bp + retf +@__GetPolymorphicDTC$qnvui endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; __GetPolymorphicDTCfar(void *, unsigned int) +@__GetPolymorphicDTCfar$qnvui proc far + +var_8 = dword ptr -8 +var_4 = dword ptr -4 +arg_0 = dword ptr 6 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + sub sp, 8 + push si + push di + mov ax, word ptr [bp+arg_0] + or ax, word ptr [bp+arg_0+2] + jnz short loc_2F60 + xor ax, ax + jmp short loc_2F9E +; --------------------------------------------------------------------------- + +loc_2F60: ; CODE XREF: __GetPolymorphicDTCfar(void *,uint)+Ej + les bx, [bp+arg_0] + add bx, [bp+arg_4] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + les bx, [bp+var_4] + mov dx, word ptr [bp+var_4+2] + mov ax, word ptr [bp+var_4] + sub ax, es:[bx-2] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + les bx, [bp+var_4] + mov dx, es:[bx-6] + mov ax, es:[bx-8] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + les bx, [bp+var_8] + mov ax, es:[bx+1Ah] + +loc_2F9E: ; CODE XREF: __GetPolymorphicDTCfar(void *,uint)+12j + pop di + pop si + mov sp, bp + pop bp + retf +@__GetPolymorphicDTCfar$qnvui endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +__ExceptInit proc far ; CODE XREF: start+115p + push si + push di + mov word ptr ss:12h, 0 + mov word ptr ss:10h, 0 + mov word ptr ss:18h, ds + mov word ptr ss:16h, 0DE0h + mov word ptr ss:1Ah, 0FEEDh + mov ax, ds + mov word_13084, ax + mov word_13082, ax + mov dx, ss:18h + mov ax, ss:16h + add ax, 0A8h ; '' + les bx, ss:16h + mov es:[bx+22h], dx + mov es:[bx+20h], ax + mov word ptr ss:14h, 0FFFFh + pop di + pop si + retf +__ExceptInit endp + +; --------------------------------------------------------------------------- + +unknown_libname_2: ; BCC v4.x/5.x DOS runtime + pushf + pop bx + mov ax, 0FFFh + and ax, bx + push ax + popf + pushf + pop ax + and ax, 0F000h + cmp ax, 0F000h + mov word_13198, 0 + jz short locret_304D + or bx, 0F000h + push bx + popf + pushf + pop ax + and ax, 0F000h + mov word_13198, 2 + jz short locret_304D + mov edx, esp + and sp, 0FFFCh + pushfd + pop eax + mov ecx, eax + xor eax, 40000h + push eax + popfd + pushfd + pop eax + xor eax, ecx + mov word_13198, 3 + mov esp, edx + jz short locret_304D + mov word_13198, 4 + +locret_304D: ; CODE XREF: seg000:3009j seg000:301Cj ... + retn +; --------------------------------------------------------------------------- +word_304E dw 0 ; DATA XREF: sub_305Ar sub_305A+1Dr ... +word_3050 dw 0 ; DATA XREF: sub_305A+14w sub_305A+27w ... +word_3052 dw 0 ; DATA XREF: sub_305A+4Cw sub_312E+19w ... +word_3054 dw 0 ; DATA XREF: sub_305A+32r + ; sub_305A:loc_30ADr ... +word_3056 dw 0 ; DATA XREF: sub_3348+1r sub_3428+1Aw +word_3058 dw 0 ; DATA XREF: sub_3348+7r sub_3428+1Fw + +; =============== S U B R O U T I N E ======================================= + + +sub_305A proc near ; CODE XREF: sub_318E+18p + cmp dx, cs:word_304E + jz short loc_3098 + mov ds, dx + mov ds, word_12292 + cmp word_12292, 0 + jz short loc_3075 + mov cs:word_3050, ds + jmp short loc_30AD +; --------------------------------------------------------------------------- + +loc_3075: ; CODE XREF: sub_305A+12j + mov ax, ds + cmp ax, cs:word_304E + jz short loc_3093 + mov ax, word ptr aNullCheck+4 + mov cs:word_3050, ax + push ds + xor ax, ax + push ax + call sub_312E + mov ds, cs:word_3054 + jmp short loc_30B6 +; --------------------------------------------------------------------------- + +loc_3093: ; CODE XREF: sub_305A+22j + mov dx, cs:word_304E + +loc_3098: ; CODE XREF: sub_305A+5j + mov cs:word_304E, 0 + mov cs:word_3050, 0 + mov cs:word_3052, 0 + +loc_30AD: ; CODE XREF: sub_305A+19j + mov ds, cs:word_3054 + push dx + xor ax, ax + push ax + +loc_30B6: ; CODE XREF: sub_305A+37j + call __brk + add sp, 4 + retn +sub_305A endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_30BD proc near ; CODE XREF: sub_318E:loc_31ABp + mov ds, dx + push ds + mov es, word_12292 + mov word_12292, 0 + mov word ptr aNullCheck+4, es + cmp dx, cs:word_304E + jz short loc_3103 + cmp word ptr es:2, 0 + jnz short loc_3103 + mov ax, word_12290 + pop bx + push es + add es:0, ax + mov cx, es + add dx, ax + mov es, dx + cmp word ptr es:2, 0 + jnz short loc_30FC + mov es:8, cx + jmp short loc_3106 +; --------------------------------------------------------------------------- + +loc_30FC: ; CODE XREF: sub_30BD+36j + mov es:2, cx + jmp short loc_3106 +; --------------------------------------------------------------------------- + +loc_3103: ; CODE XREF: sub_30BD+16j sub_30BD+1Ej + call sub_3157 + +loc_3106: ; CODE XREF: sub_30BD+3Dj sub_30BD+44j + pop es + mov ax, es + add ax, es:0 + mov ds, ax + cmp word_12292, 0 + jz short loc_3118 + retn +; --------------------------------------------------------------------------- + +loc_3118: ; CODE XREF: sub_30BD+58j + mov ax, word_12290 + add es:0, ax + mov ax, es + mov bx, ds + add bx, word_12290 + mov es, bx + mov es:2, ax +sub_30BD endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + + +sub_312E proc near ; CODE XREF: sub_305A+2Fp sub_32CB+66p + mov bx, ds + cmp bx, word ptr aNullCheck+2 + jz short loc_314F + mov es, word ptr aNullCheck+2 + mov ds, word ptr aNullCheck ; "NULL CHECK" + mov word ptr aNullCheck+2, es + mov word ptr es:4, ds + mov cs:word_3052, ds + mov ds, bx + retn +; --------------------------------------------------------------------------- + +loc_314F: ; CODE XREF: sub_312E+6j + mov cs:word_3052, 0 + retn +sub_312E endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_3157 proc near ; CODE XREF: sub_30BD:loc_3103p + mov ax, cs:word_3052 + or ax, ax + jz short loc_3180 + mov bx, ss + pushf + cli + mov ss, ax + mov es, word ptr ss:6 + mov word ptr ss:6, ds + mov word ptr aNullCheck, ss ; "NULL CHECK" + mov ss, bx + popf + mov word ptr es:4, ds + mov word ptr aNullCheck+2, es + retn +; --------------------------------------------------------------------------- + +loc_3180: ; CODE XREF: sub_3157+6j + mov cs:word_3052, ds + mov word ptr aNullCheck, ds ; "NULL CHECK" + mov word ptr aNullCheck+2, ds + retn +sub_3157 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_318E proc far ; CODE XREF: _registerbgidriver+Dp + ; sub_3348+71p ... + +arg_2 = word ptr 8 + + push bp + mov bp, sp + push si + push di + mov cs:word_3054, ds + mov dx, [bp+arg_2] + or dx, dx + jz short loc_31AE + cmp dx, cs:word_3050 + jnz short loc_31AB + call sub_305A + jmp short loc_31AE +; --------------------------------------------------------------------------- + +loc_31AB: ; CODE XREF: sub_318E+16j + call sub_30BD + +loc_31AE: ; CODE XREF: sub_318E+Fj sub_318E+1Bj + mov ds, cs:word_3054 + pop di + pop si + pop bp + retf +sub_318E endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_31B7 proc near ; CODE XREF: sub_32CB:loc_3320p + push ax + mov ds, cs:word_3054 + xor ax, ax + push ax + push ax + call __sbrk + add sp, 4 + and ax, 0Fh + jz short loc_31E0 + mov dx, 10h + sub dx, ax + xor ax, ax + mov ds, cs:word_3054 + push ax + push dx + call __sbrk + add sp, 4 + +loc_31E0: ; CODE XREF: sub_31B7+13j + pop ax + push ax + xor bx, bx + mov bl, ah + mov cl, 4 + shr bx, cl + shl ax, cl + mov ds, cs:word_3054 + push bx + push ax + call __sbrk + add sp, 4 + pop bx + cmp ax, 0FFFFh + jz short loc_3217 + mov cs:word_304E, dx + mov cs:word_3050, dx + mov ds, dx + mov word_12290, bx + mov word_12292, dx + mov ax, 4 + retn +; --------------------------------------------------------------------------- + +loc_3217: ; CODE XREF: sub_31B7+46j + xor ax, ax + cwd + retn +sub_31B7 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_321B proc near ; CODE XREF: sub_32CB:loc_331Bp + push ax + mov ds, cs:word_3054 + xor ax, ax + push ax + push ax + call __sbrk + pop bx + pop bx + and ax, 0Fh + jz short loc_3243 + mov dx, 10h + sub dx, ax + xor ax, ax + mov ds, cs:word_3054 + push ax + push dx + call __sbrk + add sp, 4 + +loc_3243: ; CODE XREF: sub_321B+12j + pop ax + push ax + xor bx, bx + mov bl, ah + mov cl, 4 + shr bx, cl + shl ax, cl + mov ds, cs:word_3054 + push bx + push ax + call __sbrk + add sp, 4 + pop bx + cmp ax, 0FFFFh + jz short loc_329A + and ax, 0Fh + jnz short loc_327F + +loc_3267: ; CODE XREF: sub_321B+7Dj + mov cx, cs:word_3050 + mov cs:word_3050, dx + mov ds, dx + mov word_12290, bx + mov word_12292, cx + mov ax, 4 + retn +; --------------------------------------------------------------------------- + +loc_327F: ; CODE XREF: sub_321B+4Aj + push bx + push dx + neg ax + add ax, 10h + xor bx, bx + push bx + push ax + call __sbrk + add sp, 4 + pop dx + pop bx + cmp ax, 0FFFFh + jz short loc_329A + inc dx + jmp short loc_3267 +; --------------------------------------------------------------------------- + +loc_329A: ; CODE XREF: sub_321B+45j sub_321B+7Aj + xor ax, ax + cwd + retn +sub_321B endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_329E proc near ; CODE XREF: sub_32CB:loc_3325p + mov bx, dx + sub word_12290, ax + add dx, word_12290 + mov ds, dx + mov word_12290, ax + mov word_12292, bx + mov bx, dx + add bx, word_12290 + mov ds, bx + mov word_12292, dx + mov ax, 4 + retn +sub_329E endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_32C1 proc far ; CODE XREF: __DOSENV+83p + ; operator new(uint)+2Ep ... + +arg_2 = word ptr 6 + + push bp + mov bp, sp + xor dx, dx + mov ax, [bp+arg_2] + jmp short loc_32D4 +sub_32C1 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_32CB proc far ; CODE XREF: sub_3348+Ep sub_3428+64p ... + +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + +loc_32D4: ; CODE XREF: sub_32C1+8j + mov cx, ax + or cx, dx + push si + push di + mov cs:word_3054, ds + jz short loc_333F + add ax, 13h + adc dx, 0 + jb short loc_332A + test dx, 0FFF0h + jnz short loc_332A + mov cl, 4 + shr ax, cl + shl dx, cl + or ah, dl + mov dx, cs:word_304E + or dx, dx + jz short loc_3320 + mov dx, cs:word_3052 + or dx, dx + jz short loc_331B + mov bx, dx + +loc_330B: ; CODE XREF: sub_32CB+4Ej + mov ds, dx + cmp word_12290, ax + jnb short loc_332F + mov dx, word ptr aNullCheck+2 + cmp dx, bx + jnz short loc_330B + +loc_331B: ; CODE XREF: sub_32CB+3Cj + call sub_321B + jmp short loc_333F +; --------------------------------------------------------------------------- + +loc_3320: ; CODE XREF: sub_32CB+33j + call sub_31B7 + jmp short loc_333F +; --------------------------------------------------------------------------- + +loc_3325: ; CODE XREF: sub_32CB:loc_332Fj + call sub_329E + jmp short loc_333F +; --------------------------------------------------------------------------- + +loc_332A: ; CODE XREF: sub_32CB+1Cj sub_32CB+22j + xor ax, ax + cwd + jmp short loc_333F +; --------------------------------------------------------------------------- + +loc_332F: ; CODE XREF: sub_32CB+46j + ja short loc_3325 + call sub_312E + mov bx, word ptr aNullCheck+4 + mov word_12292, bx + mov ax, offset aNullCheck ; "NULL CHECK" + +loc_333F: ; CODE XREF: sub_32CB+14j sub_32CB+53j ... + mov ds, cs:word_3054 + pop di + pop si + pop bp + retf +sub_32CB endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_3348 proc near ; CODE XREF: sub_3428:loc_3484p + push bx + mov si, cs:word_3056 + push si + mov si, cs:word_3058 + push si + push cs + call near ptr sub_32CB + add sp, 4 + or dx, dx + jnz short loc_3362 + pop bx + retn +; --------------------------------------------------------------------------- + +loc_3362: ; CODE XREF: sub_3348+16j + pop ds + mov es, dx + push es + push ds + push bx + mov dx, word_12290 + cld + dec dx + mov di, 4 + mov si, di + mov cx, 6 + rep movsw + or dx, dx + jz short loc_33B3 + mov ax, es + inc ax + mov es, ax + assume es:seg000 + mov ax, ds + inc ax + mov ds, ax + assume ds:nothing + +loc_3386: ; CODE XREF: sub_3348+69j + xor di, di + mov si, di + mov cx, dx + cmp cx, 1000h + jbe short loc_3395 + mov cx, 1000h + +loc_3395: ; CODE XREF: sub_3348+48j + shl cx, 1 + shl cx, 1 + shl cx, 1 + rep movsw + sub dx, 1000h + jbe short loc_33B3 + mov ax, es + add ax, 1000h + mov es, ax + assume es:nothing + mov ax, ds + add ax, 1000h + mov ds, ax + assume ds:nothing + jmp short loc_3386 +; --------------------------------------------------------------------------- + +loc_33B3: ; CODE XREF: sub_3348+32j sub_3348+59j + mov ds, cs:word_3054 + assume ds:dseg + push cs + call near ptr sub_318E + add sp, 4 + pop dx + mov ax, 4 + retn +sub_3348 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_33C4 proc near ; CODE XREF: sub_3428:loc_347Fp + cmp bx, cs:word_3050 + jz short loc_3410 + mov di, bx + add di, ax + mov es, di + assume es:nothing + mov si, cx + sub si, ax + mov es:0, si + mov es:2, bx + push es + push ax + mov es, bx + mov es:0, ax + mov dx, bx + add dx, cx + mov es, dx + cmp word ptr es:2, 0 + jz short loc_33FC + mov es:2, di + jmp short loc_3401 +; --------------------------------------------------------------------------- + +loc_33FC: ; CODE XREF: sub_33C4+2Fj + mov es:8, di + +loc_3401: ; CODE XREF: sub_33C4+36j + mov si, bx + push cs + call near ptr sub_318E + add sp, 4 + mov dx, si + mov ax, 4 + retn +; --------------------------------------------------------------------------- + +loc_3410: ; CODE XREF: sub_33C4+5j + push bx + mov es, bx + mov es:0, ax + add bx, ax + push bx + xor ax, ax + push ax + call __brk + add sp, 4 + pop dx + mov ax, 4 + retn +sub_33C4 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_3428 proc far ; CODE XREF: sub_45E7+2DDp + ; seg015:074EP ... + +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + xor dx, dx + jmp short loc_3435 +; --------------------------------------------------------------------------- + push bp + mov bp, sp + mov dx, [bp+arg_6] + +loc_3435: ; CODE XREF: sub_3428+5j + mov ax, [bp+arg_4] + mov bx, [bp+arg_2] + push si + push di + mov cs:word_3054, ds + mov cs:word_3056, dx + mov cs:word_3058, ax + or bx, bx + jz short loc_3489 + mov cx, ax + or cx, dx + jz short loc_3494 + add ax, 13h + adc dx, 0 + jb short loc_349D + test dx, 0FFF0h + jnz short loc_349D + mov cl, 4 + shr ax, cl + shl dx, cl + or ah, dl + mov es, bx + mov cx, es:0 + cmp cx, ax + jb short loc_3484 + ja short loc_347F + mov dx, bx + mov ax, 4 + jmp short loc_34A0 +; --------------------------------------------------------------------------- + +loc_347F: ; CODE XREF: sub_3428+4Ej + call sub_33C4 + jmp short loc_34A0 +; --------------------------------------------------------------------------- + +loc_3484: ; CODE XREF: sub_3428+4Cj + call sub_3348 + jmp short loc_34A0 +; --------------------------------------------------------------------------- + +loc_3489: ; CODE XREF: sub_3428+25j + push dx + push ax + push cs + call near ptr sub_32CB + add sp, 4 + jmp short loc_34A0 +; --------------------------------------------------------------------------- + +loc_3494: ; CODE XREF: sub_3428+2Bj + push bx + push ax + push cs + call near ptr sub_318E + add sp, 4 + +loc_349D: ; CODE XREF: sub_3428+33j sub_3428+39j + xor ax, ax + cwd + +loc_34A0: ; CODE XREF: sub_3428+55j sub_3428+5Aj ... + mov ds, cs:word_3054 + pop di + pop si + pop bp + retf +sub_3428 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_34A9 proc near ; CODE XREF: __brk+31p __sbrk+74p + +newsize = word ptr -2 +arg_0 = word ptr 4 +arg_2 = word ptr 6 + + push bp + mov bp, sp + sub sp, 2 + push si + push di + mov ax, [bp+arg_2] + inc ax + mov [bp+newsize], ax + mov ax, segx + sub [bp+newsize], ax + mov ax, [bp+newsize] + add ax, 3Fh ; '?' + mov cl, 6 + shr ax, cl + mov [bp+newsize], ax + cmp ax, word_1319A + jz short loc_350D + mov cl, 6 + shl [bp+newsize], cl + mov dx, word_1231E + mov ax, [bp+newsize] + add ax, segx + cmp ax, dx + jbe short loc_34EE + mov ax, dx + sub ax, segx + mov [bp+newsize], ax + +loc_34EE: ; CODE XREF: sub_34A9+3Aj + push [bp+newsize] ; newsize + push segx ; segx + nop + push cs + call near ptr _setblock + pop cx + pop cx + mov dx, ax + cmp dx, 0FFFFh + jnz short loc_351F + mov ax, [bp+newsize] + mov cl, 6 + shr ax, cl + mov word_1319A, ax + +loc_350D: ; CODE XREF: sub_34A9+26j + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + mov word_1231A, dx + mov word_12318, ax + mov ax, 1 + jmp short loc_352F +; --------------------------------------------------------------------------- + +loc_351F: ; CODE XREF: sub_34A9+58j + mov ax, segx + add ax, dx + mov word_1231E, ax + mov word_1231C, 0 + xor ax, ax + +loc_352F: ; CODE XREF: sub_34A9+74j + pop di + pop si + mov sp, bp + pop bp + retn 4 +sub_34A9 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__brk proc near ; CODE XREF: sub_305A:loc_30B6p + ; sub_33C4+59p + +arg_0 = word ptr 4 +arg_2 = word ptr 6 + + push bp + mov bp, sp + push si + push di + mov cx, word_12316 + mov bx, word_12314 + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + call N_PCMP@ + jb short loc_356F + mov cx, word_1231E + mov bx, word_1231C + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + call N_PCMP@ + ja short loc_356F + push [bp+arg_2] + push [bp+arg_0] + call sub_34A9 + or ax, ax + jnz short loc_3574 + +loc_356F: ; CODE XREF: __brk+16j __brk+29j + mov ax, 0FFFFh + jmp short loc_3576 +; --------------------------------------------------------------------------- + +loc_3574: ; CODE XREF: __brk+36j + xor ax, ax + +loc_3576: ; CODE XREF: __brk+3Bj + pop di + pop si + pop bp + retn +__brk endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__sbrk proc near ; CODE XREF: sub_31B7+Ap sub_31B7+23p ... + +var_8 = word ptr -8 +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 4 +arg_2 = word ptr 6 + + push bp + mov bp, sp + sub sp, 8 + push si + push di + mov ax, word_1231A + xor dx, dx + mov cl, 4 + call near ptr N_LXLSH@ + add ax, word_12318 + adc dx, 0 + add ax, [bp+arg_0] + adc dx, [bp+arg_2] + cmp dx, 0Fh + jl short loc_35A5 + jg short loc_35F5 + cmp ax, 0FFFFh + ja short loc_35F5 + +loc_35A5: ; CODE XREF: __sbrk+22j + mov dx, word_1231A + mov ax, word_12318 + mov cx, [bp+arg_2] + mov bx, [bp+arg_0] + call near ptr N_PADD@ + mov [bp+var_2], dx + mov [bp+var_4], ax + mov cx, word_12316 + mov bx, word_12314 + call N_PCMP@ + jb short loc_35F5 + mov cx, word_1231E + mov bx, word_1231C + mov dx, [bp+var_2] + mov ax, [bp+var_4] + call N_PCMP@ + ja short loc_35F5 + mov dx, word_1231A + mov ax, word_12318 + mov [bp+var_6], dx + mov [bp+var_8], ax + push [bp+var_2] + push [bp+var_4] + call sub_34A9 + or ax, ax + jnz short loc_35FD + +loc_35F5: ; CODE XREF: __sbrk+24j __sbrk+29j ... + mov dx, 0FFFFh + mov ax, 0FFFFh + jmp short loc_3603 +; --------------------------------------------------------------------------- + +loc_35FD: ; CODE XREF: __sbrk+79j + mov dx, [bp+var_6] + mov ax, [bp+var_8] + +loc_3603: ; CODE XREF: __sbrk+81j + pop di + pop si + mov sp, bp + pop bp + retn +__sbrk endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl int86(int intno, union REGS *inregs, union REGS *outregs) +_int86 proc far ; CODE XREF: sub_A363+18P sub_A363+31P ... + +segp = SREGS ptr -8 +intno = word ptr 6 +inregs = dword ptr 8 +outregs = dword ptr 0Ch + + push bp + mov bp, sp + sub sp, 8 + push si + push di + push ss + lea ax, [bp+segp] + push ax ; segp + nop + push cs + call near ptr _segread + pop cx + pop cx + push ss + lea ax, [bp+segp] + push ax ; segregs + push word ptr [bp+outregs+2] + push word ptr [bp+outregs] ; outregs + push word ptr [bp+inregs+2] + push word ptr [bp+inregs] ; inregs + push [bp+intno] ; intno + push cs + call near ptr _int86x + add sp, 0Eh + pop di + pop si + mov sp, bp + pop bp + retf +_int86 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl int86x(int intno, union REGS *inregs, union REGS *outregs, struct SREGS *segregs) +_int86x proc far ; CODE XREF: _int86+29p + +var_E = byte ptr -0Eh +var_D = byte ptr -0Dh +var_C = byte ptr -0Ch +var_B = word ptr -0Bh +var_8 = word ptr -8 +var_6 = word ptr -6 +var_4 = dword ptr -4 +intno = word ptr 6 +inregs = dword ptr 8 +outregs = dword ptr 0Ch +segregs = dword ptr 10h + + push bp + mov bp, sp + sub sp, 0Eh + push si + push di + push ds + lea cx, [bp+var_E] + mov word ptr [bp+var_4], cx + mov word ptr [bp+var_4+2], ss + mov [bp+var_E], 55h ; 'U' + mov [bp+var_D], 0CDh ; '' + mov ax, [bp+intno] + mov [bp+var_C], al + mov [bp+var_B], 0CB5Dh + cmp al, 25h ; '%' + jb short loc_367C + cmp al, 26h ; '&' + ja short loc_367C + mov byte ptr [bp+var_B], 36h ; '6' + mov [bp+var_B+1], 68Fh + mov [bp+var_8], cx + mov [bp+var_6], 0CB5Dh + +loc_367C: ; CODE XREF: _int86x+27j _int86x+2Bj + lds si, [bp+segregs] + push word ptr [si] + push word ptr [si+6] + lds si, [bp+inregs] + mov ax, [si] + mov bx, [si+2] + mov cx, [si+4] + mov dx, [si+6] + mov di, [si+0Ah] + mov si, [si+8] + pop ds + pop es + clc + call [bp+var_4] + pushf + pushf + push si + push ds + push es + lds si, [bp+segregs] + pop word ptr [si] + pop word ptr [si+6] + lds si, [bp+outregs] + pop word ptr [si+8] + pop word ptr [si+0Eh] + pop word ptr [si+0Ch] + and word ptr [si+0Ch], 1 + mov [si+0Ah], di + mov [si+6], dx + mov [si+4], cx + mov [si+2], bx + mov [si], ax + pop ds + jz short loc_36D2 + push ax + push ax + call __IOERROR + pop ax + +loc_36D2: ; CODE XREF: _int86x+8Cj + pop di + pop si + mov sp, bp + pop bp + retf +_int86x endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl intdos(union REGS *inregs, union REGS *outregs) +_intdos proc far + +segp = SREGS ptr -8 +inregs = dword ptr 6 +outregs = dword ptr 0Ah + + push bp + mov bp, sp + sub sp, 8 + push si + push di + push ss + lea ax, [bp+segp] + push ax ; segp + nop + push cs + call near ptr _segread + pop cx + pop cx + push ss + lea ax, [bp+segp] + push ax ; segregs + push word ptr [bp+outregs+2] + push word ptr [bp+outregs] ; outregs + push word ptr [bp+inregs+2] + push word ptr [bp+inregs] ; inregs + push cs + call near ptr _intdosx + add sp, 0Ch + pop di + pop si + mov sp, bp + pop bp + retf +_intdos endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl intdosx(union REGS *inregs, union REGS *outregs, struct SREGS *segregs) +_intdosx proc far ; CODE XREF: _intdos+26p sub_D0E5+34P + +inregs = dword ptr 6 +outregs = dword ptr 0Ah +segregs = dword ptr 0Eh + + push bp + mov bp, sp + push si + push di + push ds + lds si, [bp+segregs] + push word ptr [si] + push word ptr [si+6] + lds si, [bp+inregs] + mov ax, [si] + mov bx, [si+2] + mov cx, [si+4] + mov dx, [si+6] + mov di, [si+0Ah] + mov si, [si+8] + pop ds + pop es + push bp + int 21h ; DOS - + pop bp + pushf + pushf + push si + push ds + push es + lds si, [bp+segregs] + pop word ptr [si] + pop word ptr [si+6] + lds si, [bp+outregs] + pop word ptr [si+8] + pop word ptr [si+0Eh] + pop word ptr [si+0Ch] + and word ptr [si+0Ch], 1 + mov [si+0Ah], di + mov [si+6], dx + mov [si+4], cx + mov [si+2], bx + mov [si], ax + pop ds + jz short loc_3766 + push ax + push ax + call __IOERROR + pop ax + +loc_3766: ; CODE XREF: _intdosx+54j + pop di + pop si + pop bp + retf +_intdosx endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int ioctl(int handle, int func, ...) +_ioctl proc far ; CODE XREF: _open+E8p _open+112p + +handle = word ptr 6 +func = word ptr 8 +arg_4 = dword ptr 0Ah +arg_8 = word ptr 0Eh + + push bp + mov bp, sp + push si + push di + push ds + lds dx, [bp+arg_4] + mov ah, 44h ; 'D' + mov al, byte ptr [bp+func] + mov bx, [bp+handle] + mov cx, [bp+arg_8] + int 21h ; DOS - 2+ - IOCTL - + pop ds + jb short loc_378F + cmp [bp+func], 0 + jnz short loc_378D + mov ax, dx + jmp short loc_3793 +; --------------------------------------------------------------------------- + +loc_378D: ; CODE XREF: _ioctl+1Dj + jmp short loc_3793 +; --------------------------------------------------------------------------- + +loc_378F: ; CODE XREF: _ioctl+17j + push ax + call __IOERROR + +loc_3793: ; CODE XREF: _ioctl+21j + ; _ioctl:loc_378Dj + pop di + pop si + pop bp + retf +_ioctl endp + +; --------------------------------------------------------------------------- + push ax + push bx + push cx + push dx + push es + push ds + push si + push di + push bp + mov bp, seg dseg + mov ds, bp + mov bp, sp + sub sp, 4 + mov dx, word_131A8 + mov ax, word_131A6 + mov [bp-2], dx + mov [bp-4], ax + or dx, dx + jnz short loc_37C0 + cmp ax, 1 + jz short loc_37FD + +loc_37C0: ; CODE XREF: seg000:37B9j + mov ax, [bp-4] + or ax, [bp-2] + jz short loc_37D4 + cmp word ptr [bp-2], 0FFFFh + jnz short loc_37DE + cmp word ptr [bp-4], 0FFFFh + jnz short loc_37DE + +loc_37D4: ; CODE XREF: seg000:37C6j + mov ax, 1 + push ax + nop + push cs + call near ptr __exit +; --------------------------------------------------------------------------- + pop cx + +loc_37DE: ; CODE XREF: seg000:37CCj seg000:37D2j + mov word_131A8, 0 + mov word_131A6, 0 + push ss + lea ax, [bp+0] + push ax + mov ax, 7Fh ; '' + push ax + mov ax, 8 + push ax + call dword ptr [bp-4] + add sp, 8 + +loc_37FD: ; CODE XREF: seg000:37BEj + mov sp, bp + pop bp + pop di + pop si + pop ds + pop es + pop dx + pop cx + pop bx + pop ax + iret +; --------------------------------------------------------------------------- + push ax + push bx + push cx + push dx + push es + push ds + push si + push di + push bp + mov bp, seg dseg + mov ds, bp + mov bp, sp + sub sp, 4 + mov dx, word_131A8 + mov ax, word_131A6 + mov [bp-2], dx + mov [bp-4], ax + or dx, dx + jnz short loc_3832 + cmp ax, 1 + jz short loc_386F + +loc_3832: ; CODE XREF: seg000:382Bj + mov ax, [bp-4] + or ax, [bp-2] + jz short loc_3846 + cmp word ptr [bp-2], 0FFFFh + jnz short loc_3850 + cmp word ptr [bp-4], 0FFFFh + jnz short loc_3850 + +loc_3846: ; CODE XREF: seg000:3838j + mov ax, 1 + push ax + nop + push cs + call near ptr __exit +; --------------------------------------------------------------------------- + pop cx + +loc_3850: ; CODE XREF: seg000:383Ej seg000:3844j + mov word_131A8, 0 + mov word_131A6, 0 + push ss + lea ax, [bp+0] + push ax + mov ax, 7Eh ; '~' + push ax + mov ax, 8 + push ax + call dword ptr [bp-4] + add sp, 8 + +loc_386F: ; CODE XREF: seg000:3830j + mov sp, bp + pop bp + pop di + pop si + pop ds + pop es + pop dx + pop cx + pop bx + pop ax + iret +; --------------------------------------------------------------------------- + push ax + push cx + push dx + push bx + push sp + push bp + push si + push di + push ds + push es + mov bp, seg dseg + mov ds, bp + mov bp, sp + sub sp, 4 + pushf + mov dx, word_131A0 + mov ax, word_1319E + mov [bp-2], dx + mov [bp-4], ax + or dx, dx + jnz short loc_38A6 + cmp ax, 1 + jz short loc_38EB + +loc_38A6: ; CODE XREF: seg000:389Fj + mov ax, [bp-4] + or ax, [bp-2] + jz short loc_38BA + cmp word ptr [bp-2], 0FFFFh + jnz short loc_38C4 + cmp word ptr [bp-4], 0FFFFh + jnz short loc_38C4 + +loc_38BA: ; CODE XREF: seg000:38ACj + mov ax, 1 + push ax + nop + push cs + call near ptr __exit +; --------------------------------------------------------------------------- + pop cx + +loc_38C4: ; CODE XREF: seg000:38B2j seg000:38B8j + mov word_131A0, 0 + mov word_1319E, 0 + push word_13FAA + push word_13FA8 + mov ax, 23h ; '#' + push ax + nop + push cs + call near ptr _setvect + mov ax, 2 + push ax + call dword ptr [bp-4] + add sp, 8 + +loc_38EB: ; CODE XREF: seg000:38A4j + popf + clc + mov sp, bp + pop es + pop ds + pop di + pop si + pop bp + pop bx + pop bx + pop dx + pop cx + pop ax + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_38FA proc far ; CODE XREF: seg000:3943p sub_3A01+Cp + +arg_0 = word ptr 6 + + push bp + mov bp, sp + push si + push di + xor dx, dx + +loc_3901: ; CODE XREF: sub_38FA+1Cj + mov bx, dx + mov al, [bx+0F26h] + mov ah, 0 + cmp ax, [bp+arg_0] + jnz short loc_3912 + mov ax, dx + jmp short loc_391B +; --------------------------------------------------------------------------- + +loc_3912: ; CODE XREF: sub_38FA+12j + inc dx + cmp dx, 6 + jl short loc_3901 + mov ax, 0FFFFh + +loc_391B: ; CODE XREF: sub_38FA+16j + pop di + pop si + pop bp + retf +sub_38FA endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + sub sp, 6 + push si + push di + cmp byte_1319D, 0 + jnz short loc_393F + mov word ptr dword_13FA0+2, seg seg000 + mov word ptr dword_13FA0, 391Fh + mov byte_1319D, 1 + +loc_393F: ; CODE XREF: seg000:392Cj + push word ptr [bp+6] + push cs + call near ptr sub_38FA + pop cx + mov [bp-2], ax + cmp ax, 0FFFFh + jnz short loc_395E + mov word_1230E, 13h + mov dx, 0FFFFh + mov ax, 0FFFFh + jmp loc_39FB +; --------------------------------------------------------------------------- + +loc_395E: ; CODE XREF: seg000:394Dj + mov bx, [bp-2] + mov cl, 2 + shl bx, cl + mov dx, [bx+0F10h] + mov ax, [bx+0F0Eh] + mov [bp-4], dx + mov [bp-6], ax + mov bx, [bp-2] + shl bx, cl + mov dx, [bp+0Ah] + mov ax, [bp+8] + mov [bx+0F10h], dx + mov [bx+0F0Eh], ax + cmp word ptr [bp+6], 2 + jnz short loc_39C8 + cmp byte_1319C, 0 + jnz short loc_39A9 + mov ax, 23h ; '#' + push ax + nop + push cs + call near ptr _getvect + pop cx + mov word_13FAA, dx + mov word_13FA8, ax + mov byte_1319C, 1 + +loc_39A9: ; CODE XREF: seg000:3991j + mov ax, [bp+8] + or ax, [bp+0Ah] + jnz short loc_39BB + push word_13FAA + push word_13FA8 + jmp short loc_39C3 +; --------------------------------------------------------------------------- + +loc_39BB: ; CODE XREF: seg000:39AFj + mov ax, seg seg000 + push ax + mov ax, 387Bh + push ax + +loc_39C3: ; CODE XREF: seg000:39B9j + mov ax, 23h ; '#' + jmp short loc_39EC +; --------------------------------------------------------------------------- + +loc_39C8: ; CODE XREF: seg000:398Aj + cmp word ptr [bp+6], 8 + jnz short loc_39F5 + mov ax, seg seg000 + push ax + mov ax, 3797h + push ax + xor ax, ax + push ax + nop + push cs + call near ptr _setvect + add sp, 6 + mov ax, seg seg000 + push ax + mov ax, 3809h + push ax + mov ax, 4 + +loc_39EC: ; CODE XREF: seg000:39C6j + push ax + nop + push cs + call near ptr _setvect + add sp, 6 + +loc_39F5: ; CODE XREF: seg000:39CCj + mov dx, [bp-4] + mov ax, [bp-6] + +loc_39FB: ; CODE XREF: seg000:395Bj + pop di + pop si + mov sp, bp + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_3A01 proc far ; CODE XREF: _abort+8p + +var_6 = dword ptr -6 +var_2 = word ptr -2 +arg_0 = word ptr 6 + + push bp + mov bp, sp + sub sp, 6 + push si + push di + push [bp+arg_0] + push cs + call near ptr sub_38FA + pop cx + mov [bp+var_2], ax + cmp ax, 0FFFFh + jnz short loc_3A1E + mov ax, 1 + jmp short loc_3A92 +; --------------------------------------------------------------------------- + +loc_3A1E: ; CODE XREF: sub_3A01+16j + mov bx, [bp+var_2] + mov cl, 2 + shl bx, cl + mov dx, [bx+0F10h] + mov ax, [bx+0F0Eh] + mov word ptr [bp+var_6+2], dx + mov word ptr [bp+var_6], ax + or dx, dx + jnz short loc_3A3C + cmp ax, 1 + jz short loc_3A90 + +loc_3A3C: ; CODE XREF: sub_3A01+34j + mov ax, word ptr [bp+var_6] + or ax, word ptr [bp+var_6+2] + jnz short loc_3A6B + mov ax, [bp+arg_0] + cmp ax, 2 + jz short loc_3A56 + cmp ax, 16h + jnz short loc_3A5F + nop + push cs + call near ptr sub_1C47 +; --------------------------------------------------------------------------- + +loc_3A56: ; CODE XREF: sub_3A01+49j + xor ax, ax + int 23h ; DOS - CONTROL "C" EXIT ADDRESS + ; Return: return via RETF 2 with CF set + ; DOS will abort program with errorlevel 0 + ; else + ; interrupted DOS call continues + mov ax, 4C03h + int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT) + ; AL = exit code +; --------------------------------------------------------------------------- + +loc_3A5F: ; CODE XREF: sub_3A01+4Ej + mov ax, 1 + push ax ; status + nop + push cs + call near ptr __exit +; --------------------------------------------------------------------------- + pop cx + jmp short loc_3A90 +; --------------------------------------------------------------------------- + +loc_3A6B: ; CODE XREF: sub_3A01+41j + mov bx, [bp+var_2] + mov cl, 2 + shl bx, cl + mov word ptr [bx+0F10h], 0 + mov word ptr [bx+0F0Eh], 0 + mov bx, [bp+var_2] + mov al, [bx+0F2Ch] + mov ah, 0 + push ax + push [bp+arg_0] + call [bp+var_6] + pop cx + pop cx + +loc_3A90: ; CODE XREF: sub_3A01+39j sub_3A01+68j + xor ax, ax + +loc_3A92: ; CODE XREF: sub_3A01+1Bj + pop di + pop si + mov sp, bp + pop bp + retf +sub_3A01 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl __far _access(char *pathname, char) +__access proc far ; CODE XREF: sub_5407+A8p sub_9EE1+72p + +pathname = dword ptr 6 +arg_4 = byte ptr 0Ah + + push bp + mov bp, sp + push si + push di + xor ax, ax + push ax ; func + push word ptr [bp+pathname+2] + push word ptr [bp+pathname] ; pathname + nop + push cs + call near ptr __chmod + add sp, 6 + mov dx, ax + cmp dx, 0FFFFh + jnz short loc_3AB7 + jmp short loc_3ACF +; --------------------------------------------------------------------------- + +loc_3AB7: ; CODE XREF: __access+1Bj + test [bp+arg_4], 2 + jz short loc_3AC2 + test dl, 1 + jnz short loc_3AC6 + +loc_3AC2: ; CODE XREF: __access+23j + xor ax, ax + jmp short loc_3ACF +; --------------------------------------------------------------------------- + +loc_3AC6: ; CODE XREF: __access+28j + mov word_1230E, 5 + mov ax, 0FFFFh + +loc_3ACF: ; CODE XREF: __access+1Dj __access+2Cj + pop di + pop si + pop bp + retf +__access endp + +; --------------------------------------------------------------------------- + db 50h, 51h, 52h, 53h, 54h, 55h, 56h, 57h, 1Eh, 6, 8Bh + db 0ECh, 0A1h, 32h, 0Fh, 0Bh, 6, 34h, 0Fh, 75h, 27h, 0BEh + db 2 dup(0FFh), 1Eh, 0B8h, 0, 63h, 0F8h, 0CDh, 21h, 8Ch + db 0D8h, 1Fh, 72h, 0Bh, 8Ch, 0DAh, 3Bh, 0C2h, 74h, 5, 83h + db 0FEh, 0FFh, 75h, 6, 0BEh, 36h, 0Fh, 0B8h + dw seg dseg +; --------------------------------------------------------------------------- + mov word ptr dword_131C2, si + mov word ptr dword_131C2+2, ax + mov sp, bp + pop es + pop ds + pop di + pop si + pop bp + pop bx + pop bx + pop dx + pop cx + pop ax + retn + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_3B1C proc far ; CODE XREF: sub_3B41+35p + ; sub_45E7+284p ... + +arg_0 = byte ptr 6 + + push bp + mov bp, sp + push si + push di + mov al, [bp+arg_0] + xor cx, cx + les bx, dword_131C2 + +loc_3B2A: ; CODE XREF: sub_3B1C+1Dj + mov dx, es:[bx] + or dx, dx + jz short loc_3B3C + cmp al, dl + jb short loc_3B3C + inc bx + inc bx + cmp al, dh + ja short loc_3B2A + inc cx + +loc_3B3C: ; CODE XREF: sub_3B1C+13j sub_3B1C+17j + xchg ax, cx + pop di + pop si + pop bp + retf +sub_3B1C endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_3B41 proc far ; CODE XREF: sub_45AD+23p + ; sub_45E7+1AEp ... + +var_4 = dword ptr -4 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + sub sp, 4 + push si + push di + xor cx, cx + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + +loc_3B57: ; CODE XREF: sub_3B41+4Fj + les bx, [bp+var_4] + cmp byte ptr es:[bx], 0 + jnz short loc_3B64 + xor cx, cx + jmp short loc_3B92 +; --------------------------------------------------------------------------- + +loc_3B64: ; CODE XREF: sub_3B41+1Dj + cmp cx, 1 + jnz short loc_3B6E + mov cx, 2 + jmp short loc_3B85 +; --------------------------------------------------------------------------- + +loc_3B6E: ; CODE XREF: sub_3B41+26j + les bx, [bp+var_4] + mov al, es:[bx] + push ax + push cs + call near ptr sub_3B1C + pop cx + or ax, ax + jz short loc_3B83 + mov cx, 1 + jmp short loc_3B85 +; --------------------------------------------------------------------------- + +loc_3B83: ; CODE XREF: sub_3B41+3Bj + xor cx, cx + +loc_3B85: ; CODE XREF: sub_3B41+2Bj sub_3B41+40j + mov ax, word ptr [bp+var_4] + cmp ax, [bp+arg_4] + jnb short loc_3B92 + inc word ptr [bp+var_4] + jmp short loc_3B57 +; --------------------------------------------------------------------------- + +loc_3B92: ; CODE XREF: sub_3B41+21j sub_3B41+4Aj + or cx, cx + jnz short loc_3B9B + mov ax, 1 + jmp short loc_3B9D +; --------------------------------------------------------------------------- + +loc_3B9B: ; CODE XREF: sub_3B41+53j + xor ax, ax + +loc_3B9D: ; CODE XREF: sub_3B41+58j + pop di + pop si + mov sp, bp + pop bp + retf +sub_3B41 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_3BA3 proc far ; CODE XREF: seg000:3C24p _main+9EP ... + +arg_0 = dword ptr 6 + + push bp + mov bp, sp + push si + push di + push es + push bp + les si, [bp+arg_0] + cld + sub ax, ax + cwd + mov cx, 0Ah + mov bh, 0 + mov di, 0C3Bh + +loc_3BB9: ; CODE XREF: sub_3BA3+1Dj + mov bl, es:[si] + inc si + test byte ptr [bx+di], 1 + jnz short loc_3BB9 + mov bp, 0 + cmp bl, 2Bh ; '+' + jz short loc_3BD0 + cmp bl, 2Dh ; '-' + jnz short loc_3BD4 + inc bp + +loc_3BD0: ; CODE XREF: sub_3BA3+25j sub_3BA3+41j + mov bl, es:[si] + inc si + +loc_3BD4: ; CODE XREF: sub_3BA3+2Aj + cmp bl, 39h ; '9' + ja short loc_3C08 + sub bl, 30h ; '0' + jb short loc_3C08 + mul cx + add ax, bx + adc dl, dh + jz short loc_3BD0 + jmp short loc_3BFA +; --------------------------------------------------------------------------- + +loc_3BE8: ; CODE XREF: sub_3BA3+63j + mov di, dx + mov cx, 0Ah + mul cx + xchg ax, di + xchg dx, cx + mul dx + xchg ax, dx + xchg ax, di + add ax, bx + adc dx, cx + +loc_3BFA: ; CODE XREF: sub_3BA3+43j + mov bl, es:[si] + inc si + cmp bl, 39h ; '9' + ja short loc_3C08 + sub bl, 30h ; '0' + jnb short loc_3BE8 + +loc_3C08: ; CODE XREF: sub_3BA3+34j sub_3BA3+39j ... + dec bp + jl short loc_3C12 + neg dx + neg ax + sbb dx, 0 + +loc_3C12: ; CODE XREF: sub_3BA3+66j + pop bp + pop es + pop di + pop si + pop bp + retf +sub_3BA3 endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + push word ptr [bp+8] + push word ptr [bp+6] + push cs + call near ptr sub_3BA3 + pop cx + pop cx + pop di + pop si + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int _chmod(const char *pathname, int func, ...) +__chmod proc far ; CODE XREF: __access+10p _open+28p ... + +pathname = dword ptr 6 +func = byte ptr 0Ah +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + push si + push di + push ds + mov cx, [bp+arg_6] + mov ah, 43h ; 'C' + mov al, [bp+func] + lds dx, [bp+pathname] + int 21h ; DOS - + pop ds + jb short loc_3C46 + xchg ax, cx + jmp short loc_3C4A +; --------------------------------------------------------------------------- + +loc_3C46: ; CODE XREF: __chmod+14j + push ax + call __IOERROR + +loc_3C4A: ; CODE XREF: __chmod+17j + pop di + pop si + pop bp + retf +__chmod endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl close(int handle) +_close proc far ; CODE XREF: __xclose+14p _fclose+71p ... + +handle = word ptr 6 + + push bp + mov bp, sp + push si + push di + mov dx, [bp+handle] + cmp dx, word_12E1A + jb short loc_3C65 + mov ax, 6 + push ax + call __IOERROR + jmp short loc_3C76 +; --------------------------------------------------------------------------- + +loc_3C65: ; CODE XREF: _close+Cj + mov bx, dx + add bx, bx + mov word ptr [bx+0B8Ch], 0 + push dx ; handle + nop + push cs + call near ptr __rtl_close + pop cx + +loc_3C76: ; CODE XREF: _close+15j + pop di + pop si + pop bp + retf +_close endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl _rtl_close(int handle) +__rtl_close proc far ; CODE XREF: _close+24p __close+9p ... + +handle = word ptr 6 + + push bp + mov bp, sp + push si + push di + mov ah, 3Eh ; '>' + mov bx, [bp+handle] + int 21h ; DOS - 2+ - CLOSE A FILE WITH HANDLE + ; BX = file handle + jb short loc_3C94 + add bx, bx + mov word ptr [bx+0B8Ch], 0 + xor ax, ax + jmp short loc_3C98 +; --------------------------------------------------------------------------- + +loc_3C94: ; CODE XREF: __rtl_close+Cj + push ax + call __IOERROR + +loc_3C98: ; CODE XREF: __rtl_close+18j + pop di + pop si + pop bp + retf +__rtl_close endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl _close(int handle) +__close proc far + +handle = word ptr 6 + + push bp + mov bp, sp + push si + push di + push [bp+handle] ; handle + push cs + call near ptr __rtl_close + pop cx + pop di + pop si + pop bp + retf +__close endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl eof(int handle) +_eof proc far ; CODE XREF: _fgetc+AEp + +var_4 = word ptr -4 +var_2 = word ptr -2 +handle = word ptr 6 + + push bp + mov bp, sp + sub sp, 4 + push si + push di + mov ax, [bp+handle] + cmp ax, word_12E1A + jb short loc_3CC4 + mov ax, 6 + push ax + jmp short loc_3D21 +; --------------------------------------------------------------------------- + +loc_3CC4: ; CODE XREF: _eof+Fj + mov bx, [bp+handle] + add bx, bx + test byte ptr [bx+0B8Dh], 2 + jz short loc_3CD5 + mov ax, 1 + jmp short loc_3D24 +; --------------------------------------------------------------------------- + +loc_3CD5: ; CODE XREF: _eof+21j + mov ax, 4400h + mov bx, [bp+handle] + int 21h ; DOS - 2+ - IOCTL - GET DEVICE INFORMATION + ; BX = file or device handle + jb short loc_3D20 + test dl, 80h + jnz short loc_3D1C + mov ax, 4201h + xor cx, cx + mov dx, cx + int 21h ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK) + ; AL = method: offset from present location + jb short loc_3D20 + push dx + push ax + mov ax, 4202h + xor cx, cx + mov dx, cx + int 21h ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK) + ; AL = method: offset from end of file + mov [bp+var_4], ax + mov [bp+var_2], dx + pop dx + pop cx + jb short loc_3D20 + mov ax, 4200h + int 21h ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK) + ; AL = method: offset from beginning of file + jb short loc_3D20 + cmp dx, [bp+var_2] + jb short loc_3D1C + ja short loc_3D17 + cmp ax, [bp+var_4] + jb short loc_3D1C + +loc_3D17: ; CODE XREF: _eof+63j + mov ax, 1 + jmp short loc_3D24 +; --------------------------------------------------------------------------- + +loc_3D1C: ; CODE XREF: _eof+35j _eof+61j ... + xor ax, ax + jmp short loc_3D24 +; --------------------------------------------------------------------------- + +loc_3D20: ; CODE XREF: _eof+30j _eof+40j ... + push ax + +loc_3D21: ; CODE XREF: _eof+15j + call __IOERROR + +loc_3D24: ; CODE XREF: _eof+26j _eof+6Dj ... + pop di + pop si + mov sp, bp + pop bp + retf +_eof endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl fclose(FILE *stream) +_fclose proc far ; CODE XREF: __OPENFP+B0p + ; __xfclose+27p ... + +var_2 = word ptr -2 +stream = dword ptr 6 + + push bp + mov bp, sp + sub sp, 2 + push si + push di + mov [bp+var_2], 0FFFFh + mov ax, word ptr [bp+stream] + or ax, word ptr [bp+stream+2] + jnz short loc_3D42 + jmp loc_3DE1 +; --------------------------------------------------------------------------- + +loc_3D42: ; CODE XREF: _fclose+13j + les bx, [bp+stream] + mov ax, es:[bx+12h] + cmp ax, word ptr [bp+stream] + jz short loc_3D51 + jmp loc_3DE1 +; --------------------------------------------------------------------------- + +loc_3D51: ; CODE XREF: _fclose+22j + les bx, [bp+stream] + cmp word ptr es:[bx+6], 0 + jz short loc_3D89 + cmp word ptr es:[bx], 0 + jge short loc_3D70 + push word ptr [bp+stream+2] + push bx ; stream + nop + push cs + call near ptr _fflush + pop cx + pop cx + or ax, ax + jnz short loc_3DE1 + +loc_3D70: ; CODE XREF: _fclose+35j + les bx, [bp+stream] + test byte ptr es:[bx+2], 4 + jz short loc_3D89 + push word ptr es:[bx+0Ah] + push word ptr es:[bx+8] + nop + push cs + call near ptr sub_318E + pop cx + pop cx + +loc_3D89: ; CODE XREF: _fclose+2Fj _fclose+4Ej + les bx, [bp+stream] + cmp byte ptr es:[bx+4], 0 + jl short loc_3DA2 + mov al, es:[bx+4] + cbw + push ax ; handle + nop + push cs + call near ptr _close + pop cx + mov [bp+var_2], ax + +loc_3DA2: ; CODE XREF: _fclose+67j + les bx, [bp+stream] + mov word ptr es:[bx+2], 0 + mov word ptr es:[bx+6], 0 + mov word ptr es:[bx], 0 + mov byte ptr es:[bx+4], 0FFh + cmp word ptr es:[bx+10h], 0 + jz short loc_3DE1 + xor ax, ax + push ax + push ax ; dest + push ax ; int + push ax ; int + push word ptr es:[bx+10h] ; int + call __MKNAME + push dx + push ax ; path + nop + push cs + call near ptr _unlink + pop cx + pop cx + les bx, [bp+stream] + mov word ptr es:[bx+10h], 0 + +loc_3DE1: ; CODE XREF: _fclose+15j _fclose+24j ... + mov ax, [bp+var_2] + pop di + pop si + mov sp, bp + pop bp + retf +_fclose endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl fflush(FILE *stream) +_fflush proc far ; CODE XREF: _fclose+3Dp _flushall+2Dp ... + +var_2 = word ptr -2 +stream = dword ptr 6 + + push bp + mov bp, sp + sub sp, 2 + push si + push di + mov ax, word ptr [bp+stream] + or ax, word ptr [bp+stream+2] + jnz short loc_3E02 + nop + push cs + call near ptr _flushall + jmp loc_3EB3 +; --------------------------------------------------------------------------- + +loc_3E02: ; CODE XREF: _fflush+Ej + les bx, [bp+stream] + mov ax, es:[bx+12h] + cmp ax, word ptr [bp+stream] + jz short loc_3E11 + jmp loc_3EAE +; --------------------------------------------------------------------------- + +loc_3E11: ; CODE XREF: _fflush+22j + les bx, [bp+stream] + cmp word ptr es:[bx], 0 + jl short loc_3E68 + test byte ptr es:[bx+2], 8 + jnz short loc_3E39 + mov dx, es:[bx+0Eh] + mov ax, word ptr [bp+stream] + add ax, 5 + cmp dx, word ptr [bp+stream+2] + jz short loc_3E33 + jmp loc_3EB3 +; --------------------------------------------------------------------------- + +loc_3E33: ; CODE XREF: _fflush+44j + cmp es:[bx+0Ch], ax + jnz short loc_3EB3 + +loc_3E39: ; CODE XREF: _fflush+35j + les bx, [bp+stream] + mov word ptr es:[bx], 0 + mov dx, es:[bx+0Eh] + mov ax, word ptr [bp+stream] + add ax, 5 + cmp dx, word ptr [bp+stream+2] + jnz short loc_3EB3 + cmp es:[bx+0Ch], ax + jnz short loc_3EB3 + mov dx, es:[bx+0Ah] + mov ax, es:[bx+8] + mov es:[bx+0Eh], dx + mov es:[bx+0Ch], ax + jmp short loc_3EB3 +; --------------------------------------------------------------------------- + +loc_3E68: ; CODE XREF: _fflush+2Ej + les bx, [bp+stream] + mov ax, es:[bx+6] + add ax, es:[bx] + inc ax + mov [bp+var_2], ax + sub es:[bx], ax + push ax ; len + mov dx, es:[bx+0Ah] + mov ax, es:[bx+8] + mov es:[bx+0Eh], dx + mov es:[bx+0Ch], ax + push dx + push ax ; buf + mov al, es:[bx+4] + cbw + push ax ; handle + nop + push cs + call near ptr ___write + add sp, 8 + cmp ax, [bp+var_2] + jz short loc_3EB3 + les bx, [bp+stream] + test byte ptr es:[bx+3], 2 + jnz short loc_3EB3 + or word ptr es:[bx+2], 10h + +loc_3EAE: ; CODE XREF: _fflush+24j + mov ax, 0FFFFh + jmp short loc_3EB5 +; --------------------------------------------------------------------------- + +loc_3EB3: ; CODE XREF: _fflush+15j _fflush+46j ... + xor ax, ax + +loc_3EB5: ; CODE XREF: _fflush+C7j + pop di + pop si + mov sp, bp + pop bp + retf +_fflush endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; __int32 __cdecl filelength(int handle) +_filelength proc far ; CODE XREF: sub_E450+23P + +var_4 = word ptr -4 +var_2 = word ptr -2 +handle = word ptr 6 + + push bp + mov bp, sp + sub sp, 4 + push si + push di + mov ax, 4201h + mov bx, [bp+handle] + xor cx, cx + xor dx, dx + int 21h ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK) + ; AL = method: offset from present location + jb short loc_3EF5 + push dx + push ax + mov ax, 4202h + xor cx, cx + xor dx, dx + int 21h ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK) + ; AL = method: offset from end of file + mov [bp+var_4], ax + mov [bp+var_2], dx + pop dx + pop cx + jb short loc_3EF5 + mov ax, 4200h + int 21h ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK) + ; AL = method: offset from beginning of file + jb short loc_3EF5 + mov dx, [bp+var_2] + mov ax, [bp+var_4] + jmp short loc_3EFA +; --------------------------------------------------------------------------- + +loc_3EF5: ; CODE XREF: _filelength+14j + ; _filelength+29j ... + push ax + call __IOERROR + cwd + +loc_3EFA: ; CODE XREF: _filelength+38j + pop di + pop si + mov sp, bp + pop bp + retf +_filelength endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int flushall(void) +_flushall proc far ; CODE XREF: ___call_terminate+18p + ; _fflush+12p + +var_8 = word ptr -8 +var_6 = word ptr -6 +stream = dword ptr -4 + + push bp + mov bp, sp + sub sp, 8 + push si + push di + mov [bp+var_8], 0 + mov ax, word_12E1A + mov [bp+var_6], ax + mov word ptr [bp+stream+2], ds + mov word ptr [bp+stream], 9FAh + jmp short loc_3F39 +; --------------------------------------------------------------------------- + +loc_3F1D: ; CODE XREF: _flushall+41j + les bx, [bp+stream] + test byte ptr es:[bx+2], 3 + jz short loc_3F35 + push word ptr [bp+stream+2] + push bx ; stream + nop + push cs + call near ptr _fflush + pop cx + pop cx + inc [bp+var_8] + +loc_3F35: ; CODE XREF: _flushall+25j + add word ptr [bp+stream], 14h + +loc_3F39: ; CODE XREF: _flushall+1Bj + mov ax, [bp+var_6] + dec [bp+var_6] + or ax, ax + jnz short loc_3F1D + mov ax, [bp+var_8] + pop di + pop si + mov sp, bp + pop bp + retf +_flushall endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_3F4C proc near ; CODE XREF: __OPENFP+18p + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = dword ptr 4 +arg_4 = dword ptr 8 +arg_8 = dword ptr 0Ch + + push bp + mov bp, sp + sub sp, 4 + push si + push di + mov [bp+var_2], 0 + les bx, [bp+arg_8] + inc word ptr [bp+arg_8] + mov cl, es:[bx] + mov al, cl + cmp al, 72h ; 'r' + jnz short loc_3F72 + mov dx, 1 + mov [bp+var_4], 1 + jmp short loc_3F95 +; --------------------------------------------------------------------------- + +loc_3F72: ; CODE XREF: sub_3F4C+1Aj + cmp cl, 77h ; 'w' + jnz short loc_3F7C + mov dx, 302h + jmp short loc_3F84 +; --------------------------------------------------------------------------- + +loc_3F7C: ; CODE XREF: sub_3F4C+29j + cmp cl, 61h ; 'a' + jnz short loc_3F90 + mov dx, 902h + +loc_3F84: ; CODE XREF: sub_3F4C+2Ej + mov [bp+var_2], 80h ; '' + mov [bp+var_4], 2 + jmp short loc_3F95 +; --------------------------------------------------------------------------- + +loc_3F90: ; CODE XREF: sub_3F4C+33j + xor ax, ax + jmp loc_4018 +; --------------------------------------------------------------------------- + +loc_3F95: ; CODE XREF: sub_3F4C+24j sub_3F4C+42j + les bx, [bp+arg_8] + mov cl, es:[bx] + inc word ptr [bp+arg_8] + cmp cl, 2Bh ; '+' + jz short loc_3FB6 + les bx, [bp+arg_8] + cmp byte ptr es:[bx], 2Bh ; '+' + jnz short loc_3FD1 + cmp cl, 74h ; 't' + jz short loc_3FB6 + cmp cl, 62h ; 'b' + jnz short loc_3FD1 + +loc_3FB6: ; CODE XREF: sub_3F4C+55j sub_3F4C+63j + cmp cl, 2Bh ; '+' + jnz short loc_3FC1 + les bx, [bp+arg_8] + mov cl, es:[bx] + +loc_3FC1: ; CODE XREF: sub_3F4C+6Dj + and dx, 0FFFCh + or dx, 4 + mov [bp+var_2], 180h + mov [bp+var_4], 3 + +loc_3FD1: ; CODE XREF: sub_3F4C+5Ej sub_3F4C+68j + cmp cl, 74h ; 't' + jnz short loc_3FDC + or dx, 4000h + jmp short loc_3FFA +; --------------------------------------------------------------------------- + +loc_3FDC: ; CODE XREF: sub_3F4C+88j + cmp cl, 62h ; 'b' + jnz short loc_3FE7 + or dx, 8000h + jmp short loc_3FF6 +; --------------------------------------------------------------------------- + +loc_3FE7: ; CODE XREF: sub_3F4C+93j + mov ax, word_12E44 + and ax, 0C000h + or dx, ax + mov ax, dx + test ah, 80h + jz short loc_3FFA + +loc_3FF6: ; CODE XREF: sub_3F4C+99j + or [bp+var_4], 40h + +loc_3FFA: ; CODE XREF: sub_3F4C+8Ej sub_3F4C+A8j + mov word ptr off_12C82+2, seg seg000 + mov word ptr off_12C82, 5A02h + les bx, [bp+arg_4] + mov es:[bx], dx + les bx, [bp+arg_0] + mov ax, [bp+var_2] + mov es:[bx], ax + mov ax, [bp+var_4] + +loc_4018: ; CODE XREF: sub_3F4C+46j + pop di + pop si + mov sp, bp + pop bp + retn 0Ch +sub_3F4C endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __stdcall _OPENFP(int, int, int, char *path, FILE *buf) +__OPENFP proc near ; CODE XREF: _fopen+30p + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = word ptr 8 +_path = dword ptr 0Ah +buf = dword ptr 0Eh + + push bp + mov bp, sp + sub sp, 4 + push si + push di + push [bp+arg_4] + push [bp+arg_2] + push ss + lea ax, [bp+var_2] + push ax + push ss + lea ax, [bp+var_4] + push ax + call sub_3F4C + les bx, [bp+buf] + mov es:[bx+2], ax + or ax, ax + jz short loc_4070 + cmp byte ptr es:[bx+4], 0 + jge short loc_4080 + push [bp+var_4] + mov ax, [bp+var_2] + or ax, [bp+arg_0] + push ax ; access + push word ptr [bp+_path+2] + push word ptr [bp+_path] ; path + nop + push cs + call near ptr _open + add sp, 8 + les bx, [bp+buf] + mov es:[bx+4], al + or al, al + jge short loc_4080 + +loc_4070: ; CODE XREF: __OPENFP+24j + les bx, [bp+buf] + mov byte ptr es:[bx+4], 0FFh + mov word ptr es:[bx+2], 0 + jmp short loc_40D5 +; --------------------------------------------------------------------------- + +loc_4080: ; CODE XREF: __OPENFP+2Bj __OPENFP+4Ej + les bx, [bp+buf] + mov al, es:[bx+4] + cbw + push ax ; handle + nop + push cs + call near ptr _isatty + pop cx + or ax, ax + jz short loc_409C + les bx, [bp+buf] + or word ptr es:[bx+2], 200h + +loc_409C: ; CODE XREF: __OPENFP+71j + mov ax, 200h + push ax + les bx, [bp+buf] + test byte ptr es:[bx+3], 2 + jz short loc_40AF + mov ax, 1 + jmp short loc_40B1 +; --------------------------------------------------------------------------- + +loc_40AF: ; CODE XREF: __OPENFP+88j + xor ax, ax + +loc_40B1: ; CODE XREF: __OPENFP+8Dj + push ax ; size + xor ax, ax + push ax ; type + push ax + push word ptr [bp+buf+2] ; buf + push word ptr [bp+buf] + nop + push cs ; stream + call _setvbuf + add sp, 0Ch + or ax, ax + jz short loc_40DB + push word ptr [bp+buf+2] + push word ptr [bp+buf] ; stream + nop + push cs + call near ptr _fclose + pop cx + pop cx + +loc_40D5: ; CODE XREF: __OPENFP+5Ej + xor dx, dx + xor ax, ax + jmp short loc_40EA +; --------------------------------------------------------------------------- + +loc_40DB: ; CODE XREF: __OPENFP+A6j + les bx, [bp+buf] + mov word ptr es:[bx+10h], 0 + mov dx, word ptr [bp+buf+2] + mov ax, word ptr [bp+buf] + +loc_40EA: ; CODE XREF: __OPENFP+B9j + pop di + pop si + mov sp, bp + pop bp + retn 0Eh +__OPENFP endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__GETFP proc near ; CODE XREF: _fopen+8p + +var_4 = dword ptr -4 + + push bp + mov bp, sp + sub sp, 4 + push si + push di + mov word ptr [bp+var_4+2], ds + mov word ptr [bp+var_4], 9FAh + +loc_4102: ; CODE XREF: __GETFP+2Fj + les bx, [bp+var_4] + cmp byte ptr es:[bx+4], 0 + jl short loc_4123 + mov ax, word ptr [bp+var_4] + add word ptr [bp+var_4], 14h + push ax + mov ax, 14h + imul word_12E1A + add ax, 9FAh + pop dx + cmp dx, ax + jb short loc_4102 + +loc_4123: ; CODE XREF: __GETFP+18j + les bx, [bp+var_4] + cmp byte ptr es:[bx+4], 0 + jl short loc_4133 + xor dx, dx + xor ax, ax + jmp short loc_4139 +; --------------------------------------------------------------------------- + +loc_4133: ; CODE XREF: __GETFP+39j + mov dx, word ptr [bp+var_4+2] + mov ax, word ptr [bp+var_4] + +loc_4139: ; CODE XREF: __GETFP+3Fj + pop di + pop si + mov sp, bp + pop bp + retn +__GETFP endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; FILE *__cdecl fopen(const char *path, const char *mode) +_fopen proc far ; CODE XREF: sub_A240+10P sub_A2E4+10P + +buf = dword ptr -4 +_path = dword ptr 6 +_mode = word ptr 0Ah +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + sub sp, 4 + push si + push di + call __GETFP + mov word ptr [bp+buf+2], dx + mov word ptr [bp+buf], ax + or ax, dx + jnz short loc_415A + xor dx, dx + xor ax, ax + jmp short loc_4172 +; --------------------------------------------------------------------------- + +loc_415A: ; CODE XREF: _fopen+13j + push word ptr [bp+buf+2] + push word ptr [bp+buf] ; buf + push word ptr [bp+_path+2] + push word ptr [bp+_path] ; path + push [bp+arg_6] ; int + push [bp+_mode] ; int + xor ax, ax + push ax ; int + call __OPENFP + +loc_4172: ; CODE XREF: _fopen+19j + pop di + pop si + mov sp, bp + pop bp + retf +_fopen endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int fprintf(FILE *stream, const char *format, ...) +_fprintf proc far ; CODE XREF: sub_1AA0+98p + +stream = word ptr 6 +arg_2 = word ptr 8 +_format = word ptr 0Ah +arg_6 = word ptr 0Ch +arg_8 = byte ptr 0Eh + + push bp + mov bp, sp + push si + push di + mov ax, 50E6h + push ax + push [bp+arg_2] + push [bp+stream] + push [bp+arg_6] + push [bp+_format] + lea ax, [bp+arg_8] + push ax + call __VPRINTER + pop di + pop si + pop bp + retf +_fprintf endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl fputs(const char *s, FILE *stream) +_fputs proc far ; CODE XREF: sub_A2E4+34P + +len = word ptr -2 +buf = dword ptr 6 +stream = dword ptr 0Ah + + push bp + mov bp, sp + sub sp, 2 + push si + push di + mov ax, word ptr [bp+buf] + or ax, word ptr [bp+buf+2] + jz short loc_41BC + push word ptr [bp+buf+2] + push word ptr [bp+buf] ; s + nop + push cs + call near ptr _strlen + pop cx + pop cx + mov [bp+len], ax + or ax, ax + jnz short loc_41C0 + +loc_41BC: ; CODE XREF: _fputs+Ej + xor ax, ax + jmp short loc_41E7 +; --------------------------------------------------------------------------- + +loc_41C0: ; CODE XREF: _fputs+22j + push word ptr [bp+buf+2] + push word ptr [bp+buf] ; buf + push [bp+len] ; len + push word ptr [bp+stream+2] + push word ptr [bp+stream] ; stream + call __FPUTN + or ax, ax + jz short loc_41E4 + les bx, [bp+buf] + add bx, [bp+len] + mov al, es:[bx-1] + mov ah, 0 + jmp short loc_41E7 +; --------------------------------------------------------------------------- + +loc_41E4: ; CODE XREF: _fputs+3Cj + mov ax, 0FFFFh + +loc_41E7: ; CODE XREF: _fputs+26j _fputs+4Aj + pop di + pop si + mov sp, bp + pop bp + retf +_fputs endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __stdcall sub_41ED(FILE *stream, int, void *buf) +sub_41ED proc near ; CODE XREF: sub_4320+28p sub_4320+6Fp + +var_4 = word ptr -4 +len = word ptr -2 +stream = dword ptr 4 +arg_4 = word ptr 8 +buf = dword ptr 0Ah + + push bp + mov bp, sp + sub sp, 4 + push si + push di + jmp loc_42F4 +; --------------------------------------------------------------------------- + +loc_41F8: ; CODE XREF: sub_41ED+10Dj + inc [bp+arg_4] + les bx, [bp+stream] + mov ax, es:[bx+6] + cmp ax, [bp+arg_4] + jbe short loc_420C + mov ax, [bp+arg_4] + jmp short loc_4213 +; --------------------------------------------------------------------------- + +loc_420C: ; CODE XREF: sub_41ED+18j + les bx, [bp+stream] + mov ax, es:[bx+6] + +loc_4213: ; CODE XREF: sub_41ED+1Dj + mov [bp+len], ax + les bx, [bp+stream] + test byte ptr es:[bx+2], 40h + jnz short loc_4223 + jmp loc_42AF +; --------------------------------------------------------------------------- + +loc_4223: ; CODE XREF: sub_41ED+31j + cmp word ptr es:[bx+6], 0 + jnz short loc_422D + jmp loc_42AF +; --------------------------------------------------------------------------- + +loc_422D: ; CODE XREF: sub_41ED+3Bj + mov ax, es:[bx+6] + cmp ax, [bp+arg_4] + jnb short loc_42AF + cmp word ptr es:[bx], 0 + jnz short loc_42AF + dec [bp+arg_4] + mov [bp+len], 0 + jmp short loc_4258 +; --------------------------------------------------------------------------- + +loc_4246: ; CODE XREF: sub_41ED+75j + les bx, [bp+stream] + add bx, 6 + mov [bp+var_4], bx + mov ax, es:[bx] + add [bp+len], ax + sub [bp+arg_4], ax + +loc_4258: ; CODE XREF: sub_41ED+57j + les bx, [bp+stream] + mov ax, es:[bx+6] + cmp ax, [bp+arg_4] + jbe short loc_4246 + push [bp+len] ; len + push word ptr [bp+buf+2] + push word ptr [bp+buf] ; buf + mov al, es:[bx+4] + cbw + push ax ; handle + nop + push cs + call near ptr __rtl_read + add sp, 8 + mov dx, ax + cmp dx, 0FFFFh + jnz short loc_428C + xor dx, dx + les bx, [bp+stream] + or word ptr es:[bx+2], 10h + +loc_428C: ; CODE XREF: sub_41ED+93j + add word ptr [bp+buf], dx + cmp dx, [bp+len] + jz short loc_42F4 + mov ax, [bp+len] + sub ax, dx + add [bp+arg_4], ax + +loc_429C: ; CODE XREF: sub_41ED+105j + les bx, [bp+stream] + or word ptr es:[bx+2], 20h + jmp short loc_42FD +; --------------------------------------------------------------------------- + +loc_42A6: ; CODE XREF: sub_41ED+100j + les bx, [bp+buf] + mov es:[bx], dl + inc word ptr [bp+buf] + +loc_42AF: ; CODE XREF: sub_41ED+33j sub_41ED+3Dj ... + dec [bp+arg_4] + mov ax, [bp+arg_4] + or ax, ax + jz short loc_42EF + dec [bp+len] + jz short loc_42EF + les bx, [bp+stream] + dec word ptr es:[bx] + jl short loc_42DB + mov dx, es:[bx+0Eh] + mov si, es:[bx+0Ch] + inc word ptr es:[bx+0Ch] + mov es, dx + mov al, es:[si] + mov ah, 0 + jmp short loc_42E8 +; --------------------------------------------------------------------------- + +loc_42DB: ; CODE XREF: sub_41ED+D7j + push word ptr [bp+stream+2] + push word ptr [bp+stream] ; stream + nop + push cs + call near ptr __fgetc + pop cx + pop cx + +loc_42E8: ; CODE XREF: sub_41ED+ECj + mov dx, ax + cmp ax, 0FFFFh + jnz short loc_42A6 + +loc_42EF: ; CODE XREF: sub_41ED+CAj sub_41ED+CFj + cmp dx, 0FFFFh + jz short loc_429C + +loc_42F4: ; CODE XREF: sub_41ED+8j sub_41ED+A5j + cmp [bp+arg_4], 0 + jz short loc_42FD + jmp loc_41F8 +; --------------------------------------------------------------------------- + +loc_42FD: ; CODE XREF: sub_41ED+B7j + ; sub_41ED+10Bj + mov ax, [bp+arg_4] + pop di + pop si + mov sp, bp + pop bp + retn 0Ah +sub_41ED endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; size_t __cdecl fread(void *ptr, size_t size, size_t n, FILE *stream) +_fread proc far ; CODE XREF: sub_A240+3BP + +_ptr = dword ptr 6 +_size = word ptr 0Ah +n = word ptr 0Ch +stream = dword ptr 0Eh + + push bp + mov bp, sp + sub sp, 6 + push si + push di + cmp [bp+_size], 0 + jnz short loc_431B + xor ax, ax + jmp loc_439C +; --------------------------------------------------------------------------- + +loc_431B: ; CODE XREF: _fread+Cj + mov bx, [bp+_size] + xor cx, cx +_fread endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +sub_4320 proc far ; CODE XREF: sub_68BC+7Bp sub_68BC+9Ap ... + mov ax, [bp+0Ch] + xor dx, dx + call N_LXMUL@ + mov [bp-4], dx + mov [bp-6], ax + cmp dx, 1 + ja short loc_4359 + jb short loc_4339 + or ax, ax + jnb short loc_4359 + +loc_4339: ; CODE XREF: sub_4320+13j + push word ptr [bp+8] + push word ptr [bp+6] ; buf + push word ptr [bp-6] ; int + push word ptr [bp+10h] + push word ptr [bp+0Eh] ; stream + call sub_41ED + mov dx, [bp-6] + sub dx, ax + push dx + xor dx, dx + pop ax + div word ptr [bp+0Ah] + jmp short loc_439C +; --------------------------------------------------------------------------- + +loc_4359: ; CODE XREF: sub_4320+11j sub_4320+17j + mov ax, [bp+0Ch] + inc ax + mov [bp-2], ax + jmp short loc_4376 +; --------------------------------------------------------------------------- + +loc_4362: ; CODE XREF: sub_4320+74j + mov bx, [bp+0Ah] + xor cx, cx + mov dx, [bp+8] + mov ax, [bp+6] + call near ptr N_PADD@ + mov [bp+8], dx + mov [bp+6], ax + +loc_4376: ; CODE XREF: sub_4320+40j + dec word ptr [bp-2] + mov ax, [bp-2] + or ax, ax + jz short loc_4396 + push word ptr [bp+8] + push word ptr [bp+6] ; buf + push word ptr [bp+0Ah] ; int + push word ptr [bp+10h] + push word ptr [bp+0Eh] ; stream + call sub_41ED + or ax, ax + jz short loc_4362 + +loc_4396: ; CODE XREF: sub_4320+5Ej + mov ax, [bp+0Ch] + sub ax, [bp-2] + +loc_439C: ; CODE XREF: _fread+10j sub_4320+37j + pop di + pop si + mov sp, bp + pop bp + retf +sub_4320 endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_43A2 proc near ; CODE XREF: _fseek+2Ep _ftell+B9p ... + +var_6 = dword ptr -6 +var_2 = word ptr -2 +arg_0 = dword ptr 4 + + push bp + mov bp, sp + sub sp, 6 + push si + push di + les bx, [bp+arg_0] + cmp word ptr es:[bx], 0 + jge short loc_43BF + mov cx, es:[bx+6] + add cx, es:[bx] + inc cx + mov ax, cx + jmp short loc_43CC +; --------------------------------------------------------------------------- + +loc_43BF: ; CODE XREF: sub_43A2+Fj + les bx, [bp+arg_0] + mov ax, es:[bx] + cwd + xor ax, dx + sub ax, dx + mov cx, ax + +loc_43CC: ; CODE XREF: sub_43A2+1Bj + mov [bp+var_2], ax + les bx, [bp+arg_0] + test byte ptr es:[bx+2], 40h + jnz short loc_4420 + les bx, [bp+arg_0] + mov dx, es:[bx+0Eh] + mov ax, es:[bx+0Ch] + mov word ptr [bp+var_6+2], dx + mov word ptr [bp+var_6], ax + cmp word ptr es:[bx], 0 + jge short loc_4419 + jmp short loc_4401 +; --------------------------------------------------------------------------- + +loc_43F2: ; CODE XREF: sub_43A2+64j + dec word ptr [bp+var_6] + les bx, [bp+var_6] + cmp byte ptr es:[bx], 0Ah + jnz short loc_4401 + inc [bp+var_2] + +loc_4401: ; CODE XREF: sub_43A2+4Ej sub_43A2+5Aj + mov ax, cx + dec cx + or ax, ax + jnz short loc_43F2 + jmp short loc_4420 +; --------------------------------------------------------------------------- + +loc_440A: ; CODE XREF: sub_43A2+7Cj + les bx, [bp+var_6] + inc word ptr [bp+var_6] + cmp byte ptr es:[bx], 0Ah + jnz short loc_4419 + inc [bp+var_2] + +loc_4419: ; CODE XREF: sub_43A2+4Cj sub_43A2+72j + mov ax, cx + dec cx + or ax, ax + jnz short loc_440A + +loc_4420: ; CODE XREF: sub_43A2+35j sub_43A2+66j + mov ax, [bp+var_2] + pop di + pop si + mov sp, bp + pop bp + retn 4 +sub_43A2 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl fseek(FILE *stream, __int32 offset, int whence) +_fseek proc far ; CODE XREF: sub_554E+63p + +stream = dword ptr 6 +_offset = dword ptr 0Ah +whence = word ptr 0Eh + + push bp + mov bp, sp + push si + push di + push word ptr [bp+stream+2] + push word ptr [bp+stream] ; stream + nop + push cs + call near ptr _fflush + pop cx + pop cx + or ax, ax + jz short loc_4446 + mov ax, 0FFFFh + jmp short loc_44A9 +; --------------------------------------------------------------------------- + +loc_4446: ; CODE XREF: _fseek+14j + cmp [bp+whence], 1 + jnz short loc_4463 + les bx, [bp+stream] + cmp word ptr es:[bx], 0 + jle short loc_4463 + push word ptr [bp+stream+2] + push bx + call sub_43A2 + cwd + sub word ptr [bp+_offset], ax + sbb word ptr [bp+_offset+2], dx + +loc_4463: ; CODE XREF: _fseek+1Fj _fseek+28j + les bx, [bp+stream] + and word ptr es:[bx+2], 0FE5Fh + mov word ptr es:[bx], 0 + mov dx, es:[bx+0Ah] + mov ax, es:[bx+8] + mov es:[bx+0Eh], dx + mov es:[bx+0Ch], ax + push [bp+whence] ; fromwhere + push word ptr [bp+_offset+2] + push word ptr [bp+_offset] ; offset + mov al, es:[bx+4] + cbw + push ax ; handle + nop + push cs + call near ptr _lseek + add sp, 8 + cmp dx, 0FFFFh + jnz short loc_44A7 + cmp ax, 0FFFFh + jnz short loc_44A7 + mov ax, 0FFFFh + jmp short loc_44A9 +; --------------------------------------------------------------------------- + +loc_44A7: ; CODE XREF: _fseek+70j _fseek+75j + xor ax, ax + +loc_44A9: ; CODE XREF: _fseek+19j _fseek+7Aj + pop di + pop si + pop bp + retf +_fseek endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; __int32 __cdecl ftell(FILE *stream) +_ftell proc far + +var_8 = word ptr -8 +var_6 = word ptr -6 +_offset = dword ptr -4 +stream = dword ptr 6 + + push bp + mov bp, sp + sub sp, 8 + push si + push di + mov ax, 1 + push ax ; fromwhere + xor ax, ax + push ax + push ax ; offset + les bx, [bp+stream] + mov al, es:[bx+4] + cbw + push ax ; handle + nop + push cs + call near ptr _lseek + add sp, 8 + mov word ptr [bp+_offset+2], dx + mov word ptr [bp+_offset], ax + cmp dx, 0FFFFh + jnz short loc_44E1 + cmp ax, 0FFFFh + jnz short loc_44E1 + jmp loc_4582 +; --------------------------------------------------------------------------- + +loc_44E1: ; CODE XREF: _ftell+2Aj _ftell+2Fj + les bx, [bp+stream] + cmp word ptr es:[bx], 0 + jl short loc_44ED + jmp loc_4572 +; --------------------------------------------------------------------------- + +loc_44ED: ; CODE XREF: _ftell+3Bj + mov al, es:[bx+4] + cbw + add ax, ax + mov bx, ax + test byte ptr [bx+0B8Dh], 8 + jz short loc_4560 + mov ax, 2 + push ax ; fromwhere + xor ax, ax + push ax + push ax ; offset + mov bx, word ptr [bp+stream] + mov al, es:[bx+4] + cbw + push ax ; handle + nop + push cs + call near ptr _lseek + add sp, 8 + mov [bp+var_6], dx + mov [bp+var_8], ax + cmp dx, 0FFFFh + jnz short loc_4528 + cmp ax, 0FFFFh + jnz short loc_4528 + jmp short loc_4588 +; --------------------------------------------------------------------------- + +loc_4528: ; CODE XREF: _ftell+72j _ftell+77j + xor ax, ax + push ax ; fromwhere + push word ptr [bp+_offset+2] + push word ptr [bp+_offset] ; offset + les bx, [bp+stream] + mov al, es:[bx+4] + cbw + push ax ; handle + nop + push cs + call near ptr _lseek + add sp, 8 + cmp dx, 0FFFFh + jnz short loc_4554 + cmp ax, 0FFFFh + jnz short loc_4554 + mov dx, 0FFFFh + mov ax, 0FFFFh + jmp short loc_4588 +; --------------------------------------------------------------------------- + +loc_4554: ; CODE XREF: _ftell+98j _ftell+9Dj + mov dx, [bp+var_6] + mov ax, [bp+var_8] + mov word ptr [bp+_offset+2], dx + mov word ptr [bp+_offset], ax + +loc_4560: ; CODE XREF: _ftell+4Ej + push word ptr [bp+stream+2] + push word ptr [bp+stream] + call sub_43A2 + cwd + add word ptr [bp+_offset], ax + adc word ptr [bp+_offset+2], dx + jmp short loc_4582 +; --------------------------------------------------------------------------- + +loc_4572: ; CODE XREF: _ftell+3Dj + push word ptr [bp+stream+2] + push word ptr [bp+stream] + call sub_43A2 + cwd + sub word ptr [bp+_offset], ax + sbb word ptr [bp+_offset+2], dx + +loc_4582: ; CODE XREF: _ftell+31j _ftell+C3j + mov dx, word ptr [bp+_offset+2] + mov ax, word ptr [bp+_offset] + +loc_4588: ; CODE XREF: _ftell+79j _ftell+A5j + pop di + pop si + mov sp, bp + pop bp + retf +_ftell endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_458E proc near ; CODE XREF: sub_45AD+Ep sub_45E7+7Dp ... + +arg_0 = word ptr 4 + + push bp + mov bp, sp + push si + push di + mov ax, [bp+arg_0] + cmp ax, 5Ch ; '\' + jz short loc_45A0 + cmp ax, 2Fh ; '/' + jnz short loc_45A5 + +loc_45A0: ; CODE XREF: sub_458E+Bj + mov ax, 1 + jmp short loc_45A7 +; --------------------------------------------------------------------------- + +loc_45A5: ; CODE XREF: sub_458E+10j + xor ax, ax + +loc_45A7: ; CODE XREF: sub_458E+15j + pop di + pop si + pop bp + retn 2 +sub_458E endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_45AD proc near ; CODE XREF: sub_45E7+CDp + ; sub_45E7+15Bp ... + +arg_0 = dword ptr 4 +arg_4 = word ptr 8 +arg_6 = word ptr 0Ah + + push bp + mov bp, sp + push si + push di + les bx, [bp+arg_0] + mov al, es:[bx] + mov ah, 0 + push ax + call sub_458E + or ax, ax + jz short loc_45DF + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + push [bp+arg_6] + push [bp+arg_4] + nop + push cs + call near ptr sub_3B41 + add sp, 8 + or ax, ax + jz short loc_45DF + mov ax, 1 + jmp short loc_45E1 +; --------------------------------------------------------------------------- + +loc_45DF: ; CODE XREF: sub_45AD+13j sub_45AD+2Bj + xor ax, ax + +loc_45E1: ; CODE XREF: sub_45AD+30j + pop di + pop si + pop bp + retn 8 +sub_45AD endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_45E7 proc far ; CODE XREF: sub_5407+10Dp + +drive = word ptr -12h +var_10 = word ptr -10h +var_E = word ptr -0Eh +src = dword ptr -0Ch +dest = dword ptr -8 +_s = dword ptr -4 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch +arg_8 = word ptr 0Eh + + push bp + mov bp, sp + sub sp, 12h + push si + push di + mov ax, 0A1h ; '' + push ax + nop + push cs + call near ptr sub_32C1 + pop cx + mov word ptr [bp+_s+2], dx + mov word ptr [bp+_s], ax + or ax, dx + jnz short loc_4606 + jmp loc_4849 +; --------------------------------------------------------------------------- + +loc_4606: ; CODE XREF: sub_45E7+1Aj + mov dx, [bp+arg_6] + mov ax, [bp+arg_4] + mov word ptr [bp+src+2], dx + mov word ptr [bp+src], ax + les bx, [bp+src] + mov al, es:[bx] + cbw + mov bx, ax + test byte ptr [bx+0C3Bh], 0Ch + jz short loc_4646 + mov bx, word ptr [bp+src] + cmp byte ptr es:[bx+1], 3Ah ; ':' + jnz short loc_4646 + mov al, es:[bx] + cbw + mov [bp+var_10], ax + push ax ; ch + nop + push cs + call near ptr _toupper + pop cx + add ax, 0FFC0h + mov [bp+drive], ax + add word ptr [bp+src], 2 + jmp short loc_465C +; --------------------------------------------------------------------------- + +loc_4646: ; CODE XREF: sub_45E7+39j sub_45E7+43j + push ss + lea ax, [bp+drive] + push ax ; drive + nop + push cs + call near ptr __dos_getdrive + pop cx + pop cx + mov ax, [bp+drive] + add ax, 41h ; 'A' + dec ax + mov [bp+var_10], ax + +loc_465C: ; CODE XREF: sub_45E7+5Dj + les bx, [bp+src] + mov al, es:[bx] + cbw + push ax + call sub_458E + or ax, ax + jnz short loc_46C4 + mov ax, 0A1h ; '' + push ax ; len + push word ptr [bp+_s+2] + push word ptr [bp+_s] ; buf + push [bp+drive] ; drive + nop + push cs + call near ptr __getdcwd + add sp, 8 + or ax, dx + jnz short loc_4694 + push word ptr [bp+_s+2] + push word ptr [bp+_s] + nop + push cs + call near ptr sub_318E + pop cx + pop cx + jmp loc_4849 +; --------------------------------------------------------------------------- + +loc_4694: ; CODE XREF: sub_45E7+9Bj + push word ptr [bp+_s+2] + push word ptr [bp+_s] ; s + nop + push cs + call near ptr _strlen + pop cx + pop cx + mov dx, word ptr [bp+_s+2] + add ax, word ptr [bp+_s] + mov word ptr [bp+dest+2], dx + mov word ptr [bp+dest], ax + push dx + push word ptr [bp+_s] + dec ax + push dx + push ax + call sub_45AD + or ax, ax + jnz short loc_46E6 + les bx, [bp+dest] + mov byte ptr es:[bx], 5Ch ; '\' + jmp short loc_46E3 +; --------------------------------------------------------------------------- + +loc_46C4: ; CODE XREF: sub_45E7+82j + mov dx, word ptr [bp+_s+2] + mov ax, word ptr [bp+_s] + mov word ptr [bp+dest+2], dx + mov word ptr [bp+dest], ax + les bx, [bp+dest] + mov al, byte ptr [bp+var_10] + mov es:[bx], al + inc word ptr [bp+dest] + les bx, [bp+dest] + mov byte ptr es:[bx], 3Ah ; ':' + +loc_46E3: ; CODE XREF: sub_45E7+DBj + inc word ptr [bp+dest] + +loc_46E6: ; CODE XREF: sub_45E7+D2j + push word ptr [bp+src+2] + push word ptr [bp+src] ; src + push word ptr [bp+dest+2] + push word ptr [bp+dest] ; dest + nop + push cs + call near ptr _strcpy + add sp, 8 + mov dx, word ptr [bp+_s+2] + mov ax, word ptr [bp+_s] + mov word ptr [bp+dest+2], dx + mov word ptr [bp+dest], ax + mov word ptr [bp+src+2], dx + mov word ptr [bp+src], ax + +loc_470C: ; CODE XREF: sub_45E7+28Cj + ; sub_45E7+298j ... + les bx, [bp+src] + inc word ptr [bp+src] + mov al, es:[bx] + cbw + mov [bp+var_E], ax + or ax, ax + jz short loc_4728 + push ax + call sub_458E + or ax, ax + jnz short loc_4728 + jmp loc_485A +; --------------------------------------------------------------------------- + +loc_4728: ; CODE XREF: sub_45E7+134j + ; sub_45E7+13Cj + les bx, [bp+dest] + cmp byte ptr es:[bx-1], 2Eh ; '.' + jnz short loc_474F + push word ptr [bp+_s+2] + push word ptr [bp+_s] + mov ax, word ptr [bp+dest] + add ax, 0FFFEh + push word ptr [bp+dest+2] + push ax + call sub_45AD + or ax, ax + jz short loc_474F + sub word ptr [bp+dest], 2 + jmp short loc_47C6 +; --------------------------------------------------------------------------- + +loc_474F: ; CODE XREF: sub_45E7+149j + ; sub_45E7+160j + les bx, [bp+dest] + cmp byte ptr es:[bx-1], 2Eh ; '.' + jnz short loc_47C6 + cmp byte ptr es:[bx-2], 2Eh ; '.' + jnz short loc_47C6 + push word ptr [bp+_s+2] + push word ptr [bp+_s] + mov ax, word ptr [bp+dest] + add ax, 0FFFDh + push word ptr [bp+dest+2] + push ax + call sub_45AD + or ax, ax + jz short loc_47C6 + sub word ptr [bp+dest], 3 + les bx, [bp+dest] + cmp byte ptr es:[bx-1], 3Ah ; ':' + jnz short loc_47AF + mov ax, word ptr [bp+dest] + dec ax + push word ptr [bp+dest+2] + push ax + push word ptr [bp+_s+2] + push word ptr [bp+_s] + nop + push cs + call near ptr sub_3B41 + add sp, 8 + or ax, ax + jz short loc_47AF + push word ptr [bp+_s+2] + push word ptr [bp+_s] + nop + push cs + call near ptr sub_318E + pop cx + pop cx + jmp loc_4849 +; --------------------------------------------------------------------------- + +loc_47AF: ; CODE XREF: sub_45E7+19Cj + ; sub_45E7+1B6j ... + push word ptr [bp+_s+2] + push word ptr [bp+_s] + dec word ptr [bp+dest] + mov ax, word ptr [bp+dest] + push word ptr [bp+dest+2] + push ax + call sub_45AD + or ax, ax + jz short loc_47AF + +loc_47C6: ; CODE XREF: sub_45E7+166j + ; sub_45E7+170j ... + cmp [bp+var_E], 0 + jz short loc_47CF + jmp loc_484F +; --------------------------------------------------------------------------- + +loc_47CF: ; CODE XREF: sub_45E7+1E3j + push word ptr [bp+_s+2] + push word ptr [bp+_s] + mov ax, word ptr [bp+dest] + dec ax + push word ptr [bp+dest+2] + push ax + call sub_45AD + or ax, ax + jz short loc_47E7 + dec word ptr [bp+dest] + +loc_47E7: ; CODE XREF: sub_45E7+1FBj + les bx, [bp+dest] + cmp byte ptr es:[bx-1], 3Ah ; ':' + jnz short loc_4815 + mov ax, word ptr [bp+dest] + dec ax + push word ptr [bp+dest+2] + push ax + push word ptr [bp+_s+2] + push word ptr [bp+_s] + nop + push cs + call near ptr sub_3B41 + add sp, 8 + or ax, ax + jz short loc_4815 + les bx, [bp+dest] + mov byte ptr es:[bx], 5Ch ; '\' + inc word ptr [bp+dest] + +loc_4815: ; CODE XREF: sub_45E7+208j + ; sub_45E7+222j + les bx, [bp+dest] + mov byte ptr es:[bx], 0 + push word ptr [bp+_s+2] + push word ptr [bp+_s] ; s + nop + push cs + call near ptr _strlen + pop cx + pop cx + inc ax + mov dx, ax + mov ax, [bp+arg_0] + or ax, [bp+arg_2] + jnz short loc_4837 + jmp loc_48BB +; --------------------------------------------------------------------------- + +loc_4837: ; CODE XREF: sub_45E7+24Bj + cmp dx, [bp+arg_8] + jbe short loc_4894 + push word ptr [bp+_s+2] + push word ptr [bp+_s] + nop + push cs + call near ptr sub_318E + pop cx + pop cx + +loc_4849: ; CODE XREF: sub_45E7+1Cj sub_45E7+AAj ... + xor dx, dx + xor ax, ax + jmp short loc_48CA +; --------------------------------------------------------------------------- + +loc_484F: ; CODE XREF: sub_45E7+1E5j + les bx, [bp+dest] + mov al, byte ptr [bp+var_E] + mov es:[bx], al + jmp short loc_488E +; --------------------------------------------------------------------------- + +loc_485A: ; CODE XREF: sub_45E7+13Ej + les bx, [bp+dest] + mov al, byte ptr [bp+var_E] + mov es:[bx], al + inc word ptr [bp+dest] + push [bp+var_E] + nop + push cs + call near ptr sub_3B1C + pop cx + or ax, ax + jnz short loc_4876 + jmp loc_470C +; --------------------------------------------------------------------------- + +loc_4876: ; CODE XREF: sub_45E7+28Aj + les bx, [bp+src] + cmp byte ptr es:[bx], 0 + jnz short loc_4882 + jmp loc_470C +; --------------------------------------------------------------------------- + +loc_4882: ; CODE XREF: sub_45E7+296j + mov al, es:[bx] + les bx, [bp+dest] + mov es:[bx], al + inc word ptr [bp+src] + +loc_488E: ; CODE XREF: sub_45E7+271j + inc word ptr [bp+dest] + jmp loc_470C +; --------------------------------------------------------------------------- + +loc_4894: ; CODE XREF: sub_45E7+253j + push word ptr [bp+_s+2] + push word ptr [bp+_s] ; src + push [bp+arg_2] + push [bp+arg_0] ; dest + nop + push cs + call near ptr _strcpy + push word ptr [bp+_s+2] + push word ptr [bp+_s] + nop + push cs + call near ptr sub_318E + add sp, 0Ch + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + jmp short loc_48CA +; --------------------------------------------------------------------------- + +loc_48BB: ; CODE XREF: sub_45E7+24Dj + push dx + push word ptr [bp+_s+2] + push word ptr [bp+_s] + nop + push cs + call near ptr sub_3428 + add sp, 6 + +loc_48CA: ; CODE XREF: sub_45E7+266j + ; sub_45E7+2D2j + pop di + pop si + mov sp, bp + pop bp + retf +sub_45E7 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_48D0 proc near ; CODE XREF: sub_4915+Fp _fgetc+82p + +var_6 = word ptr -6 +stream = dword ptr -4 + + push bp + mov bp, sp + sub sp, 6 + push si + push di + mov [bp+var_6], 14h + mov word ptr [bp+stream+2], ds + mov word ptr [bp+stream], 9FAh + jmp short loc_4905 +; --------------------------------------------------------------------------- + +loc_48E7: ; CODE XREF: sub_48D0+3Dj + les bx, [bp+stream] + mov ax, es:[bx+2] + and ax, 300h + cmp ax, 300h + jnz short loc_4901 + push word ptr [bp+stream+2] + push bx ; stream + nop + push cs + call near ptr _fflush + pop cx + pop cx + +loc_4901: ; CODE XREF: sub_48D0+24j + add word ptr [bp+stream], 14h + +loc_4905: ; CODE XREF: sub_48D0+15j + mov ax, [bp+var_6] + dec [bp+var_6] + or ax, ax + jnz short loc_48E7 + pop di + pop si + mov sp, bp + pop bp + retn +sub_48D0 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_4915 proc near ; CODE XREF: _fgetc+55p + +arg_0 = dword ptr 4 + + push bp + mov bp, sp + push si + push di + les bx, [bp+arg_0] + test byte ptr es:[bx+3], 2 + jz short loc_4927 + call sub_48D0 + +loc_4927: ; CODE XREF: sub_4915+Dj + les bx, [bp+arg_0] + push word ptr es:[bx+6] ; len + mov dx, es:[bx+0Ah] + mov ax, es:[bx+8] + mov es:[bx+0Eh], dx + mov es:[bx+0Ch], ax + push dx + push ax ; buf + mov al, es:[bx+4] + cbw + push ax ; handle + nop + push cs + call near ptr ___read + add sp, 8 + les bx, [bp+arg_0] + mov es:[bx], ax + or ax, ax + jle short loc_4961 + and word ptr es:[bx+2], 0FFDFh + xor ax, ax + jmp short loc_498A +; --------------------------------------------------------------------------- + +loc_4961: ; CODE XREF: sub_4915+41j + les bx, [bp+arg_0] + cmp word ptr es:[bx], 0 + jnz short loc_497A + mov ax, es:[bx+2] + and ax, 0FE7Fh + or ax, 20h + mov es:[bx+2], ax + jmp short loc_4987 +; --------------------------------------------------------------------------- + +loc_497A: ; CODE XREF: sub_4915+53j + les bx, [bp+arg_0] + mov word ptr es:[bx], 0 + or word ptr es:[bx+2], 10h + +loc_4987: ; CODE XREF: sub_4915+63j + mov ax, 0FFFFh + +loc_498A: ; CODE XREF: sub_4915+4Aj + pop di + pop si + pop bp + retn 4 +sub_4915 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl _fgetc(FILE *stream) +__fgetc proc far ; CODE XREF: sub_41ED+F6p seg009:044BP ... + +stream = dword ptr 6 + + push bp + mov bp, sp + push si + push di + les bx, [bp+stream] + inc word ptr es:[bx] + push word ptr [bp+stream+2] + push bx ; stream + push cs + call near ptr _fgetc + pop cx + pop cx + pop di + pop si + pop bp + retf +__fgetc endp + +; --------------------------------------------------------------------------- + +__Nfgetc: + pop ax + push cs + push ax + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl fgetc(FILE *stream) +_fgetc proc far ; CODE XREF: __fgetc+10p _fgetchar+8p + +stream = dword ptr 6 + + push bp + mov bp, sp + push si + push di + mov ax, word ptr [bp+stream] + or ax, word ptr [bp+stream+2] + jnz short loc_49BC + jmp loc_4A7E +; --------------------------------------------------------------------------- + +loc_49BC: ; CODE XREF: _fgetc+Bj + les bx, [bp+stream] + cmp word ptr es:[bx], 0 + jle short loc_49CA + dec word ptr es:[bx] + jmp short loc_4A0E +; --------------------------------------------------------------------------- + +loc_49CA: ; CODE XREF: _fgetc+17j + les bx, [bp+stream] + cmp word ptr es:[bx], 0 + jl short loc_49E2 + test word ptr es:[bx+2], 110h + jnz short loc_49E2 + test byte ptr es:[bx+2], 1 + jnz short loc_49ED + +loc_49E2: ; CODE XREF: _fgetc+25j _fgetc+2Dj + les bx, [bp+stream] + or word ptr es:[bx+2], 10h + jmp loc_4A7E +; --------------------------------------------------------------------------- + +loc_49ED: ; CODE XREF: _fgetc+34j + les bx, [bp+stream] + or word ptr es:[bx+2], 80h + cmp word ptr es:[bx+6], 0 + jz short loc_4A24 + push word ptr [bp+stream+2] + push bx + call sub_4915 + or ax, ax + jnz short loc_4A7E + les bx, [bp+stream] + dec word ptr es:[bx] + +loc_4A0E: ; CODE XREF: _fgetc+1Cj + les bx, [bp+stream] + mov dx, es:[bx+0Eh] + mov si, es:[bx+0Ch] + inc word ptr es:[bx+0Ch] + mov es, dx + mov al, es:[si] + jmp short loc_4A9F +; --------------------------------------------------------------------------- + +loc_4A24: ; CODE XREF: _fgetc+4Fj _fgetc+E6j + les bx, [bp+stream] + test byte ptr es:[bx+3], 2 + jz short loc_4A31 + call sub_48D0 + +loc_4A31: ; CODE XREF: _fgetc+80j + mov ax, 1 + push ax ; len + push ds + mov ax, 1D1Ch + push ax ; buf + les bx, [bp+stream] + mov al, es:[bx+4] + cbw + push ax ; handle + nop + push cs + call near ptr ___read + add sp, 8 + or ax, ax + jnz short loc_4A83 + les bx, [bp+stream] + mov al, es:[bx+4] + cbw + push ax ; handle + nop + push cs + call near ptr _eof + pop cx + cmp ax, 1 + jz short loc_4A6D + les bx, [bp+stream] + or word ptr es:[bx+2], 10h + jmp short loc_4A7E +; --------------------------------------------------------------------------- + +loc_4A6D: ; CODE XREF: _fgetc+B5j + les bx, [bp+stream] + mov ax, es:[bx+2] + and ax, 0FE7Fh + or ax, 20h + mov es:[bx+2], ax + +loc_4A7E: ; CODE XREF: _fgetc+Dj _fgetc+3Ej ... + mov ax, 0FFFFh + jmp short loc_4AA1 +; --------------------------------------------------------------------------- + +loc_4A83: ; CODE XREF: _fgetc+A1j + cmp byte_13FAC, 0Dh + jnz short loc_4A94 + les bx, [bp+stream] + test byte ptr es:[bx+2], 40h + jz short loc_4A24 + +loc_4A94: ; CODE XREF: _fgetc+DCj + les bx, [bp+stream] + and word ptr es:[bx+2], 0FFDFh + mov al, byte_13FAC + +loc_4A9F: ; CODE XREF: _fgetc+76j + mov ah, 0 + +loc_4AA1: ; CODE XREF: _fgetc+D5j + pop di + pop si + pop bp + retf +_fgetc endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +; int fgetchar(void) +_fgetchar proc far + push si + push di + push ds + mov ax, 9FAh + push ax ; stream + push cs + call near ptr _fgetc + pop cx + pop cx + pop di + pop si + retf +_fgetchar endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; char *__cdecl _getdcwd(int drive, char *buf, int len) +__getdcwd proc far ; CODE XREF: sub_45E7+93p sub_5407+17p + +_s = byte ptr -48h +var_47 = byte ptr -47h +var_46 = byte ptr -46h +var_45 = byte ptr -45h +var_2 = word ptr -2 +drive = word ptr 6 +dest = dword ptr 8 +len = word ptr 0Ch + + push bp + mov bp, sp + sub sp, 48h + push si + push di + mov ax, [bp+drive] + mov [bp+var_2], ax + or ax, ax + jnz short loc_4AD1 + mov ah, 19h + int 21h ; DOS - GET DEFAULT DISK NUMBER + mov ah, 0 + inc ax + mov [bp+var_2], ax + +loc_4AD1: ; CODE XREF: __getdcwd+10j + mov al, byte ptr [bp+var_2] + add al, 40h ; '@' + mov [bp+_s], al + mov [bp+var_47], 3Ah ; ':' + mov [bp+var_46], 5Ch ; '\' + push ds + mov ax, ss + mov ds, ax + lea si, [bp+var_45] + mov ah, 47h ; 'G' + mov dl, byte ptr [bp+var_2] + int 21h ; DOS - 2+ - GET CURRENT DIRECTORY + ; DL = drive (0=default, 1=A, etc.) + ; DS:SI points to 64-byte buffer area + pop ds + jb short loc_4B2D + push ss + lea ax, [bp+_s] + push ax ; s + nop + push cs + call near ptr _strlen + pop cx + pop cx + cmp ax, [bp+len] + jb short loc_4B0C + mov word_1230E, 22h ; '"' + jmp short loc_4B2D +; --------------------------------------------------------------------------- + +loc_4B0C: ; CODE XREF: __getdcwd+4Dj + mov ax, word ptr [bp+dest] + or ax, word ptr [bp+dest+2] + jnz short loc_4B33 + push [bp+len] + nop + push cs + call near ptr sub_32C1 + pop cx + mov word ptr [bp+dest+2], dx + mov word ptr [bp+dest], ax + or ax, dx + jnz short loc_4B33 + mov word_1230E, 8 + +loc_4B2D: ; CODE XREF: __getdcwd+3Cj + ; __getdcwd+55j + xor dx, dx + xor ax, ax + jmp short loc_4B4C +; --------------------------------------------------------------------------- + +loc_4B33: ; CODE XREF: __getdcwd+5Dj + ; __getdcwd+70j + push ss + lea ax, [bp+_s] + push ax ; src + push word ptr [bp+dest+2] + push word ptr [bp+dest] ; dest + nop + push cs + call near ptr _strcpy +__getdcwd endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +sub_4B43 proc far ; CODE XREF: sub_656E+77p sub_656E+A1p ... + add sp, 8 + mov dx, [bp+0Ah] + mov ax, [bp+8] + +loc_4B4C: ; CODE XREF: __getdcwd+7Cj + pop di + pop si + mov sp, bp + pop bp + retf +sub_4B43 endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; char *__cdecl getenv(const char *name) +_getenv proc far ; CODE XREF: __searchenv+10p + ; sub_9F6A+126p + +var_4 = dword ptr -4 +_name = dword ptr 6 + + push bp + mov bp, sp + sub sp, 4 + push si + push di + les di, [bp+_name] + mov ax, es + or ax, di + jz short loc_4B83 + mov al, 0 + mov ah, es:[di] + mov cx, 0FFFFh + cld + repne scasb + not cx + dec cx + jz short loc_4B83 + les di, dword_13232 + mov word ptr [bp+var_4+2], es + mov bx, es + or bx, di + mov word ptr [bp+var_4], di + jnz short loc_4B90 + +loc_4B83: ; CODE XREF: _getenv+Fj _getenv+1Fj ... + xor dx, dx + xor ax, ax + jmp short loc_4BBC +; --------------------------------------------------------------------------- + +loc_4B89: ; CODE XREF: _getenv+50j _getenv+58j ... + add word ptr [bp+var_4], 4 + les di, [bp+var_4] + +loc_4B90: ; CODE XREF: _getenv+2Fj + les di, es:[di] + mov bx, es + or bx, di + jz short loc_4B83 + mov al, es:[di] + or al, al + jz short loc_4B83 + cmp ah, al + jnz short loc_4B89 + mov bx, cx + cmp byte ptr es:[bx+di], 3Dh ; '=' + jnz short loc_4B89 + push ds + lds si, [bp+_name] + repe cmpsb + pop ds + xchg cx, bx + jnz short loc_4B89 + inc di + mov ax, di + mov dx, es + +loc_4BBC: ; CODE XREF: _getenv+35j + pop di + pop si + mov sp, bp + pop bp + retf +_getenv endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl memcmp(const void *s1, const void *s2, size_t n) +_memcmp proc far ; CODE XREF: __CurrExcContext+39p + ; sub_A240+4EP ... + +s1 = dword ptr 6 +s2 = dword ptr 0Ah +n = word ptr 0Eh + + push bp + mov bp, sp + push si + push di + push ds + mov ax, [bp+n] + mov cx, ax + jcxz short loc_4BE3 + lds si, [bp+s1] + les di, [bp+s2] + cld + repe cmpsb + mov al, [si-1] + xor ah, ah + mov cl, es:[di-1] + xor ch, ch + +loc_4BE3: ; CODE XREF: _memcmp+Bj + pop ds + sub ax, cx + pop di + pop si + pop bp + retf +_memcmp endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; void *__cdecl memcpy(void *dest, const void *src, size_t n) +_memcpy proc far ; CODE XREF: _stpcpy+28p __FPUTN+117p ... + +dest = dword ptr 6 +src = dword ptr 0Ah +n = word ptr 0Eh + + push bp + mov bp, sp + push si + push di + mov dx, ds + les di, [bp+dest] + lds si, [bp+src] + mov cx, [bp+n] + shr cx, 1 + cld + rep movsw + jnb short loc_4C02 + movsb + +loc_4C02: ; CODE XREF: _memcpy+15j + mov ds, dx + mov dx, word ptr [bp+dest+2] + mov ax, word ptr [bp+dest] + pop di + pop si + pop bp + retf +_memcpy endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; void __cdecl setmem(void *dest, unsigned int length, char value) +_setmem proc far ; CODE XREF: _memset+12p + +dest = dword ptr 6 +_length = word ptr 0Ah +value = byte ptr 0Ch + + push bp + mov bp, sp + push si + push di + les di, [bp+dest] + mov cx, [bp+_length] + mov al, [bp+value] + mov ah, al + cld + test di, 1 + jz short loc_4C29 + jcxz short loc_4C30 + stosb + dec cx + +loc_4C29: ; CODE XREF: _setmem+15j + shr cx, 1 + rep stosw + jnb short loc_4C30 + stosb + +loc_4C30: ; CODE XREF: _setmem+17j _setmem+1Fj + pop di + pop si + pop bp + retf +_setmem endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; void *__cdecl memset(void *s, int c, size_t n) +_memset proc near ; CODE XREF: sub_783F+CFp sub_BB12+1CP ... + +dest = dword ptr 6 +value = byte ptr 0Ah +_length = word ptr 0Ch + + push bp + mov bp, sp + push si + push di + push word ptr [bp+value] ; value + push [bp+_length] ; length + push word ptr [bp+dest+2] + push word ptr [bp+dest] ; dest + push cs + call near ptr _setmem + add sp, 8 +_memset endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +sub_4C4C proc far ; CODE XREF: sub_9F6A+22Fp + mov dx, [bp+8] + mov ax, [bp+6] + pop di + pop si + pop bp + retf +sub_4C4C endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; void __cdecl movmem(const void *src, void *dest, unsigned int length) +_movmem proc far ; CODE XREF: _memmove+15p + +src = dword ptr 6 +dest = dword ptr 0Ah +_length = word ptr 0Eh + + push bp + mov bp, sp + push si + push di + push ds + mov cx, word ptr [bp+dest+2] + mov bx, word ptr [bp+dest] + mov dx, word ptr [bp+src+2] + mov ax, word ptr [bp+src] + call N_PCMP@ + jnb short loc_4C73 + std + mov ax, 1 + jmp short loc_4C76 +; --------------------------------------------------------------------------- + +loc_4C73: ; CODE XREF: _movmem+15j + cld + xor ax, ax + +loc_4C76: ; CODE XREF: _movmem+1Bj + lds si, [bp+src] + les di, [bp+dest] + mov cx, [bp+_length] + or ax, ax + jz short loc_4C89 + add si, cx + dec si + add di, cx + dec di + +loc_4C89: ; CODE XREF: _movmem+2Bj + test di, 1 + jz short loc_4C93 + jcxz short loc_4CA2 + movsb + dec cx + +loc_4C93: ; CODE XREF: _movmem+37j + sub si, ax + sub di, ax + shr cx, 1 + rep movsw + jnb short loc_4CA2 + add si, ax + add di, ax + movsb + +loc_4CA2: ; CODE XREF: _movmem+39j _movmem+45j + cld + pop ds + pop di + pop si + pop bp + retf +_movmem endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; void *__cdecl memmove(void *dest, const void *src, size_t n) +_memmove proc far ; CODE XREF: seg015:098EP seg015:09B7P + +dest = dword ptr 6 +src = dword ptr 0Ah +_length = word ptr 0Eh + + push bp + mov bp, sp + push si + push di + push [bp+_length] ; length + push word ptr [bp+dest+2] + push word ptr [bp+dest] ; dest + push word ptr [bp+src+2] + push word ptr [bp+src] ; src + push cs + call near ptr _movmem + add sp, 0Ah + mov dx, word ptr [bp+dest+2] + mov ax, word ptr [bp+dest] + pop di + pop si + pop bp + retf +_memmove endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_4CCD proc near ; CODE XREF: _open+87p _open+B8p + +arg_0 = word ptr 4 +arg_2 = dword ptr 6 + + push bp + mov bp, sp + push si + push di + push ds + mov cx, [bp+arg_0] + mov ah, 3Ch ; '<' + lds dx, [bp+arg_2] + int 21h ; DOS - 2+ - CREATE A FILE WITH HANDLE (CREAT) + ; CX = attributes for file + ; DS:DX -> ASCIZ filename (may include drive and path) + pop ds + jb short loc_4CE2 + jmp short loc_4CE6 +; --------------------------------------------------------------------------- + +loc_4CE2: ; CODE XREF: sub_4CCD+11j + push ax + call __IOERROR + +loc_4CE6: ; CODE XREF: sub_4CCD+13j + pop di + pop si + pop bp + retn 6 +sub_4CCD endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_4CEC proc near ; CODE XREF: _open+123p + +arg_0 = word ptr 4 + + push bp + mov bp, sp + push si + push di + mov bx, [bp+arg_0] + sub cx, cx + sub dx, dx + mov ah, 40h + int 21h ; DOS - 2+ - WRITE TO FILE WITH HANDLE + ; BX = file handle, CX = number of bytes to write, DS:DX -> buffer + pop di + pop si + pop bp + retn 2 +sub_4CEC endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int open(const char *path, int access, ...) +_open proc far ; CODE XREF: __OPENFP+3Fp sub_E450+15P + +handle = word ptr -8 +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +_path = dword ptr 6 +access = word ptr 0Ah +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + sub sp, 8 + push si + push di + test byte ptr [bp+access+1], 0C0h + jnz short loc_4D19 + mov ax, word_12E44 + and ax, 0C000h + or [bp+0Ah], ax + +loc_4D19: ; CODE XREF: _open+Cj + mov ax, word_1230E + mov [bp+var_6], ax + xor ax, ax + push ax ; func + push word ptr [bp+_path+2] + push word ptr [bp+_path] ; pathname + nop + push cs + call near ptr __chmod + add sp, 6 + mov [bp+var_2], ax + mov ax, [bp+var_6] + mov word_1230E, ax + test byte ptr [bp+access+1], 1 + jnz short loc_4D42 + jmp loc_4DCA +; --------------------------------------------------------------------------- + +loc_4D42: ; CODE XREF: _open+3Bj + mov ax, word_12E46 + and [bp+arg_6], ax + mov ax, [bp+arg_6] + test ax, 180h + jnz short loc_4D57 + mov ax, 1 + push ax + call __IOERROR + +loc_4D57: ; CODE XREF: _open+4Cj + cmp [bp+var_2], 0FFFFh + jnz short loc_4D96 + cmp word_12E4A, 2 + jz short loc_4D6A + push word_12E4A + jmp short loc_4DA0 +; --------------------------------------------------------------------------- + +loc_4D6A: ; CODE XREF: _open+60j + test byte ptr [bp+arg_6], 80h + jz short loc_4D74 + xor ax, ax + jmp short loc_4D77 +; --------------------------------------------------------------------------- + +loc_4D74: ; CODE XREF: _open+6Cj + mov ax, 1 + +loc_4D77: ; CODE XREF: _open+70j + mov [bp+var_2], ax + test byte ptr [bp+access], 0F0h + jz short loc_4DB1 + push word ptr [bp+_path+2] + push word ptr [bp+_path] + xor ax, ax + push ax + call sub_4CCD + mov [bp+handle], ax + or ax, ax + jge short loc_4DA6 + jmp loc_4E8F +; --------------------------------------------------------------------------- + +loc_4D96: ; CODE XREF: _open+59j + test byte ptr [bp+access+1], 4 + jz short loc_4DCA + mov ax, 50h ; 'P' + push ax + +loc_4DA0: ; CODE XREF: _open+66j + call __IOERROR + jmp loc_4E92 +; --------------------------------------------------------------------------- + +loc_4DA6: ; CODE XREF: _open+8Fj + push [bp+handle] ; handle + nop + push cs + call near ptr __rtl_close + pop cx + jmp short loc_4DCA +; --------------------------------------------------------------------------- + +loc_4DB1: ; CODE XREF: _open+7Cj + push word ptr [bp+_path+2] + push word ptr [bp+_path] + push [bp+var_2] + call sub_4CCD + mov [bp+handle], ax + or ax, ax + jl short loc_4DC7 + jmp loc_4E4D +; --------------------------------------------------------------------------- + +loc_4DC7: ; CODE XREF: _open+C0j + jmp loc_4E8F +; --------------------------------------------------------------------------- + +loc_4DCA: ; CODE XREF: _open+3Dj _open+98j ... + push [bp+access] + push word ptr [bp+_path+2] + push word ptr [bp+_path] + nop + push cs + call near ptr sub_4E98 + add sp, 6 + mov [bp+handle], ax + or ax, ax + jl short loc_4E4D + xor ax, ax + push ax ; func + push [bp+handle] ; handle + nop + push cs + call near ptr _ioctl + pop cx + pop cx + mov [bp+var_4], ax + test al, 80h + jz short loc_4E1C + or [bp+access], 2000h + test byte ptr [bp+access+1], 80h + jz short loc_4E28 + and ax, 0FFh + or ax, 20h + xor dx, dx + push dx + push ax + mov ax, 1 + push ax ; func + push [bp+handle] ; handle + nop + push cs + call near ptr _ioctl + add sp, 8 + jmp short loc_4E28 +; --------------------------------------------------------------------------- + +loc_4E1C: ; CODE XREF: _open+F2j + test byte ptr [bp+access+1], 2 + jz short loc_4E28 + push [bp+handle] + call sub_4CEC + +loc_4E28: ; CODE XREF: _open+FDj _open+118j ... + test byte ptr [bp+var_2], 1 + jz short loc_4E4D + test byte ptr [bp+access+1], 1 + jz short loc_4E4D + test byte ptr [bp+access], 0F0h + jz short loc_4E4D + mov ax, 1 + push ax + push ax ; func + push word ptr [bp+_path+2] + push word ptr [bp+_path] ; pathname + nop + push cs + call near ptr __chmod + add sp, 8 + +loc_4E4D: ; CODE XREF: _open+C2j _open+DEj ... + cmp [bp+handle], 0 + jl short loc_4E8F + mov word ptr off_12C86+2, seg seg000 + mov word ptr off_12C86, 2CB0h + test byte ptr [bp+access+1], 3 + jz short loc_4E6A + mov ax, 1000h + jmp short loc_4E6C +; --------------------------------------------------------------------------- + +loc_4E6A: ; CODE XREF: _open+161j + xor ax, ax + +loc_4E6C: ; CODE XREF: _open+166j + mov dx, [bp+access] + and dx, 0F8FFh + or ax, dx + push ax + test byte ptr [bp+var_2], 1 + jz short loc_4E80 + xor ax, ax + jmp short loc_4E83 +; --------------------------------------------------------------------------- + +loc_4E80: ; CODE XREF: _open+178j + mov ax, 100h + +loc_4E83: ; CODE XREF: _open+17Cj + pop dx + or dx, ax + mov bx, [bp+handle] + add bx, bx + mov [bx+0B8Ch], dx + +loc_4E8F: ; CODE XREF: _open+91j _open:loc_4DC7j ... + mov ax, [bp+handle] + +loc_4E92: ; CODE XREF: _open+A1j + pop di + pop si + mov sp, bp + pop bp + retf +_open endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_4E98 proc far ; CODE XREF: _open+D3p seg000:4EFAp + +var_2 = word ptr -2 +arg_0 = dword ptr 6 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + sub sp, 2 + push si + push di + mov al, 1 + mov cx, [bp+arg_4] + test cx, 2 + jnz short loc_4EB5 + mov al, 2 + test cx, 4 + jnz short loc_4EB5 + mov al, 0 + +loc_4EB5: ; CODE XREF: sub_4E98+11j sub_4E98+19j + push ds + lds dx, [bp+arg_0] + mov cl, 0F0h ; '' + and cl, byte ptr [bp+arg_4] + or al, cl + mov ah, 3Dh + int 21h ; DOS - 2+ - OPEN DISK FILE WITH HANDLE + ; DS:DX -> ASCIZ filename + ; AL = access mode + ; 0 - read, 1 - write, 2 - read & write + pop ds + jb short loc_4EE1 + mov [bp+var_2], ax + mov ax, [bp+arg_4] + and ax, 0B8FFh + or ax, 8000h + mov bx, [bp+var_2] + add bx, bx + mov [bx+0B8Ch], ax + mov ax, [bp+var_2] + jmp short loc_4EE5 +; --------------------------------------------------------------------------- + +loc_4EE1: ; CODE XREF: sub_4E98+2Dj + push ax + call __IOERROR + +loc_4EE5: ; CODE XREF: sub_4E98+47j + pop di + pop si + mov sp, bp + pop bp + retf +sub_4E98 endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + push word ptr [bp+0Ah] + push word ptr [bp+8] + push word ptr [bp+6] + push cs + call near ptr sub_4E98 + add sp, 6 + pop di + pop si + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int printf(const char *format, ...) +_printf proc far ; CODE XREF: _main:loc_B25DP + +_format = word ptr 6 +arg_2 = word ptr 8 +arg_4 = byte ptr 0Ah + + push bp + mov bp, sp + push si + push di + mov ax, 50E6h + push ax + push ds + mov ax, 0A0Eh + push ax + push [bp+arg_2] + push [bp+_format] + lea ax, [bp+arg_4] + push ax + call __VPRINTER + pop di + pop si + pop bp + retf +_printf endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl _fputc(char c, FILE *stream) +__fputc proc far ; CODE XREF: __FPUTN+1C6p + +c = byte ptr 6 +stream = dword ptr 8 + + push bp + mov bp, sp + push si + push di + les bx, [bp+stream] + dec word ptr es:[bx] + push word ptr [bp+stream+2] + push bx ; stream + mov al, [bp+c] + cbw + push ax ; c + nop + push cs + call near ptr _fputc + add sp, 6 + pop di + pop si + pop bp + retf +__fputc endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl fputc(int c, FILE *stream) +_fputc proc far ; CODE XREF: __fputc+16p _fputchar+Ep ... + +c = byte ptr 6 +stream = dword ptr 8 + + push bp + mov bp, sp + push si + push di + mov al, [bp+c] + mov byte_13FAE, al + les bx, [bp+stream] + cmp word ptr es:[bx], 0FFFFh + jge short loc_4FA0 + inc word ptr es:[bx] + mov dx, es:[bx+0Eh] + mov si, es:[bx+0Ch] + inc word ptr es:[bx+0Ch] + mov es, dx + mov es:[si], al + mov es, word ptr [bp+stream+2] + test byte ptr es:[bx+2], 8 + jnz short loc_4F78 + jmp loc_50C5 +; --------------------------------------------------------------------------- + +loc_4F78: ; CODE XREF: _fputc+30j + cmp byte_13FAE, 0Ah + jz short loc_4F89 + cmp byte_13FAE, 0Dh + jz short loc_4F89 + jmp loc_50C5 +; --------------------------------------------------------------------------- + +loc_4F89: ; CODE XREF: _fputc+3Aj _fputc+41j + push word ptr [bp+stream+2] + push word ptr [bp+stream] ; stream + nop + push cs + call near ptr _fflush + pop cx + pop cx + or ax, ax + jnz short loc_4F9D + jmp loc_50C5 +; --------------------------------------------------------------------------- + +loc_4F9D: ; CODE XREF: _fputc+55j + jmp loc_50C0 +; --------------------------------------------------------------------------- + +loc_4FA0: ; CODE XREF: _fputc+12j + les bx, [bp+stream] + test byte ptr es:[bx+2], 90h + jnz short loc_4FB1 + test byte ptr es:[bx+2], 2 + jnz short loc_4FBC + +loc_4FB1: ; CODE XREF: _fputc+65j + les bx, [bp+stream] + or word ptr es:[bx+2], 10h + jmp loc_50C0 +; --------------------------------------------------------------------------- + +loc_4FBC: ; CODE XREF: _fputc+6Cj + les bx, [bp+stream] + or word ptr es:[bx+2], 100h + cmp word ptr es:[bx+6], 0 + jz short loc_5039 + cmp word ptr es:[bx], 0 + jz short loc_4FE4 + push word ptr [bp+stream+2] + push bx ; stream + nop + push cs + call near ptr _fflush + pop cx + pop cx + or ax, ax + jz short loc_4FE4 + jmp loc_50C0 +; --------------------------------------------------------------------------- + +loc_4FE4: ; CODE XREF: _fputc+8Dj _fputc+9Cj + les bx, [bp+stream] + mov ax, es:[bx+6] + neg ax + mov es:[bx], ax + mov dx, es:[bx+0Eh] + mov si, es:[bx+0Ch] + inc word ptr es:[bx+0Ch] + mov al, byte_13FAE + mov es, dx + mov es:[si], al + mov es, word ptr [bp+stream+2] + test byte ptr es:[bx+2], 8 + jnz short loc_5011 + jmp loc_50C5 +; --------------------------------------------------------------------------- + +loc_5011: ; CODE XREF: _fputc+C9j + cmp byte_13FAE, 0Ah + jz short loc_5022 + cmp byte_13FAE, 0Dh + jz short loc_5022 + jmp loc_50C5 +; --------------------------------------------------------------------------- + +loc_5022: ; CODE XREF: _fputc+D3j _fputc+DAj + push word ptr [bp+stream+2] + push word ptr [bp+stream] ; stream + nop + push cs + call near ptr _fflush + pop cx + pop cx + or ax, ax + jnz short loc_5036 + jmp loc_50C5 +; --------------------------------------------------------------------------- + +loc_5036: ; CODE XREF: _fputc+EEj + jmp loc_50C0 +; --------------------------------------------------------------------------- + +loc_5039: ; CODE XREF: _fputc+87j + les bx, [bp+stream] + mov al, es:[bx+4] + cbw + add ax, ax + mov bx, ax + test byte ptr [bx+0B8Dh], 8 + jz short loc_5065 + mov ax, 2 + push ax ; fromwhere + xor ax, ax + push ax + push ax ; offset + mov bx, word ptr [bp+stream] + mov al, es:[bx+4] + cbw + push ax ; handle + nop + push cs + call near ptr _lseek + add sp, 8 + +loc_5065: ; CODE XREF: _fputc+107j + cmp byte_13FAE, 0Ah + jnz short loc_5092 + les bx, [bp+stream] + test byte ptr es:[bx+2], 40h + jnz short loc_5092 + mov ax, 1 + push ax ; len + push ds + mov ax, 0F42h + push ax ; buf + mov al, es:[bx+4] + cbw + push ax ; handle + nop + push cs + call near ptr __rtl_write + add sp, 8 + cmp ax, 1 + jnz short loc_50B1 + +loc_5092: ; CODE XREF: _fputc+127j _fputc+131j + mov ax, 1 + push ax ; len + push ds + mov ax, 1D1Eh + push ax ; buf + les bx, [bp+stream] + mov al, es:[bx+4] + cbw + push ax ; handle + nop + push cs + call near ptr __rtl_write + add sp, 8 + cmp ax, 1 + jz short loc_50C5 + +loc_50B1: ; CODE XREF: _fputc+14Dj + les bx, [bp+stream] + test byte ptr es:[bx+3], 2 + jnz short loc_50C5 + or word ptr es:[bx+2], 10h + +loc_50C0: ; CODE XREF: _fputc:loc_4F9Dj + ; _fputc+76j ... + mov ax, 0FFFFh + jmp short loc_50CA +; --------------------------------------------------------------------------- + +loc_50C5: ; CODE XREF: _fputc+32j _fputc+43j ... + mov al, byte_13FAE + mov ah, 0 + +loc_50CA: ; CODE XREF: _fputc+180j + pop di + pop si + pop bp + retf +_fputc endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl fputchar(int c) +_fputchar proc far + +c = word ptr 6 + + push bp + mov bp, sp + push si + push di + push ds + mov ax, 0A0Eh + push ax ; stream + push [bp+c] ; c + push cs + call near ptr _fputc + add sp, 6 + pop di + pop si + pop bp + retf +_fputchar endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __stdcall _FPUTN(FILE *stream, size_t len, void *buf) +__FPUTN proc near ; CODE XREF: _fputs+37p + +var_2 = word ptr -2 +stream = dword ptr 4 +len = word ptr 8 +buf = dword ptr 0Ah + + push bp + mov bp, sp + sub sp, 2 + push si + push di + mov ax, [bp+len] + mov [bp+var_2], ax + les bx, [bp+stream] + test byte ptr es:[bx+2], 8 + jz short loc_512D + jmp short loc_5120 +; --------------------------------------------------------------------------- + +loc_5100: ; CODE XREF: __FPUTN+42j + push word ptr [bp+stream+2] + push word ptr [bp+stream] ; stream + les bx, [bp+buf] + inc word ptr [bp+buf] + mov al, es:[bx] + cbw + push ax ; c + push cs + call near ptr _fputc + add sp, 6 + cmp ax, 0FFFFh + jnz short loc_5120 + jmp loc_52E2 +; --------------------------------------------------------------------------- + +loc_5120: ; CODE XREF: __FPUTN+18j __FPUTN+35j + mov ax, [bp+len] + dec [bp+len] + or ax, ax + jnz short loc_5100 + jmp loc_52E6 +; --------------------------------------------------------------------------- + +loc_512D: ; CODE XREF: __FPUTN+16j + les bx, [bp+stream] + test byte ptr es:[bx+2], 40h + jnz short loc_513A + jmp loc_5269 +; --------------------------------------------------------------------------- + +loc_513A: ; CODE XREF: __FPUTN+4Fj + cmp word ptr es:[bx+6], 0 + jnz short loc_5144 + jmp loc_5219 +; --------------------------------------------------------------------------- + +loc_5144: ; CODE XREF: __FPUTN+59j + mov ax, es:[bx+6] + cmp ax, [bp+len] + jnb short loc_51B6 + cmp word ptr es:[bx], 0 + jz short loc_5165 + push word ptr [bp+stream+2] + push bx ; stream + nop + push cs + call near ptr _fflush + pop cx + pop cx + or ax, ax + jz short loc_5165 + jmp loc_52E2 +; --------------------------------------------------------------------------- + +loc_5165: ; CODE XREF: __FPUTN+6Bj __FPUTN+7Aj + les bx, [bp+stream] + mov al, es:[bx+4] + cbw + add ax, ax + mov bx, ax + test byte ptr [bx+0B8Dh], 8 + jz short loc_5191 + mov ax, 2 + push ax ; fromwhere + xor ax, ax + push ax + push ax ; offset + mov bx, word ptr [bp+stream] + mov al, es:[bx+4] + cbw + push ax ; handle + nop + push cs + call near ptr _lseek + add sp, 8 + +loc_5191: ; CODE XREF: __FPUTN+90j + push [bp+len] ; len + push word ptr [bp+buf+2] + push word ptr [bp+buf] ; buf + les bx, [bp+stream] + mov al, es:[bx+4] + cbw + push ax ; handle + nop + push cs + call near ptr __rtl_write + add sp, 8 + cmp ax, [bp+len] + jnz short loc_51B3 + jmp loc_52E6 +; --------------------------------------------------------------------------- + +loc_51B3: ; CODE XREF: __FPUTN+C8j + jmp loc_52E2 +; --------------------------------------------------------------------------- + +loc_51B6: ; CODE XREF: __FPUTN+65j + les bx, [bp+stream] + mov ax, es:[bx] + add ax, [bp+len] + jl short loc_51E7 + cmp word ptr es:[bx], 0 + jnz short loc_51D3 + mov ax, 0FFFFh + sub ax, es:[bx+6] + mov es:[bx], ax + jmp short loc_51E7 +; --------------------------------------------------------------------------- + +loc_51D3: ; CODE XREF: __FPUTN+DFj + push word ptr [bp+stream+2] + push word ptr [bp+stream] ; stream + nop + push cs + call near ptr _fflush + pop cx + pop cx + or ax, ax + jz short loc_51E7 + jmp loc_52E2 +; --------------------------------------------------------------------------- + +loc_51E7: ; CODE XREF: __FPUTN+D9j __FPUTN+EBj ... + push [bp+len] ; n + push word ptr [bp+buf+2] + push word ptr [bp+buf] ; src + les bx, [bp+stream] + push word ptr es:[bx+0Eh] + push word ptr es:[bx+0Ch] ; dest + nop + push cs + call near ptr _memcpy + add sp, 0Ah + les bx, [bp+stream] + mov ax, es:[bx] + add ax, [bp+len] + mov es:[bx], ax + mov ax, [bp+len] + add es:[bx+0Ch], ax + jmp loc_52E6 +; --------------------------------------------------------------------------- + +loc_5219: ; CODE XREF: __FPUTN+5Bj + les bx, [bp+stream] + mov al, es:[bx+4] + cbw + add ax, ax + mov bx, ax + test byte ptr [bx+0B8Dh], 8 + jz short loc_5245 + mov ax, 2 + push ax ; fromwhere + xor ax, ax + push ax + push ax ; offset + mov bx, word ptr [bp+stream] + mov al, es:[bx+4] + cbw + push ax ; handle + nop + push cs + call near ptr _lseek + add sp, 8 + +loc_5245: ; CODE XREF: __FPUTN+144j + push [bp+len] ; len + push word ptr [bp+buf+2] + push word ptr [bp+buf] ; buf + les bx, [bp+stream] + mov al, es:[bx+4] + cbw + push ax ; handle + nop + push cs + call near ptr __rtl_write + add sp, 8 + cmp ax, [bp+len] + jnz short loc_5267 + jmp loc_52E6 +; --------------------------------------------------------------------------- + +loc_5267: ; CODE XREF: __FPUTN+17Cj + jmp short loc_52E2 +; --------------------------------------------------------------------------- + +loc_5269: ; CODE XREF: __FPUTN+51j + les bx, [bp+stream] + cmp word ptr es:[bx+6], 0 + jz short loc_52C3 + jmp short loc_52B7 +; --------------------------------------------------------------------------- + +loc_5275: ; CODE XREF: __FPUTN+1D9j + les bx, [bp+stream] + inc word ptr es:[bx] + jge short loc_529B + mov dx, es:[bx+0Eh] + mov si, es:[bx+0Ch] + inc word ptr es:[bx+0Ch] + les bx, [bp+buf] + inc word ptr [bp+buf] + mov al, es:[bx] + mov es, dx + mov es:[si], al + mov ah, 0 + jmp short loc_52B2 +; --------------------------------------------------------------------------- + +loc_529B: ; CODE XREF: __FPUTN+195j + push word ptr [bp+stream+2] + push word ptr [bp+stream] ; stream + les bx, [bp+buf] + inc word ptr [bp+buf] + mov al, es:[bx] + push ax ; c + push cs + call near ptr __fputc + add sp, 6 + +loc_52B2: ; CODE XREF: __FPUTN+1B3j + cmp ax, 0FFFFh + jz short loc_52E2 + +loc_52B7: ; CODE XREF: __FPUTN+18Dj + mov ax, [bp+len] + dec [bp+len] + or ax, ax + jnz short loc_5275 + jmp short loc_52E6 +; --------------------------------------------------------------------------- + +loc_52C3: ; CODE XREF: __FPUTN+18Bj + push [bp+len] ; len + push word ptr [bp+buf+2] + push word ptr [bp+buf] ; buf + les bx, [bp+stream] + mov al, es:[bx+4] + cbw + push ax ; handle + nop + push cs + call near ptr ___write + add sp, 8 + cmp ax, [bp+len] + jz short loc_52E6 + +loc_52E2: ; CODE XREF: __FPUTN+37j __FPUTN+7Cj ... + xor ax, ax + jmp short loc_52E9 +; --------------------------------------------------------------------------- + +loc_52E6: ; CODE XREF: __FPUTN+44j __FPUTN+CAj ... + mov ax, [bp+var_2] + +loc_52E9: ; CODE XREF: __FPUTN+1FEj + pop di + pop si + mov sp, bp + pop bp + retn 0Ah +__FPUTN endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl __far __read(int handle, void *buf, unsigned int len) +___read proc far ; CODE XREF: sub_4915+33p _fgetc+99p + +var_3 = byte ptr -3 +var_2 = word ptr -2 +handle = word ptr 6 +buf = dword ptr 8 +len = word ptr 0Ch + + push bp + mov bp, sp + sub sp, 4 + push si + push di + mov ax, [bp+handle] + cmp ax, word_12E1A + jb short loc_530C + mov ax, 6 + push ax + call __IOERROR + jmp loc_53BA +; --------------------------------------------------------------------------- + +loc_530C: ; CODE XREF: ___read+Fj + mov ax, [bp+len] + inc ax + cmp ax, 2 + jb short loc_5321 + mov bx, [bp+handle] + add bx, bx + test byte ptr [bx+0B8Dh], 2 + jz short loc_5326 + +loc_5321: ; CODE XREF: ___read+22j + xor ax, ax + jmp loc_53BA +; --------------------------------------------------------------------------- + +loc_5326: ; CODE XREF: ___read+2Ej ___read+A0j + push [bp+len] ; len + push word ptr [bp+buf+2] + push word ptr [bp+buf] ; buf + push [bp+handle] ; handle + nop + push cs + call near ptr __rtl_read + add sp, 8 + mov [bp+var_2], ax + inc ax + cmp ax, 2 + jb short loc_534F + mov bx, [bp+handle] + add bx, bx + test byte ptr [bx+0B8Dh], 40h + jnz short loc_5354 + +loc_534F: ; CODE XREF: ___read+50j + mov ax, [bp+var_2] + jmp short loc_53BA +; --------------------------------------------------------------------------- + +loc_5354: ; CODE XREF: ___read+5Cj + mov cx, [bp+var_2] + les si, [bp+buf] + mov di, si + mov bx, si + cld + +loc_535F: ; CODE XREF: ___read+79j + ; ___read:loc_536Ej + lods byte ptr es:[si] + cmp al, 1Ah + jz short loc_5395 + cmp al, 0Dh + jz short loc_536E + stosb + loop loc_535F + jmp short loc_538D +; --------------------------------------------------------------------------- + +loc_536E: ; CODE XREF: ___read+76j + loop loc_535F + push es + push bx + mov ax, 1 + push ax ; len + lea ax, [bp+var_3] + push ss + push ax ; buf + push [bp+handle] ; handle + nop + push cs + call near ptr __read + add sp, 8 + pop bx + pop es + cld + mov al, [bp+var_3] + stosb + +loc_538D: ; CODE XREF: ___read+7Bj + cmp di, bx + jnz short loc_5393 + jmp short loc_5326 +; --------------------------------------------------------------------------- + +loc_5393: ; CODE XREF: ___read+9Ej + jmp short loc_53B7 +; --------------------------------------------------------------------------- + +loc_5395: ; CODE XREF: ___read+72j + push bx + mov ax, 1 + push ax ; fromwhere + neg cx + sbb ax, ax + push ax + push cx ; offset + push [bp+handle] ; handle + nop + push cs + call near ptr _lseek + add sp, 8 + mov bx, [bp+handle] + add bx, bx + or word ptr [bx+0B8Ch], 200h + pop bx + +loc_53B7: ; CODE XREF: ___read:loc_5393j + sub di, bx + xchg ax, di + +loc_53BA: ; CODE XREF: ___read+18j ___read+32j ... + pop di + pop si + mov sp, bp + pop bp + retf +___read endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; void __cdecl _searchenv(const char *file, const char *varname, char *pathname) +__searchenv proc far ; CODE XREF: sub_9EE1+43p + +var_4 = dword ptr -4 +src = dword ptr 6 +varname = dword ptr 0Ah +pathname = dword ptr 0Eh + + push bp + mov bp, sp + sub sp, 4 + push si + push di + push word ptr [bp+varname+2] + push word ptr [bp+varname] ; name + nop + push cs + call near ptr _getenv + pop cx + pop cx + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + or ax, dx + jnz short loc_53E7 + mov word ptr [bp+var_4+2], ds + mov word ptr [bp+var_4], 0F44h + +loc_53E7: ; CODE XREF: __searchenv+1Dj + push word ptr [bp+pathname+2] + push word ptr [bp+pathname] ; pathname + push word ptr [bp+var_4+2] + push word ptr [bp+var_4] ; __int32 + push word ptr [bp+src+2] + push word ptr [bp+src] ; src + nop + push cs + call near ptr sub_5407 + add sp, 0Ch + pop di + pop si + mov sp, bp + pop bp + retf +__searchenv endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +; int __cdecl __far sub_5407(char *src, __int32, char *pathname) +sub_5407 proc far ; CODE XREF: __searchenv+3Bp + +var_4 = word ptr -4 +var_2 = word ptr -2 +src = dword ptr 6 +arg_4 = dword ptr 0Ah +pathname = dword ptr 0Eh + + push bp + mov bp, sp + sub sp, 4 + push si + push di + mov ax, 50h ; 'P' + push ax ; len + push word ptr [bp+pathname+2] + push word ptr [bp+pathname] ; buf + xor ax, ax + push ax ; drive + nop + push cs + call near ptr __getdcwd + add sp, 8 + or ax, dx + jnz short loc_542C + xor dx, dx + jmp short loc_543B +; --------------------------------------------------------------------------- + +loc_542C: ; CODE XREF: sub_5407+1Fj + push word ptr [bp+pathname+2] + push word ptr [bp+pathname] ; s + nop + push cs + call near ptr _strlen + pop cx + pop cx + mov dx, ax + +loc_543B: ; CODE XREF: sub_5407+23j sub_5407+F4j ... + les bx, [bp+pathname] + add bx, dx + mov byte ptr es:[bx], 0 + or dx, dx + jz short loc_5490 + mov bx, dx + add bx, word ptr [bp+pathname] + mov bl, es:[bx-1] + mov al, bl + cmp al, 5Ch ; '\' + jz short loc_5461 + cmp bl, 2Fh ; '/' + jz short loc_5461 + cmp bl, 3Ah ; ':' + jnz short loc_547D + +loc_5461: ; CODE XREF: sub_5407+4Ej sub_5407+53j + mov ax, word ptr [bp+pathname] + add ax, dx + dec ax + push word ptr [bp+pathname+2] + push ax + push word ptr [bp+pathname+2] + push word ptr [bp+pathname] + nop + push cs + call near ptr sub_3B41 + add sp, 8 + or ax, ax + jnz short loc_5490 + +loc_547D: ; CODE XREF: sub_5407+58j + push ds + mov ax, 0F46h + push ax ; src + push word ptr [bp+pathname+2] + push word ptr [bp+pathname] ; dest + nop + push cs + call near ptr _strcat + add sp, 8 + +loc_5490: ; CODE XREF: sub_5407+3Fj sub_5407+74j + push word ptr [bp+src+2] + push word ptr [bp+src] ; src + push word ptr [bp+pathname+2] + push word ptr [bp+pathname] ; dest + nop + push cs + call near ptr _strcat + add sp, 8 + xor ax, ax + push ax ; char + push word ptr [bp+pathname+2] + push word ptr [bp+pathname] ; pathname + nop + push cs + call near ptr __access + add sp, 6 + or ax, ax + jz short loc_5504 + les bx, [bp+arg_4] + cmp byte ptr es:[bx], 0 + jnz short loc_54CB + les bx, [bp+pathname] + mov byte ptr es:[bx], 0 + jmp short loc_5543 +; --------------------------------------------------------------------------- + +loc_54CB: ; CODE XREF: sub_5407+B9j + xor dx, dx + jmp short loc_54E3 +; --------------------------------------------------------------------------- + +loc_54CF: ; CODE XREF: sub_5407+E9j + les bx, [bp+pathname] + add bx, dx + push es + les si, [bp+arg_4] + mov al, es:[si] + pop es + mov es:[bx], al + inc word ptr [bp+arg_4] + inc dx + +loc_54E3: ; CODE XREF: sub_5407+C6j + les bx, [bp+arg_4] + cmp byte ptr es:[bx], 3Bh ; ';' + jz short loc_54F2 + cmp byte ptr es:[bx], 0 + jnz short loc_54CF + +loc_54F2: ; CODE XREF: sub_5407+E3j + les bx, [bp+arg_4] + cmp byte ptr es:[bx], 0 + jnz short loc_54FE + jmp loc_543B +; --------------------------------------------------------------------------- + +loc_54FE: ; CODE XREF: sub_5407+F2j + inc word ptr [bp+arg_4] + jmp loc_543B +; --------------------------------------------------------------------------- + +loc_5504: ; CODE XREF: sub_5407+B0j + mov ax, 50h ; 'P' + push ax + push word ptr [bp+pathname+2] + push word ptr [bp+pathname] + xor ax, ax + push ax + push ax + nop + push cs + call near ptr sub_45E7 + add sp, 0Ah + mov [bp+var_2], dx + mov [bp+var_4], ax + or ax, dx + jz short loc_5543 + push [bp+var_2] + push [bp+var_4] ; src + push word ptr [bp+pathname+2] + push word ptr [bp+pathname] ; dest + nop + push cs + call near ptr _strcpy + push [bp+var_2] + push [bp+var_4] + nop + push cs + call near ptr sub_318E + add sp, 0Ch + +loc_5543: ; CODE XREF: sub_5407+C2j + ; sub_5407+11Bj + pop di + pop si + mov sp, bp + pop bp + retf +sub_5407 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl setvbuf(FILE *stream, char *buf, int type, size_t size) +_setvbuf proc near ; CODE XREF: seg000:273Dp seg000:2776p ... + +stream = dword ptr 4 +buf = dword ptr 8 +_type = word ptr 0Ch +_size = word ptr 0Eh + + push bp + mov bp, sp + push si + push di +_setvbuf endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +sub_554E proc far ; CODE XREF: sub_9F6A+22Fp + les bx, [bp+6] + mov ax, es:[bx+12h] + cmp ax, [bp+6] + jz short loc_555D + jmp loc_5634 +; --------------------------------------------------------------------------- + +loc_555D: ; CODE XREF: sub_554E+Aj + cmp word ptr [bp+0Eh], 2 + jle short loc_5566 + jmp loc_5634 +; --------------------------------------------------------------------------- + +loc_5566: ; CODE XREF: sub_554E+13j + cmp word ptr [bp+10h], 7FFFh + jbe short loc_5570 + jmp loc_5634 +; --------------------------------------------------------------------------- + +loc_5570: ; CODE XREF: sub_554E+1Dj + cmp word_131DA, 0 + jnz short loc_5586 + cmp word ptr [bp+6], 0A0Eh + jnz short loc_5586 + mov word_131DA, 1 + jmp short loc_559A +; --------------------------------------------------------------------------- + +loc_5586: ; CODE XREF: sub_554E+27j sub_554E+2Ej + cmp word_131D8, 0 + jnz short loc_559A + cmp word ptr [bp+6], 9FAh + jnz short loc_559A + mov word_131D8, 1 + +loc_559A: ; CODE XREF: sub_554E+36j sub_554E+3Dj ... + les bx, [bp+6] + cmp word ptr es:[bx], 0 + jz short loc_55B7 + mov ax, 1 + push ax ; whence + xor ax, ax + push ax + push ax ; offset + push word ptr [bp+8] + push bx ; stream + nop + push cs + call near ptr _fseek + add sp, 0Ah + +loc_55B7: ; CODE XREF: sub_554E+53j + les bx, [bp+6] + test byte ptr es:[bx+2], 4 + jz short loc_55D0 + push word ptr es:[bx+0Ah] + push word ptr es:[bx+8] + nop + push cs + call near ptr sub_318E + pop cx + pop cx + +loc_55D0: ; CODE XREF: sub_554E+71j + les bx, [bp+6] + and word ptr es:[bx+2], 0FFF3h + mov word ptr es:[bx+6], 0 + mov dx, [bp+8] + mov ax, [bp+6] + add ax, 5 + mov es:[bx+0Ah], dx + mov es:[bx+8], ax + mov es:[bx+0Eh], dx + mov es:[bx+0Ch], ax + cmp word ptr [bp+0Eh], 2 + jz short loc_5664 + cmp word ptr [bp+10h], 0 + jbe short loc_5664 + mov word ptr off_12C7E+2, seg seg000 + mov word ptr off_12C7E, 5A44h + mov ax, [bp+0Ah] + or ax, [bp+0Ch] + jnz short loc_5639 + push word ptr [bp+10h] + nop + push cs + call near ptr sub_32C1 + pop cx + mov [bp+0Ch], dx + mov [bp+0Ah], ax + or ax, dx + jz short loc_5634 + les bx, [bp+6] + or word ptr es:[bx+2], 4 + jmp short loc_5639 +; --------------------------------------------------------------------------- + +loc_5634: ; CODE XREF: sub_554E+Cj sub_554E+15j ... + mov ax, 0FFFFh + jmp short loc_5666 +; --------------------------------------------------------------------------- + +loc_5639: ; CODE XREF: sub_554E+C7j sub_554E+E4j + les bx, [bp+6] + mov dx, [bp+0Ch] + mov ax, [bp+0Ah] + mov es:[bx+0Eh], dx + mov es:[bx+0Ch], ax + mov es:[bx+0Ah], dx + mov es:[bx+8], ax + mov ax, [bp+10h] + mov es:[bx+6], ax + cmp word ptr [bp+0Eh], 1 + jnz short loc_5664 + or word ptr es:[bx+2], 8 + +loc_5664: ; CODE XREF: sub_554E+ADj sub_554E+B3j ... + xor ax, ax + +loc_5666: ; CODE XREF: sub_554E+E9j + pop di + pop si + pop bp + retf +sub_554E endp ; sp-analysis failed + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + push word ptr [bp+8] + push word ptr [bp+0Ch] + push word ptr [bp+0Ah] + les bx, [bp+4] + push word ptr es:[bx+2] + push word ptr es:[bx] + nop + push cs + call near ptr _memcpy + add sp, 0Ah + mov ax, [bp+8] + les bx, [bp+4] + add es:[bx], ax + push bx + push es + mov es, word ptr es:[bx+2] + mov ax, es + pop es + pop bx + mov bx, es:[bx] + mov es, ax + mov byte ptr es:[bx], 0 + mov ax, [bp+8] + pop di + pop si + pop bp + retn 0Ah + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int sprintf(char *buffer, const char *format, ...) +_sprintf proc far + +buffer = dword ptr 6 +_format = dword ptr 0Ah +arg_8 = byte ptr 0Eh + + push bp + mov bp, sp + push si + push di + les bx, [bp+buffer] + mov byte ptr es:[bx], 0 + mov ax, 566Ah + push ax + push ss + lea ax, [bp+buffer] + push ax + push word ptr [bp+_format+2] + push word ptr [bp+_format] + lea ax, [bp+arg_8] + push ax + call __VPRINTER + pop di + pop si + pop bp + retf +_sprintf endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl vsprintf(char *buffer, const char *format, void *arglist) +_vsprintf proc far ; CODE XREF: seg004:02F6P seg005:0150P ... + +buffer = dword ptr 6 +_format = word ptr 0Ah +arg_6 = word ptr 0Ch +arglist = word ptr 0Eh + + push bp + mov bp, sp + push si + push di + les bx, [bp+buffer] + mov byte ptr es:[bx], 0 + mov ax, 566Ah + push ax + push ss + lea ax, [bp+buffer] + push ax + push [bp+arg_6] + push [bp+_format] + push [bp+arglist] + call __VPRINTER + pop di + pop si + pop bp + retf +_vsprintf endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; char *__cdecl strcat(char *dest, const char *src) +_strcat proc far ; CODE XREF: __MKNAME+4Fp sub_5407+83p ... + +dest = dword ptr 6 +src = dword ptr 0Ah + + push bp + mov bp, sp + push si + push di + cld + push ds + les di, [bp+dest] + mov dx, di + xor al, al + mov cx, 0FFFFh + repne scasb + push es + lea si, [di-1] + les di, [bp+src] + mov cx, 0FFFFh + repne scasb + not cx + sub di, cx + push es + pop ds + pop es + xchg si, di + test si, 1 + jz short loc_572A + movsb + dec cx + +loc_572A: ; CODE XREF: _strcat+2Cj + shr cx, 1 + rep movsw + jnb short loc_5731 + movsb + +loc_5731: ; CODE XREF: _strcat+34j + xchg ax, dx + mov dx, es + pop ds + pop di + pop si + pop bp + retf +_strcat endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl strcmp(const char *s1, const char *s2) +_strcmp proc far ; CODE XREF: typeinfo::before(typeinfo &)+61p + ; sub_E3E5+55P + +s1 = dword ptr 6 +s2 = dword ptr 0Ah + + push bp + mov bp, sp + push si + push di + mov dx, ds + cld + xor ax, ax + mov bx, ax + les di, [bp+s2] + mov si, di + xor al, al + mov cx, 0FFFFh + repne scasb + not cx + mov di, si + lds si, [bp+s1] + repe cmpsb + mov al, [si-1] + mov bl, es:[di-1] + sub ax, bx + mov ds, dx + pop di + pop si + pop bp + retf +_strcmp endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; char *__cdecl strcpy(char *dest, const char *src) +_strcpy proc far ; CODE XREF: sub_45E7+10Dp + ; sub_45E7+2BBp ... + +dest = dword ptr 6 +src = dword ptr 0Ah + + push bp + mov bp, sp + push si + push di + cld + les di, [bp+src] + mov si, di + xor al, al + mov cx, 0FFFFh + repne scasb + not cx + push ds + mov ax, es + mov ds, ax + les di, [bp+dest] + rep movsb + pop ds + mov dx, word ptr [bp+dest+2] + mov ax, word ptr [bp+dest] + pop di + pop si + pop bp + retf +_strcpy endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl stricmp(const char *s1, const char *s2) +_stricmp proc far ; CODE XREF: sub_9F6A+9Cp + +s1 = dword ptr 6 +s2 = dword ptr 0Ah + + push bp + mov bp, sp + push si + push di + mov dx, ds + cld + lds si, [bp+s1] + les di, [bp+s2] + xor ax, ax + mov bx, ax + mov cx, 617Ah + +loc_57A7: ; CODE XREF: _stricmp+1Ej _stricmp+37j + lodsb + mov bl, es:[di] + or al, al + jz short loc_57CB + scasb + jz short loc_57A7 + cmp al, ch + jb short loc_57BC + cmp al, cl + ja short loc_57BC + sub al, 20h ; ' ' + +loc_57BC: ; CODE XREF: _stricmp+22j _stricmp+26j + cmp bl, ch + jb short loc_57C7 + cmp bl, cl + ja short loc_57C7 + sub bl, 20h ; ' ' + +loc_57C7: ; CODE XREF: _stricmp+2Cj _stricmp+30j + cmp al, bl + jz short loc_57A7 + +loc_57CB: ; CODE XREF: _stricmp+1Bj + sub ax, bx + mov ds, dx + pop di + pop si + pop bp + retf +_stricmp endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; size_t __cdecl strlen(const char *s) +_strlen proc far ; CODE XREF: _stpcpy+10p __DOSENV+34p ... + +_s = dword ptr 6 + + push bp + mov bp, sp + push si + push di + les di, [bp+_s] + xor ax, ax + cmp ax, word ptr [bp+_s+2] + jnz short loc_57E6 + cmp ax, di + jz short loc_57F0 + +loc_57E6: ; CODE XREF: _strlen+Dj + cld + mov cx, 0FFFFh + repne scasb + xchg ax, cx + not ax + dec ax + +loc_57F0: ; CODE XREF: _strlen+11j + pop di + pop si + pop bp + retf +_strlen endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +; int __cdecl __far sub_57F4(char *s, char) +sub_57F4 proc far ; CODE XREF: sub_9F6A+5Ap + +var_4 = dword ptr -4 +_s = dword ptr 6 +arg_4 = byte ptr 0Ah + + push bp + mov bp, sp + sub sp, 4 + push si + push di + push word ptr [bp+_s+2] + push word ptr [bp+_s] ; s + nop + push cs + call near ptr _strlen + pop cx + pop cx + inc ax + mov cx, ax + mov dx, word ptr [bp+_s+2] + mov ax, word ptr [bp+_s] + add ax, cx + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + jmp short loc_5833 +; --------------------------------------------------------------------------- + +loc_581C: ; CODE XREF: sub_57F4+41j + dec word ptr [bp+var_4] + les bx, [bp+var_4] + mov al, es:[bx] + cmp al, [bp+arg_4] + jnz short loc_5832 + mov dx, word ptr [bp+var_4+2] + mov ax, word ptr [bp+var_4] + jmp short loc_583B +; --------------------------------------------------------------------------- + +loc_5832: ; CODE XREF: sub_57F4+34j + dec cx + +loc_5833: ; CODE XREF: sub_57F4+26j + or cx, cx + jnz short loc_581C + xor dx, dx + xor ax, ax + +loc_583B: ; CODE XREF: sub_57F4+3Cj + pop di + pop si + mov sp, bp + pop bp + retf +sub_57F4 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl __far __write(int handle, void *buf, unsigned int len) +___write proc far ; CODE XREF: _fflush+AAp __FPUTN+1F1p + +var_90 = byte ptr -90h +var_E = dword ptr -0Eh +var_9 = byte ptr -9 +var_8 = word ptr -8 +var_6 = dword ptr -6 +var_2 = word ptr -2 +handle = word ptr 6 +buf = dword ptr 8 +len = word ptr 0Ch + + push bp + mov bp, sp + sub sp, 90h + push si + push di + mov ax, [bp+handle] + cmp ax, word_12E1A + jb short loc_585D + mov ax, 6 + push ax + call __IOERROR + jmp loc_59A1 +; --------------------------------------------------------------------------- + +loc_585D: ; CODE XREF: ___write+10j + mov ax, [bp+len] + inc ax + cmp ax, 2 + jnb short loc_586B + xor ax, ax + jmp loc_59A1 +; --------------------------------------------------------------------------- + +loc_586B: ; CODE XREF: ___write+23j + mov bx, [bp+handle] + add bx, bx + test byte ptr [bx+0B8Dh], 8 + jz short loc_588A + mov ax, 2 + push ax ; fromwhere + xor ax, ax + push ax + push ax ; offset + push [bp+handle] ; handle + nop + push cs + call near ptr _lseek + add sp, 8 + +loc_588A: ; CODE XREF: ___write+34j + mov bx, [bp+handle] + add bx, bx + test byte ptr [bx+0B8Dh], 40h + jnz short loc_58AD + push [bp+len] ; len + push word ptr [bp+buf+2] + push word ptr [bp+buf] ; buf + push [bp+handle] ; handle + nop + push cs + call near ptr __rtl_write + add sp, 8 + jmp loc_59A1 +; --------------------------------------------------------------------------- + +loc_58AD: ; CODE XREF: ___write+53j + mov bx, [bp+handle] + add bx, bx + and word ptr [bx+0B8Ch], 0FDFFh + mov dx, word ptr [bp+buf+2] + mov ax, word ptr [bp+buf] + mov word ptr [bp+var_E+2], dx + mov word ptr [bp+var_E], ax + mov ax, [bp+len] + mov [bp+var_8], ax + jmp short loc_5947 +; --------------------------------------------------------------------------- + +loc_58CC: ; CODE XREF: ___write+116j + dec [bp+var_8] + les bx, [bp+var_E] + inc word ptr [bp+var_E] + mov al, es:[bx] + mov [bp+var_9], al + cmp al, 0Ah + jnz short loc_58E9 + les bx, [bp+var_6] + mov byte ptr es:[bx], 0Dh + inc word ptr [bp+var_6] + +loc_58E9: ; CODE XREF: ___write+9Cj + les bx, [bp+var_6] + mov al, [bp+var_9] + mov es:[bx], al + inc word ptr [bp+var_6] + lea ax, [bp+var_90] + mov dx, word ptr [bp+var_6] + xor bx, bx + sub dx, ax + sbb bx, 0 + or bx, bx + jl short loc_5951 + jnz short loc_590F + cmp dx, 80h ; '' + jb short loc_5951 + +loc_590F: ; CODE XREF: ___write+C6j + lea ax, [bp+var_90] + mov dx, word ptr [bp+var_6] + xor bx, bx + sub dx, ax + sbb bx, 0 + mov [bp+var_2], dx + push dx ; len + push ss + push ax ; buf + push [bp+handle] ; handle + nop + push cs + call near ptr __rtl_write + add sp, 8 + mov dx, ax + cmp ax, [bp+var_2] + jz short loc_5947 + cmp dx, 0FFFFh + jnz short loc_593F + mov ax, 0FFFFh + jmp short loc_599C +; --------------------------------------------------------------------------- + +loc_593F: ; CODE XREF: ___write+F7j + mov ax, [bp+len] + sub ax, [bp+var_8] + jmp short loc_5997 +; --------------------------------------------------------------------------- + +loc_5947: ; CODE XREF: ___write+89j ___write+F2j + lea ax, [bp+var_90] + mov word ptr [bp+var_6+2], ss + mov word ptr [bp+var_6], ax + +loc_5951: ; CODE XREF: ___write+C4j ___write+CCj + cmp [bp+var_8], 0 + jz short loc_595A + jmp loc_58CC +; --------------------------------------------------------------------------- + +loc_595A: ; CODE XREF: ___write+114j + lea ax, [bp+var_90] + mov dx, word ptr [bp+var_6] + xor bx, bx + sub dx, ax + sbb bx, 0 + mov [bp+var_2], dx + mov ax, dx + or ax, ax + jbe short loc_599E + push dx ; len + push ss + lea ax, [bp+var_90] + push ax ; buf + push [bp+handle] ; handle + nop + push cs + call near ptr __rtl_write + add sp, 8 + mov dx, ax + cmp ax, [bp+var_2] + jz short loc_599E + cmp dx, 0FFFFh + jnz short loc_5994 + mov ax, 0FFFFh + jmp short loc_599C +; --------------------------------------------------------------------------- + +loc_5994: ; CODE XREF: ___write+14Cj + mov ax, [bp+len] + +loc_5997: ; CODE XREF: ___write+104j + add ax, dx + sub ax, [bp+var_2] + +loc_599C: ; CODE XREF: ___write+FCj + ; ___write+151j + jmp short loc_59A1 +; --------------------------------------------------------------------------- + +loc_599E: ; CODE XREF: ___write+12Ej + ; ___write+147j + mov ax, [bp+len] + +loc_59A1: ; CODE XREF: ___write+19j ___write+27j ... + pop di + pop si + mov sp, bp + pop bp + retf +___write endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl _rtl_write(int handle, const void *buf, unsigned int len) +__rtl_write proc far ; CODE XREF: ___ErrorMessage+20p + ; _fputc+144p ... + +handle = word ptr 6 +buf = dword ptr 8 +len = word ptr 0Ch + + push bp + mov bp, sp + push si + push di + mov bx, [bp+handle] + add bx, bx + test byte ptr [bx+0B8Ch], 1 + jz short loc_59BE + mov ax, 5 + push ax + jmp short loc_59DF +; --------------------------------------------------------------------------- + +loc_59BE: ; CODE XREF: __rtl_write+Fj + push ds + mov ah, 40h ; '@' + mov bx, [bp+handle] + mov cx, [bp+len] + lds dx, [bp+buf] + int 21h ; DOS - 2+ - WRITE TO FILE WITH HANDLE + ; BX = file handle, CX = number of bytes to write, DS:DX -> buffer + pop ds + jb short loc_59DE + push ax + mov bx, [bp+handle] + add bx, bx + or word ptr [bx+0B8Ch], 1000h + pop ax + jmp short loc_59E2 +; --------------------------------------------------------------------------- + +loc_59DE: ; CODE XREF: __rtl_write+26j + push ax + +loc_59DF: ; CODE XREF: __rtl_write+15j + call __IOERROR + +loc_59E2: ; CODE XREF: __rtl_write+35j + pop di + pop si + pop bp + retf +__rtl_write endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl _write(int handle, const void *buf, unsigned int len) +__write proc far + +handle = word ptr 6 +buf = dword ptr 8 +len = word ptr 0Ch + + push bp + mov bp, sp + push si + push di + push [bp+len] ; len + push word ptr [bp+buf+2] + push word ptr [bp+buf] ; buf + push [bp+handle] ; handle + push cs + call near ptr __rtl_write + add sp, 8 + pop di + pop si + pop bp + retf +__write endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__xfclose proc far + +var_6 = word ptr -6 +stream = dword ptr -4 + + push bp + mov bp, sp + sub sp, 6 + push si + push di + mov [bp+var_6], 0 + mov word ptr [bp+stream+2], ds + mov word ptr [bp+stream], 9FAh + jmp short loc_5A35 +; --------------------------------------------------------------------------- + +loc_5A19: ; CODE XREF: __xfclose+3Aj + les bx, [bp+stream] + test byte ptr es:[bx+2], 3 + jz short loc_5A2E + push word ptr [bp+stream+2] + push bx ; stream + nop + push cs + call near ptr _fclose + pop cx + pop cx + +loc_5A2E: ; CODE XREF: __xfclose+1Fj + add word ptr [bp+stream], 14h + inc [bp+var_6] + +loc_5A35: ; CODE XREF: __xfclose+15j + mov ax, [bp+var_6] + cmp ax, word_12E1A + jb short loc_5A19 + pop di + pop si + mov sp, bp + pop bp + retf +__xfclose endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__xfflush proc far + +var_6 = word ptr -6 +stream = dword ptr -4 + + push bp + mov bp, sp + sub sp, 6 + push si + push di + mov [bp+var_6], 4 + mov word ptr [bp+stream+2], ds + mov word ptr [bp+stream], 9FAh + jmp short loc_5A77 +; --------------------------------------------------------------------------- + +loc_5A5B: ; CODE XREF: __xfflush+37j + les bx, [bp+stream] + test byte ptr es:[bx+2], 3 + jz short loc_5A70 + push word ptr [bp+stream+2] + push bx ; stream + nop + push cs + call near ptr _fflush + pop cx + pop cx + +loc_5A70: ; CODE XREF: __xfflush+1Fj + dec [bp+var_6] + add word ptr [bp+stream], 14h + +loc_5A77: ; CODE XREF: __xfflush+15j + cmp [bp+var_6], 0 + jnz short loc_5A5B + pop di + pop si + mov sp, bp + pop bp + retf +__xfflush endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; xalloc::xalloc(string const &, unsigned int) +@xalloc@$bctr$qmx6stringui proc far ; CODE XREF: string::contains(char *)+39p + +arg_0 = dword ptr 6 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch +arg_8 = word ptr 0Eh + + push bp + mov bp, sp + push si + push di + mov ax, word ptr [bp+arg_0] + or ax, word ptr [bp+arg_0+2] + jnz short loc_5AA4 + mov ax, 6 + push ax + nop + push cs + call near ptr @$bnew$qui ; operator new(uint) + pop cx + mov word ptr [bp+arg_0+2], dx + mov word ptr [bp+arg_0], ax + or ax, dx + jz short loc_5AC2 + +loc_5AA4: ; CODE XREF: xalloc::xalloc(string &,uint)+Bj + push [bp+arg_6] + push [bp+arg_4] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + nop + push cs + call near ptr @xmsg@$bctr$qmx6string ; xmsg::xmsg(string &) + add sp, 8 + les bx, [bp+arg_0] + mov ax, [bp+arg_8] + mov es:[bx+4], ax + +loc_5AC2: ; CODE XREF: xalloc::xalloc(string &,uint)+1Fj + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + pop di + pop si + pop bp + retf +@xalloc@$bctr$qmx6stringui endp + +; --------------------------------------------------------------------------- + dd byte_5BBD + db 4 dup(0), 0BDh, 5Bh + dw seg seg000 + db 4, 0, 0FAh, 0FFh, 6 dup(0), 0DEh, 5Ah + dw seg seg000 + db 0DCh, 0FFh, 2 dup(0), 5, 3 dup(0), 0E6h, 5Ah + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; xalloc::raise(void) +@xalloc@raise$qv proc far ; CODE XREF: TStringRef::TStringRef(char *,uint,char *,uint,uint)+77P + ; sub_11E1E+4DP ... + +var_28 = dword ptr -28h +src = byte ptr -6 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + sub sp, 28h + push si + push di + mov ax, seg seg000 + mov bx, 5AF4h + nop + push cs + call near ptr ___InitExceptBlocks + xor ax, ax + push ax ; int + push ax ; int + push ax ; int + push ax ; int + mov ax, 5 + push ax ; int + mov ax, seg seg000 + push ax ; int + mov ax, 5B7Ah + push ax ; int + xor ax, ax + push ax ; int + push ax ; int + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + mov word ptr [bp+var_28+2], dx + mov word ptr [bp+var_28], ax + push dx + push ax + push ss + lea ax, [bp+src] + push ax + nop + push cs + call near ptr @xmsg@$bctr$qmx4xmsg ; xmsg::xmsg(xmsg &) + add sp, 8 + les bx, [bp+var_28] + mov ax, es:[bx+4] + mov [bp+var_2], ax + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + lea ax, [bp+src] + push ss + push ax ; src + push cs ; int + mov ax, 5BBDh + push ax ; int + nop + push cs + call near ptr @_ThrowException$qnvt1t1t1uiuiuinuc ; _ThrowException(void *,void *,void *,void *,uint,uint,uint,uchar *) + add sp, 1Ah + pop di + pop si + mov sp, bp + pop bp + retf +@xalloc@raise$qv endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + push word ptr [bp+0Ch] + push word ptr [bp+0Ah] + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr @xmsg@$bctr$qmx4xmsg ; xmsg::xmsg(xmsg &) + add sp, 8 + les bx, [bp+0Ah] + mov ax, es:[bx+4] + les bx, [bp+6] + mov es:[bx+4], ax + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + mov dx, [bp+8] + mov ax, [bp+6] + pop di + pop si + pop bp + retf +; --------------------------------------------------------------------------- +byte_5BBD db 6, 0, 3, 0, 26h, 0, 2 dup(0FFh), 7, 0, 2Eh, 0, 3Ah + ; DATA XREF: seg000:5ADEo + db 0Dh dup(0), 2, 0, 2, 0, 0FFh, 5Bh + dw seg seg000 + db 5, 0, 3Eh, 0, 78h, 61h, 2 dup(6Ch), 6Fh, 63h, 2 dup(0) + db 4Ch, 5Ch + dw seg seg000 + db 2 dup(0), 3, 0Dh dup(0) +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + mov ax, [bp+6] + or ax, [bp+8] + jz short loc_5C46 + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + xor ax, ax + push ax + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr @xmsg@$bdtr$qv ; xmsg::~xmsg(void) + add sp, 6 + test byte ptr [bp+0Ah], 1 + jz short loc_5C44 + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr _registerbgidriver + pop cx + pop cx + jmp short loc_5C48 +; --------------------------------------------------------------------------- + +loc_5C44: ; CODE XREF: seg000:5C33j + jmp short loc_5C48 +; --------------------------------------------------------------------------- + +loc_5C46: ; CODE XREF: seg000:5C0Aj + xor ax, ax + +loc_5C48: ; CODE XREF: seg000:5C42j + ; seg000:loc_5C44j + pop di + pop si + pop bp + retf +; --------------------------------------------------------------------------- + db 4, 0, 3, 0, 26h, 0, 2 dup(0FFh), 3, 0, 2Ch, 0, 30h + db 0Dh dup(0), 1, 0, 1, 0, 1Eh, 5Eh + dw seg seg000 + db 5, 0, 34h, 0, 78h, 6Dh, 73h, 67h, 0Eh dup(0), 0F2h + db 5Fh + dw seg seg000 + db 87h, 20h, 0FCh, 0FFh, 0Ah dup(0), 0DEh, 0FFh, 2 dup(0) + db 5, 3 dup(0), 2 dup(0FFh), 6, 0, 5, 3 dup(0), 84h, 5Ch + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; xmsg::xmsg(string const &) +@xmsg@$bctr$qmx6string proc far ; CODE XREF: xalloc::xalloc(string &,uint)+2Fp + ; string::assert_element(uint)+6AP ... + +var_22 = word ptr -22h +var_16 = word ptr -16h +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = dword ptr 6 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + sub sp, 22h + push si + push di + mov ax, seg seg000 + mov bx, 5C92h + nop + push cs + call near ptr ___InitExceptBlocks + mov ax, word ptr [bp+arg_0] + or ax, word ptr [bp+arg_0+2] + jnz short loc_5CD7 + mov ax, 4 + push ax + nop + push cs + call near ptr @$bnew$qui ; operator new(uint) + pop cx + mov word ptr [bp+arg_0+2], dx + mov word ptr [bp+arg_0], ax + or ax, dx + jz short loc_5D29 + +loc_5CD7: ; CODE XREF: xmsg::xmsg(string &)+19j + mov ax, 4 + push ax + nop + push cs + call near ptr @$bnew$qui ; operator new(uint) + pop cx + mov [bp+var_2], dx + mov [bp+var_4], ax + or ax, dx + jz short loc_5D19 + mov [bp+var_16], 0Eh + push [bp+arg_6] + push [bp+arg_4] + push dx + push [bp+var_4] + call @string@$bctr$qmx6string ; string::string(string &) + add sp, 8 + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + mov [bp+var_16], 6 + +loc_5D19: ; CODE XREF: xmsg::xmsg(string &)+41j + mov dx, [bp+var_2] + mov ax, [bp+var_4] + les bx, [bp+arg_0] + mov es:[bx+2], dx + mov es:[bx], ax + +loc_5D29: ; CODE XREF: xmsg::xmsg(string &)+2Dj + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + push [bp+var_22] + nop + push cs + call near ptr ___ExitExceptBlocks + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + pop di + pop si + mov sp, bp + pop bp + retf +@xmsg@$bctr$qmx6string endp + +; --------------------------------------------------------------------------- + dd byte_5FF2 + db 87h, 20h, 0FCh, 0FFh, 0Ah dup(0), 0DEh, 0FFh, 2 dup(0) + db 5, 3 dup(0), 2 dup(0FFh), 6, 0, 5, 3 dup(0), 4Fh, 5Dh + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; xmsg::xmsg(xmsg const &) +@xmsg@$bctr$qmx4xmsg proc far ; CODE XREF: seg000:2380p seg000:2448p ... + +var_22 = word ptr -22h +var_16 = word ptr -16h +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = dword ptr 6 +arg_4 = dword ptr 0Ah + + push bp + mov bp, sp + sub sp, 22h + push si + push di + mov ax, seg seg000 + mov bx, 5D5Dh + nop + push cs + call near ptr ___InitExceptBlocks + mov ax, word ptr [bp+arg_0] + or ax, word ptr [bp+arg_0+2] + jnz short loc_5DA2 + mov ax, 4 + push ax + nop + push cs + call near ptr @$bnew$qui ; operator new(uint) + pop cx + mov word ptr [bp+arg_0+2], dx + mov word ptr [bp+arg_0], ax + or ax, dx + jz short loc_5DF8 + +loc_5DA2: ; CODE XREF: xmsg::xmsg(xmsg &)+19j + mov ax, 4 + push ax + nop + push cs + call near ptr @$bnew$qui ; operator new(uint) + pop cx + mov [bp+var_2], dx + mov [bp+var_4], ax + or ax, dx + jz short loc_5DE8 + mov [bp+var_16], 0Eh + les bx, [bp+arg_4] + push word ptr es:[bx+2] + push word ptr es:[bx] + push dx + push [bp+var_4] + call @string@$bctr$qmx6string ; string::string(string &) + add sp, 8 + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + mov [bp+var_16], 6 + +loc_5DE8: ; CODE XREF: xmsg::xmsg(xmsg &)+41j + mov dx, [bp+var_2] + mov ax, [bp+var_4] + les bx, [bp+arg_0] + mov es:[bx+2], dx + mov es:[bx], ax + +loc_5DF8: ; CODE XREF: xmsg::xmsg(xmsg &)+2Dj + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + push [bp+var_22] + nop + push cs + call near ptr ___ExitExceptBlocks + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + pop di + pop si + mov sp, bp + pop bp + retf +@xmsg@$bctr$qmx4xmsg endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl __far xmsg___xmsg(void (*driver)(void), char) +@xmsg@$bdtr$qv proc far ; CODE XREF: seg000:2517p seg000:25C6p ... + +driver = dword ptr 6 +arg_4 = byte ptr 0Ah + + push bp + mov bp, sp + push si + push di + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + mov ax, word ptr [bp+driver] + or ax, word ptr [bp+driver+2] + jz short loc_5E78 + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + mov ax, 3 + push ax ; char + les bx, [bp+driver] + push word ptr es:[bx+2] + push word ptr es:[bx] ; driver + call @string@$bdtr$qv ; string::~string(void) + add sp, 6 + test [bp+arg_4], 1 + jz short loc_5E78 + push word ptr [bp+driver+2] + push word ptr [bp+driver] ; driver + nop + push cs + call near ptr _registerbgidriver + pop cx + pop cx + +loc_5E78: ; CODE XREF: xmsg::~xmsg(void)+1Dj + ; xmsg::~xmsg(void)+4Bj + pop di + pop si + pop bp + retf +@xmsg@$bdtr$qv endp + +; --------------------------------------------------------------------------- + dd byte_5FBA + db 4 dup(0), 7Ch, 5Eh + dw seg seg000 + db 0E2h, 0FFh + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; xmsg::raise(void) +@xmsg@raise$qv proc far + +src = byte ptr -22h +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + sub sp, 22h + push si + push di + mov ax, seg seg000 + mov bx, 5E84h + nop + push cs + call near ptr ___InitExceptBlocks + xor ax, ax + push ax ; int + push ax ; int + push ax ; int + push ax ; int + mov ax, 5 + push ax ; int + mov ax, seg seg000 + push ax ; int + mov ax, 5D73h + push ax ; int + xor ax, ax + push ax ; int + push ax ; int + push [bp+arg_2] + push [bp+arg_0] + push ss + lea ax, [bp+src] + push ax + push cs + call near ptr @xmsg@$bctr$qmx4xmsg ; xmsg::xmsg(xmsg &) + add sp, 8 + lea ax, [bp+src] + push ss + push ax ; src + push cs ; int + mov ax, 5FBAh + push ax ; int + nop + push cs + call near ptr @_ThrowException$qnvt1t1t1uiuiuinuc ; _ThrowException(void *,void *,void *,void *,uint,uint,uint,uchar *) + add sp, 1Ah + pop di + pop si + mov sp, bp + pop bp + retf +@xmsg@raise$qv endp + +; --------------------------------------------------------------------------- + dd byte_5FF2 + db 87h, 20h, 0FCh, 0FFh, 0Ah dup(0), 0DEh, 0FFh, 2 dup(0) + db 5, 3 dup(0), 2 dup(0FFh), 6, 0, 5, 3 dup(0), 0DDh, 5Eh + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; xmsg::operator=(xmsg const &) +@xmsg@$basg$qmx4xmsg proc far + +var_22 = word ptr -22h +var_16 = word ptr -16h +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = dword ptr 6 +arg_4 = dword ptr 0Ah + + push bp + mov bp, sp + sub sp, 22h + push si + push di + mov ax, seg seg000 + mov bx, 5EEBh + nop + push cs + call near ptr ___InitExceptBlocks + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + cmp dx, word ptr [bp+arg_4+2] + jnz short loc_5F24 + cmp ax, word ptr [bp+arg_4] + jz short loc_5FA2 + +loc_5F24: ; CODE XREF: xmsg::operator=(xmsg &)+1Cj + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + mov ax, 3 + push ax ; char + les bx, [bp+arg_0] + push word ptr es:[bx+2] + push word ptr es:[bx] ; driver + call @string@$bdtr$qv ; string::~string(void) + add sp, 6 + mov ax, 4 + push ax + nop + push cs + call near ptr @$bnew$qui ; operator new(uint) + pop cx + mov [bp+var_2], dx + mov [bp+var_4], ax + or ax, dx + jz short loc_5F92 + mov [bp+var_16], 0Eh + les bx, [bp+arg_4] + push word ptr es:[bx+2] + push word ptr es:[bx] + push dx + push [bp+var_4] + call @string@$bctr$qmx6string ; string::string(string &) + add sp, 8 + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + mov [bp+var_16], 6 + +loc_5F92: ; CODE XREF: xmsg::operator=(xmsg &)+5Dj + mov dx, [bp+var_2] + mov ax, [bp+var_4] + les bx, [bp+arg_0] + mov es:[bx+2], dx + mov es:[bx], ax + +loc_5FA2: ; CODE XREF: xmsg::operator=(xmsg &)+21j + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + push dx + push ax + push [bp+var_22] + nop + push cs + call near ptr ___ExitExceptBlocks + pop ax + pop dx + pop di + pop si + mov sp, bp + pop bp + retf +@xmsg@$basg$qmx4xmsg endp + +; --------------------------------------------------------------------------- +byte_5FBA db 4, 0, 3, 0, 26h, 0, 2 dup(0FFh), 3, 0, 2Ch, 0, 30h + ; DATA XREF: seg000:5E7Co + db 0Dh dup(0), 1, 0, 1, 0, 1Eh, 5Eh + dw seg seg000 + db 5, 0, 34h, 0, 78h, 6Dh, 73h, 67h, 0Eh dup(0) +byte_5FF2 db 4, 0, 10h, 20h, 0Ah, 0, 5, 60h ; DATA XREF: seg000:5D4Fo + ; seg000:5EDDo + dw seg seg000 +aString db 'string *',0 + db 4, 0, 3, 0, 26h, 0, 2 dup(0FFh), 3, 0, 2Eh, 0, 32h + db 0Dh dup(0), 1, 0, 1, 0, 5, 3 + dw seg seg015 + db 5, 0, 36h, 0, 73h, 74h, 72h, 69h, 6Eh, 67h, 0Eh dup(0) + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +___JumpToCatch__ proc far ; CODE XREF: __ExceptionHandler+261p + push si + push di + mov sp, bx + mov bp, cx + push dx + push ax + retf +___JumpToCatch__ endp + +; --------------------------------------------------------------------------- + pop di + pop si + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_604B proc far ; CODE XREF: typeinfo::name(void)+11p + +arg_0 = dword ptr 6 + + push bp + mov bp, sp + push si + push di + mov ax, word ptr [bp+arg_0] + or ax, word ptr [bp+arg_0+2] + jnz short loc_605F + mov dx, ds + mov ax, 0F4Eh + jmp short loc_606C +; --------------------------------------------------------------------------- + +loc_605F: ; CODE XREF: sub_604B+Bj + les bx, [bp+arg_0] + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + add ax, es:[bx+4] + +loc_606C: ; CODE XREF: sub_604B+12j + pop di + pop si + pop bp + retf +sub_604B endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_6070 proc far ; CODE XREF: sub_610D+69p + ; sub_610D+106p ... + +var_A = word ptr -0Ah +var_8 = dword ptr -8 +var_4 = dword ptr -4 +arg_0 = dword ptr 6 +arg_4 = dword ptr 0Ah + + push bp + mov bp, sp + sub sp, 0Ah + push si + push di + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + cmp dx, word ptr [bp+arg_4+2] + jnz short loc_6088 + cmp ax, word ptr [bp+arg_4] + jz short loc_6104 + +loc_6088: ; CODE XREF: sub_6070+11j + les bx, [bp+arg_0] + mov ax, es:[bx+2] + les bx, [bp+arg_4] + cmp ax, es:[bx+2] + jnz short loc_60FC + les bx, [bp+arg_0] + mov ax, es:[bx] + les bx, [bp+arg_4] + cmp ax, es:[bx] + jnz short loc_60FC + les bx, [bp+arg_0] + mov ax, es:[bx+2] + les bx, [bp+arg_4] + or ax, es:[bx+2] + test al, 80h + jnz short loc_60FC + les bx, [bp+arg_0] + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + add ax, es:[bx+4] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + les bx, [bp+arg_4] + mov dx, word ptr [bp+arg_4+2] + mov ax, word ptr [bp+arg_4] + add ax, es:[bx+4] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + +loc_60DE: ; CODE XREF: sub_6070+92j + les bx, [bp+var_4] + mov al, es:[bx] + cbw + mov dx, ax + inc word ptr [bp+var_4] + les bx, [bp+var_8] + mov al, es:[bx] + cbw + mov [bp+var_A], ax + inc word ptr [bp+var_8] + cmp dx, [bp+var_A] + jz short loc_6100 + +loc_60FC: ; CODE XREF: sub_6070+26j sub_6070+34j ... + xor ax, ax + jmp short loc_6107 +; --------------------------------------------------------------------------- + +loc_6100: ; CODE XREF: sub_6070+8Aj + or dx, dx + jnz short loc_60DE + +loc_6104: ; CODE XREF: sub_6070+16j + mov ax, 1 + +loc_6107: ; CODE XREF: sub_6070+8Ej + pop di + pop si + mov sp, bp + pop bp + retf +sub_6070 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_610D proc near ; CODE XREF: sub_610D+9Bp + ; sub_610D+135p ... + +var_A = dword ptr -0Ah +var_6 = word ptr -6 +var_4 = dword ptr -4 +arg_0 = dword ptr 4 +arg_4 = word ptr 8 +arg_6 = word ptr 0Ah +arg_8 = word ptr 0Ch +arg_A = word ptr 0Eh +arg_C = word ptr 10h + + push bp + mov bp, sp + sub sp, 0Ah + push si + push di + les bx, [bp+arg_0] + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + add ax, es:[bx+0Ch] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + +loc_6128: ; CODE XREF: sub_610D+ACj + les bx, [bp+var_4] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_A+2], dx + mov word ptr [bp+var_A], ax + mov ax, word ptr [bp+var_A] + or ax, word ptr [bp+var_A+2] + jz short loc_61BC + les bx, [bp+var_4] + test byte ptr es:[bx+6], 8 + jnz short loc_61B5 + cmp [bp+arg_C], 0 + jz short loc_6164 + les bx, [bp+var_4] + mov ax, es:[bx+6] + and ax, 3 + cmp ax, 3 + jnz short loc_6164 + mov ax, 1 + jmp short loc_6166 +; --------------------------------------------------------------------------- + +loc_6164: ; CODE XREF: sub_610D+41j sub_610D+50j + xor ax, ax + +loc_6166: ; CODE XREF: sub_610D+55j + mov [bp+var_6], ax + push word ptr [bp+var_A+2] + push word ptr [bp+var_A] + push [bp+arg_6] + push [bp+arg_4] + push cs + call near ptr sub_6070 + add sp, 8 + or ax, ax + jz short loc_6189 + cmp [bp+var_6], 0 + jz short loc_6189 + jmp loc_624C +; --------------------------------------------------------------------------- + +loc_6189: ; CODE XREF: sub_610D+71j sub_610D+77j + les bx, [bp+var_A] + test byte ptr es:[bx+8], 4 + jz short loc_61B5 + push [bp+var_6] + push [bp+arg_A] + push [bp+arg_8] + push [bp+arg_6] + push [bp+arg_4] + push word ptr [bp+var_A+2] + push word ptr [bp+var_A] + call sub_610D + add sp, 0Eh + or ax, ax + jz short loc_61B5 + jmp loc_624C +; --------------------------------------------------------------------------- + +loc_61B5: ; CODE XREF: sub_610D+3Bj sub_610D+84j ... + add word ptr [bp+var_4], 8 + jmp loc_6128 +; --------------------------------------------------------------------------- + +loc_61BC: ; CODE XREF: sub_610D+31j + les bx, [bp+arg_0] + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + add ax, es:[bx+0Ah] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + +loc_61CF: ; CODE XREF: sub_610D+148j + les bx, [bp+var_4] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_A+2], dx + mov word ptr [bp+var_A], ax + mov ax, word ptr [bp+var_A] + or ax, word ptr [bp+var_A+2] + jz short loc_6258 + cmp [bp+arg_C], 0 + jz short loc_6201 + les bx, [bp+var_4] + mov ax, es:[bx+6] + and ax, 3 + cmp ax, 3 + jnz short loc_6201 + mov ax, 1 + jmp short loc_6203 +; --------------------------------------------------------------------------- + +loc_6201: ; CODE XREF: sub_610D+DEj sub_610D+EDj + xor ax, ax + +loc_6203: ; CODE XREF: sub_610D+F2j + mov [bp+var_6], ax + push word ptr [bp+var_A+2] + push word ptr [bp+var_A] + push [bp+arg_6] + push [bp+arg_4] + push cs + call near ptr sub_6070 + add sp, 8 + or ax, ax + jz short loc_6223 + cmp [bp+var_6], 0 + jnz short loc_624C + +loc_6223: ; CODE XREF: sub_610D+10Ej + les bx, [bp+var_A] + test byte ptr es:[bx+8], 4 + jz short loc_6251 + push [bp+var_6] + push [bp+arg_A] + push [bp+arg_8] + push [bp+arg_6] + push [bp+arg_4] + push word ptr [bp+var_A+2] + push word ptr [bp+var_A] + call sub_610D + add sp, 0Eh + or ax, ax + jz short loc_6251 + +loc_624C: ; CODE XREF: sub_610D+79j sub_610D+A5j ... + mov ax, 1 + jmp short loc_625A +; --------------------------------------------------------------------------- + +loc_6251: ; CODE XREF: sub_610D+11Ej + ; sub_610D+13Dj + add word ptr [bp+var_4], 8 + jmp loc_61CF +; --------------------------------------------------------------------------- + +loc_6258: ; CODE XREF: sub_610D+D8j + xor ax, ax + +loc_625A: ; CODE XREF: sub_610D+142j + pop di + pop si + mov sp, bp + pop bp + retn +sub_610D endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_6260 proc near ; CODE XREF: sub_6469+1Dp sub_6469+5Fp ... + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = dword ptr 4 +arg_4 = dword ptr 8 +arg_8 = word ptr 0Ch +arg_A = word ptr 0Eh +arg_C = word ptr 10h + + push bp + mov bp, sp + sub sp, 4 + push si + push di + mov cx, [bp+arg_8] + +loc_626B: ; CODE XREF: sub_6260+119j + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + cmp dx, word ptr [bp+arg_4+2] + jnz short loc_627E + cmp ax, word ptr [bp+arg_4] + jnz short loc_627E + jmp loc_6393 +; --------------------------------------------------------------------------- + +loc_627E: ; CODE XREF: sub_6260+14j sub_6260+19j + les bx, [bp+arg_0] + mov ax, es:[bx+2] + mov [bp+var_2], ax + les bx, [bp+arg_4] + mov ax, es:[bx+2] + mov [bp+var_4], ax + mov ax, [bp+var_2] + and ax, [bp+var_4] + test al, 10h + jz short loc_630E + and [bp+var_2], 3300h + and [bp+var_4], 3300h + mov ax, [bp+var_2] + cmp ax, [bp+var_4] + jnz short loc_62B1 + jmp loc_6354 +; --------------------------------------------------------------------------- + +loc_62B1: ; CODE XREF: sub_6260+4Cj + or cx, cx + jz short loc_62B8 + jmp loc_63CC +; --------------------------------------------------------------------------- + +loc_62B8: ; CODE XREF: sub_6260+53j + mov ax, [bp+var_2] + and ax, 300h + mov dx, [bp+var_4] + and dx, 300h + cmp ax, dx + jz short loc_62EE + mov ax, [bp+var_4] + and ax, 300h + not ax + and ax, [bp+var_2] + test ah, 3 + jz short loc_62DC + jmp loc_63CC +; --------------------------------------------------------------------------- + +loc_62DC: ; CODE XREF: sub_6260+77j + or [bp+var_2], 300h + or [bp+var_4], 300h + mov ax, [bp+var_2] + cmp ax, [bp+var_4] + jz short loc_6354 + +loc_62EE: ; CODE XREF: sub_6260+67j + mov ax, [bp+var_2] + or ax, 3000h + mov dx, [bp+var_4] + or dx, 3000h + cmp ax, dx + jz short loc_6302 + jmp loc_63CC +; --------------------------------------------------------------------------- + +loc_6302: ; CODE XREF: sub_6260+9Dj + test byte ptr [bp+var_2+1], 10h + jnz short loc_630B + jmp loc_63CC +; --------------------------------------------------------------------------- + +loc_630B: ; CODE XREF: sub_6260+A6j + jmp loc_6393 +; --------------------------------------------------------------------------- + +loc_630E: ; CODE XREF: sub_6260+3Aj + mov ax, [bp+var_2] + and ax, [bp+var_4] + test ah, 4 + jz short loc_637C + les bx, [bp+arg_0] + mov dx, es:[bx+0Ch] + mov ax, es:[bx+0Ah] + les bx, [bp+arg_4] + cmp dx, es:[bx+0Ch] + jnz short loc_6333 + cmp ax, es:[bx+0Ah] + jz short loc_6354 + +loc_6333: ; CODE XREF: sub_6260+CBj + or cx, cx + jz short loc_633A + jmp loc_63CC +; --------------------------------------------------------------------------- + +loc_633A: ; CODE XREF: sub_6260+D5j + les bx, [bp+arg_0] + mov dx, es:[bx+0Ch] + mov ax, es:[bx+0Ah] + les bx, [bp+arg_4] + or ax, es:[bx+0Ah] + or dx, es:[bx+0Ch] + or ax, dx + jnz short loc_63CC + +loc_6354: ; CODE XREF: sub_6260+4Ej sub_6260+8Cj ... + mov cx, 1 + les bx, [bp+arg_0] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+arg_0+2], dx + mov word ptr [bp+arg_0], ax + les bx, [bp+arg_4] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+arg_4+2], dx + mov word ptr [bp+arg_4], ax + jmp loc_626B +; --------------------------------------------------------------------------- + +loc_637C: ; CODE XREF: sub_6260+B7j + push word ptr [bp+arg_4+2] + push word ptr [bp+arg_4] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + push cs + call near ptr sub_6070 + add sp, 8 + or ax, ax + jz short loc_6398 + +loc_6393: ; CODE XREF: sub_6260+1Bj + ; sub_6260:loc_630Bj + mov ax, 1 + jmp short loc_63CE +; --------------------------------------------------------------------------- + +loc_6398: ; CODE XREF: sub_6260+131j + test byte ptr [bp+var_2], 2 + jz short loc_63CC + test byte ptr [bp+var_4], 1 + jz short loc_63CC + les bx, [bp+arg_0] + test byte ptr es:[bx+8], 4 + jz short loc_63CC + mov ax, 1 + push ax + push [bp+arg_C] + push [bp+arg_A] + push word ptr [bp+arg_4+2] + push word ptr [bp+arg_4] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + call sub_610D + add sp, 0Eh + jmp short loc_63CE +; --------------------------------------------------------------------------- + +loc_63CC: ; CODE XREF: sub_6260+55j sub_6260+79j ... + xor ax, ax + +loc_63CE: ; CODE XREF: sub_6260+136j + ; sub_6260+16Aj + pop di + pop si + mov sp, bp + pop bp + retn +sub_6260 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_63D4 proc far ; CODE XREF: sub_6B93+10Dp + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 + + push bp + mov bp, sp + sub sp, 4 + push si + push di + push [bp+arg_0] + nop + push cs + call near ptr sub_32C1 + pop cx + mov [bp+var_2], dx + mov [bp+var_4], ax + mov ax, [bp+var_4] + or ax, [bp+var_2] + jnz short loc_6424 + cmp [bp+arg_0], 80h ; '' + ja short loc_6406 + les bx, ss:16h + test byte ptr es:[bx+4], 1 + jz short loc_640B + +loc_6406: ; CODE XREF: sub_63D4+24j + nop + push cs + call near ptr _abort +; --------------------------------------------------------------------------- + +loc_640B: ; CODE XREF: sub_63D4+30j + les bx, ss:16h + or word ptr es:[bx+4], 1 + les bx, ss:16h + mov dx, es:[bx+22h] + mov ax, es:[bx+20h] + jmp short loc_642A +; --------------------------------------------------------------------------- + +loc_6424: ; CODE XREF: sub_63D4+1Dj + mov dx, [bp+var_2] + mov ax, [bp+var_4] + +loc_642A: ; CODE XREF: sub_63D4+4Ej + pop di + pop si + mov sp, bp + pop bp + retf +sub_63D4 endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + les bx, ss:16h + mov dx, es:[bx+22h] + mov ax, es:[bx+20h] + cmp dx, [bp+8] + jnz short loc_6458 + cmp ax, [bp+6] + jnz short loc_6458 + les bx, ss:16h + and word ptr es:[bx+4], 0FFFEh + jmp short loc_6465 +; --------------------------------------------------------------------------- + +loc_6458: ; CODE XREF: seg000:6445j seg000:644Aj + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr sub_318E + pop cx + pop cx + +loc_6465: ; CODE XREF: seg000:6456j + pop di + pop si + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_6469 proc near ; CODE XREF: sub_7CFA+58p + ; __ExceptionHandler+F7p + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = dword ptr 4 +arg_4 = word ptr 8 +arg_6 = word ptr 0Ah +arg_8 = dword ptr 0Ch +arg_C = byte ptr 10h + + push bp + mov bp, sp + sub sp, 4 + push si + push di + push [bp+arg_6] + push [bp+arg_4] + xor ax, ax + push ax + push word ptr [bp+arg_8+2] + push word ptr [bp+arg_8] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + call sub_6260 + add sp, 0Eh + or ax, ax + jz short loc_6493 + jmp loc_652F +; --------------------------------------------------------------------------- + +loc_6493: ; CODE XREF: sub_6469+25j + les bx, [bp+arg_0] + mov ax, es:[bx+2] + mov [bp+var_2], ax + les bx, [bp+arg_8] + mov ax, es:[bx+2] + mov [bp+var_4], ax + test byte ptr [bp+var_4], 20h + jz short loc_6523 + push [bp+arg_6] + push [bp+arg_4] + mov ax, 1 + push ax + les bx, [bp+arg_8] + push word ptr es:[bx+8] + push word ptr es:[bx+6] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + call sub_6260 + add sp, 0Eh + or ax, ax + jnz short loc_652F + les bx, [bp+arg_8] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+arg_8+2], dx + mov word ptr [bp+arg_8], ax + les bx, [bp+arg_8] + mov ax, es:[bx+2] + mov [bp+var_4], ax + test byte ptr [bp+var_4], 10h + jz short loc_6566 + push [bp+arg_6] + push [bp+arg_4] + xor ax, ax + push ax + push word ptr [bp+arg_8+2] + push word ptr [bp+arg_8] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + call sub_6260 + add sp, 0Eh + or ax, ax + jnz short loc_652F + mov ax, [bp+var_2] + and ax, 3000h + mov dx, [bp+var_4] + and dx, 3000h + cmp ax, dx + jnz short loc_6566 + +loc_6523: ; CODE XREF: sub_6469+42j + test byte ptr [bp+var_4], 10h + jz short loc_6566 + test [bp+arg_C], 1 + jz short loc_6534 + +loc_652F: ; CODE XREF: sub_6469+27j sub_6469+67j ... + mov ax, 1 + jmp short loc_6568 +; --------------------------------------------------------------------------- + +loc_6534: ; CODE XREF: sub_6469+C4j + test byte ptr [bp+var_2], 10h + jz short loc_6566 + test byte ptr [bp+var_2+1], 20h + jz short loc_6546 + test byte ptr [bp+var_4+1], 20h + jz short loc_6566 + +loc_6546: ; CODE XREF: sub_6469+D5j + test byte ptr [bp+var_4], 40h + jz short loc_6566 + mov ax, [bp+var_2] + and ax, 300h + mov dx, [bp+var_4] + and dx, 300h + cmp ax, dx + jnz short loc_6562 + mov ax, 1 + jmp short loc_6564 +; --------------------------------------------------------------------------- + +loc_6562: ; CODE XREF: sub_6469+F2j + xor ax, ax + +loc_6564: ; CODE XREF: sub_6469+F7j + jmp short loc_6568 +; --------------------------------------------------------------------------- + +loc_6566: ; CODE XREF: sub_6469+88j sub_6469+B8j ... + xor ax, ax + +loc_6568: ; CODE XREF: sub_6469+C9j + ; sub_6469:loc_6564j + pop di + pop si + mov sp, bp + pop bp + retn +sub_6469 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_656E proc near ; CODE XREF: sub_6B93+263p + ; sub_783F+1FDp + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = dword ptr 4 +arg_4 = word ptr 8 +arg_6 = word ptr 0Ah +arg_8 = dword ptr 0Ch +arg_C = word ptr 10h + + push bp + mov bp, sp + sub sp, 4 + push si + push di + les bx, ss:16h + mov ax, es:[bx+6] + mov [bp+var_2], ax + push ds + mov ds, [bp+var_2] + mov ax, [bp+arg_C] + and ax, 1 + mov [bp+var_4], ax + test byte ptr [bp+arg_C], 4 + jz short loc_6599 + or [bp+var_4], 2 + +loc_6599: ; CODE XREF: sub_656E+25j + test byte ptr [bp+arg_C], 2 + jz short loc_65AD + or [bp+var_4], 4 + test byte ptr [bp+arg_C+1], 1 + jnz short loc_65AD + or [bp+var_4], 20h + +loc_65AD: ; CODE XREF: sub_656E+2Fj sub_656E+39j + test byte ptr [bp+arg_C], 20h + jz short loc_65B7 + or [bp+var_4], 8 + +loc_65B7: ; CODE XREF: sub_656E+43j + test byte ptr [bp+arg_C], 80h + jz short loc_65C1 + or [bp+var_4], 10h + +loc_65C1: ; CODE XREF: sub_656E+4Dj + test byte ptr [bp+arg_C+1], 10h + jnz short loc_65CA + jmp loc_674F +; --------------------------------------------------------------------------- + +loc_65CA: ; CODE XREF: sub_656E+57j + mov bx, [bp+var_4] + cmp bx, 17h + jbe short loc_65D5 + jmp loc_6855 +; --------------------------------------------------------------------------- + +loc_65D5: ; CODE XREF: sub_656E+62j + add bx, bx + jmp cs:off_688C[bx] + +loc_65DC: ; CODE XREF: sub_656E+1EEj + ; DATA XREF: seg000:off_688Co + push [bp+arg_4] + xor ax, ax + push ax + push word ptr [bp+arg_0] + ; Hack + db 0ffh + db 056h + db 00ch + add sp, 6 + jmp loc_6855 +; --------------------------------------------------------------------------- + +loc_65EE: ; CODE XREF: sub_656E+69j + ; sub_656E+1EEj + ; DATA XREF: ... + push [bp+arg_4] + xor ax, ax + push ax + push word ptr [bp+arg_0] + call [bp+arg_8] + add sp, 6 + jmp loc_6855 +; --------------------------------------------------------------------------- + +loc_6600: ; CODE XREF: sub_656E+69j + ; sub_656E+1EEj + ; DATA XREF: ... + push [bp+arg_6] + push [bp+arg_4] + xor ax, ax + push ax + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + ; Hack + db 0ffh + db 056h + db 00ch + jmp short loc_6626 +; --------------------------------------------------------------------------- + +loc_6614: ; CODE XREF: sub_656E+69j + ; sub_656E+1EEj + ; DATA XREF: ... + push [bp+arg_6] + push [bp+arg_4] + xor ax, ax + push ax + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + call [bp+arg_8] + +loc_6626: ; CODE XREF: sub_656E+A4j + add sp, 0Ah + jmp loc_6855 +; --------------------------------------------------------------------------- + +loc_662C: ; CODE XREF: sub_656E+69j + ; sub_656E+1EEj + ; DATA XREF: ... + xor ax, ax + push ax + push [bp+arg_4] + push word ptr [bp+arg_0] + ; Hack + db 0ffh + db 056h + db 00ch + jmp loc_6855 +; --------------------------------------------------------------------------- + +loc_663B: ; CODE XREF: sub_656E+69j + ; sub_656E+1EEj + ; DATA XREF: ... + xor ax, ax + push ax + push [bp+arg_4] + push word ptr [bp+arg_0] + call [bp+arg_8] + jmp loc_6855 +; --------------------------------------------------------------------------- + +loc_664A: ; CODE XREF: sub_656E+69j + ; sub_656E+1EEj + ; DATA XREF: ... + xor ax, ax + push ax + push [bp+arg_6] + push [bp+arg_4] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + ; Hack + db 0ffh + db 056h + db 00ch + jmp short loc_6670 +; --------------------------------------------------------------------------- + +loc_665E: ; CODE XREF: sub_656E+69j + ; sub_656E+1EEj + ; DATA XREF: ... + xor ax, ax + push ax + push [bp+arg_6] + push [bp+arg_4] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + call [bp+arg_8] + +loc_6670: ; CODE XREF: sub_656E+EEj + jmp loc_6855 +; --------------------------------------------------------------------------- + +loc_6673: ; CODE XREF: sub_656E+69j + ; sub_656E+1EEj + ; DATA XREF: ... + mov dx, word ptr [bp+arg_0] + mov bx, [bp+arg_4] + xor ax, ax + push bx + pop bx + ; Hack + db 0ffh + db 056h + db 00ch + jmp loc_6855 +; --------------------------------------------------------------------------- + +loc_6683: ; CODE XREF: sub_656E+69j + ; sub_656E+1EEj + ; DATA XREF: ... + mov dx, word ptr [bp+arg_0] + mov bx, [bp+arg_4] + xor ax, ax + +loc_668B: ; CODE XREF: sub_656E+254j + push bx + pop bx + call [bp+arg_8] + jmp loc_6855 +; --------------------------------------------------------------------------- + +loc_6693: ; CODE XREF: sub_656E+69j + ; sub_656E+1EEj + ; DATA XREF: ... + push [bp+arg_6] + push [bp+arg_4] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + xor ax, ax + +loc_66A1: ; CODE XREF: sub_656E+263j + ; Hack + db 0ffh + db 056h + db 00ch + jmp short loc_66B7 +; --------------------------------------------------------------------------- + +loc_66A6: ; CODE XREF: sub_656E+69j + ; sub_656E+1EEj + ; DATA XREF: ... + push [bp+arg_6] + push [bp+arg_4] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + xor ax, ax + +loc_66B4: ; CODE XREF: sub_656E+272j + call [bp+arg_8] + +loc_66B7: ; CODE XREF: sub_656E+136j + jmp loc_6855 +; --------------------------------------------------------------------------- + +loc_66BA: ; CODE XREF: sub_656E+69j + ; sub_656E+1EEj + ; DATA XREF: ... + mov si, word ptr [bp+arg_0] + push [bp+arg_4] + xor ax, ax + push ax + ; Hack + db 0ffh + db 056h + db 00ch + jmp short loc_66D4 +; --------------------------------------------------------------------------- + +loc_66C8: ; CODE XREF: sub_656E+69j + ; sub_656E+1EEj + ; DATA XREF: ... + mov si, word ptr [bp+arg_0] + push [bp+arg_4] + xor ax, ax + push ax + +loc_66D1: ; CODE XREF: sub_656E+205j + call [bp+arg_8] + +loc_66D4: ; CODE XREF: sub_656E+158j + ; sub_656E+1FCj + pop cx + pop cx + jmp loc_6855 +; --------------------------------------------------------------------------- + +loc_66D9: ; CODE XREF: sub_656E+69j + ; sub_656E+1EEj + ; DATA XREF: ... + push ds + lds si, [bp+arg_0] + push [bp+arg_6] + push [bp+arg_4] + xor ax, ax + push ax + ; Hack + db 0ffh + db 056h + db 00ch + add sp, 6 + pop ds + jmp loc_6855 +; --------------------------------------------------------------------------- + +loc_66F0: ; CODE XREF: sub_656E+69j + ; sub_656E+1EEj + ; DATA XREF: ... + push ds + lds si, [bp+arg_0] + push [bp+arg_6] + push [bp+arg_4] + xor ax, ax + push ax + call [bp+arg_8] + add sp, 6 + pop ds + jmp loc_6855 +; --------------------------------------------------------------------------- + +loc_6707: ; CODE XREF: sub_656E+69j + ; sub_656E+1EEj + ; DATA XREF: ... + mov si, word ptr [bp+arg_0] + xor ax, ax + push ax + push [bp+arg_4] + +loc_6710: ; CODE XREF: sub_656E+234j + ; Hack + db 0ffh + db 056h + db 00ch + jmp short loc_6721 +; --------------------------------------------------------------------------- + +loc_6715: ; CODE XREF: sub_656E+69j + ; sub_656E+1EEj + ; DATA XREF: ... + mov si, word ptr [bp+arg_0] + xor ax, ax + push ax + push [bp+arg_4] + +loc_671E: ; CODE XREF: sub_656E+23Dj + call [bp+arg_8] + +loc_6721: ; CODE XREF: sub_656E+1A5j + jmp loc_6855 +; --------------------------------------------------------------------------- + +loc_6724: ; CODE XREF: sub_656E+69j + ; sub_656E+1EEj + ; DATA XREF: ... + push ds + lds si, [bp+arg_0] + xor ax, ax + push ax + push [bp+arg_6] + push [bp+arg_4] + ; Hack + db 0ffh + db 056h + db 00ch + pop ds + jmp loc_6855 +; --------------------------------------------------------------------------- + +loc_6738: ; CODE XREF: sub_656E+69j + ; sub_656E+1EEj + ; DATA XREF: ... + push ds + lds si, [bp+arg_0] + xor ax, ax + push ax + push [bp+arg_6] + push [bp+arg_4] + call [bp+arg_8] + pop ds + jmp loc_6855 +; --------------------------------------------------------------------------- + +loc_674C: ; CODE XREF: sub_656E+69j + ; sub_656E+1EEj + ; DATA XREF: ... + jmp loc_6855 +; --------------------------------------------------------------------------- + +loc_674F: ; CODE XREF: sub_656E+59j + mov bx, [bp+var_4] + cmp bx, 17h + jbe short loc_675A + jmp loc_6855 +; --------------------------------------------------------------------------- + +loc_675A: ; CODE XREF: sub_656E+1E7j + add bx, bx + jmp cs:off_685C[bx] + +loc_6761: ; DATA XREF: seg000:off_685Co + push [bp+arg_4] + push word ptr [bp+arg_0] + ; Hack + db 0ffh + db 056h + db 00ch + jmp loc_66D4 +; --------------------------------------------------------------------------- + +loc_676D: ; CODE XREF: sub_656E+1EEj + ; DATA XREF: seg000:685Eo + push [bp+arg_4] + push word ptr [bp+arg_0] + jmp loc_66D1 +; --------------------------------------------------------------------------- + +loc_6776: ; CODE XREF: sub_656E+1EEj + ; DATA XREF: seg000:6860o + push [bp+arg_6] + push [bp+arg_4] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + ; Hack + db 0ffh + db 056h + db 00ch + jmp short loc_6796 +; --------------------------------------------------------------------------- + +loc_6787: ; CODE XREF: sub_656E+1EEj + ; DATA XREF: seg000:6862o + push [bp+arg_6] + push [bp+arg_4] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + call [bp+arg_8] + +loc_6796: ; CODE XREF: sub_656E+217j + add sp, 8 + jmp loc_6855 +; --------------------------------------------------------------------------- + +loc_679C: ; CODE XREF: sub_656E+1EEj + ; DATA XREF: seg000:6864o + push [bp+arg_4] + push word ptr [bp+arg_0] + jmp loc_6710 +; --------------------------------------------------------------------------- + +loc_67A5: ; CODE XREF: sub_656E+1EEj + ; DATA XREF: seg000:6866o + push [bp+arg_4] + push word ptr [bp+arg_0] + jmp loc_671E +; --------------------------------------------------------------------------- + +loc_67AE: ; CODE XREF: sub_656E+1EEj + ; DATA XREF: seg000:686Co + mov ax, word ptr [bp+arg_0] + mov bx, [bp+arg_4] + push bx + pop bx + ; Hack + db 0ffh + db 056h + db 00ch + jmp loc_6855 +; --------------------------------------------------------------------------- + +loc_67BC: ; CODE XREF: sub_656E+1EEj + ; DATA XREF: seg000:686Eo + mov ax, word ptr [bp+arg_0] + mov bx, [bp+arg_4] + jmp loc_668B +; --------------------------------------------------------------------------- + +loc_67C5: ; CODE XREF: sub_656E+1EEj + ; DATA XREF: seg000:6868o ... + push [bp+arg_6] + push [bp+arg_4] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + jmp loc_66A1 +; --------------------------------------------------------------------------- + +loc_67D4: ; CODE XREF: sub_656E+1EEj + ; DATA XREF: seg000:686Ao ... + push [bp+arg_6] + push [bp+arg_4] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + jmp loc_66B4 +; --------------------------------------------------------------------------- + +loc_67E3: ; CODE XREF: sub_656E+1EEj + ; DATA XREF: seg000:687Co + mov si, word ptr [bp+arg_0] + push [bp+arg_4] + ; Hack + db 0ffh + db 056h + db 00ch + pop cx + jmp short loc_6855 +; --------------------------------------------------------------------------- + +loc_67EF: ; CODE XREF: sub_656E+1EEj + ; DATA XREF: seg000:687Eo + mov si, word ptr [bp+arg_0] + push [bp+arg_4] + call [bp+arg_8] + pop cx + jmp short loc_6855 +; --------------------------------------------------------------------------- + +loc_67FB: ; CODE XREF: sub_656E+1EEj + ; DATA XREF: seg000:6880o + push ds + lds si, [bp+arg_0] + push [bp+arg_6] + push [bp+arg_4] + ; Hack + db 0ffh + db 056h + db 00ch + pop cx + pop cx + pop ds + jmp short loc_6855 +; --------------------------------------------------------------------------- + +loc_680D: ; CODE XREF: sub_656E+1EEj + ; DATA XREF: seg000:6882o + push ds + lds si, [bp+arg_0] + push [bp+arg_6] + push [bp+arg_4] + call [bp+arg_8] + pop cx + pop cx + pop ds + jmp short loc_6855 +; --------------------------------------------------------------------------- + +loc_681F: ; CODE XREF: sub_656E+1EEj + ; DATA XREF: seg000:6884o + mov si, word ptr [bp+arg_0] + push [bp+arg_4] + ; Hack + db 0ffh + db 056h + db 00ch + jmp short loc_6855 +; --------------------------------------------------------------------------- + +loc_682A: ; CODE XREF: sub_656E+1EEj + ; DATA XREF: seg000:6886o + mov si, word ptr [bp+arg_0] + push [bp+arg_4] + call [bp+arg_8] + jmp short loc_6855 +; --------------------------------------------------------------------------- + +loc_6835: ; CODE XREF: sub_656E+1EEj + ; DATA XREF: seg000:6888o + push ds + lds si, [bp+arg_0] + push [bp+arg_6] + push [bp+arg_4] + ; Hack + db 0ffh + db 056h + db 00ch + pop ds + jmp short loc_6855 +; --------------------------------------------------------------------------- + +loc_6845: ; CODE XREF: sub_656E+1EEj + ; DATA XREF: seg000:688Ao + push ds + lds si, [bp+arg_0] + push [bp+arg_6] + push [bp+arg_4] + call [bp+arg_8] + pop ds + jmp short $+2 + +loc_6855: ; CODE XREF: sub_656E+64j sub_656E+7Dj ... + pop ds + pop di + pop si + mov sp, bp + pop bp + retn +sub_656E endp ; sp-analysis failed + +; --------------------------------------------------------------------------- +off_685C dw offset loc_6761 ; DATA XREF: sub_656E+1EEr + dw offset loc_676D + dw offset loc_6776 + dw offset loc_6787 + dw offset loc_679C + dw offset loc_67A5 + dw offset loc_67C5 + dw offset loc_67D4 + dw offset loc_67AE + dw offset loc_67BC + dw offset loc_67C5 + dw offset loc_67D4 + dw offset loc_6855 + dw offset loc_6855 + dw offset loc_6855 + dw offset loc_6855 + dw offset loc_67E3 + dw offset loc_67EF + dw offset loc_67FB + dw offset loc_680D + dw offset loc_681F + dw offset loc_682A + dw offset loc_6835 + dw offset loc_6845 +off_688C dw offset loc_65DC ; DATA XREF: sub_656E+69r + dw offset loc_65EE + dw offset loc_6600 + dw offset loc_6614 + dw offset loc_662C + dw offset loc_663B + dw offset loc_664A + dw offset loc_665E + dw offset loc_6673 + dw offset loc_6683 + dw offset loc_6693 + dw offset loc_66A6 + dw offset loc_674C + dw offset loc_674C + dw offset loc_674C + dw offset loc_674C + dw offset loc_66BA + dw offset loc_66C8 + dw offset loc_66D9 + dw offset loc_66F0 + dw offset loc_6707 + dw offset loc_6715 + dw offset loc_6724 + dw offset loc_6738 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_68BC proc near ; CODE XREF: sub_6B93+2BCp + ; sub_754B+2Bp ... + +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = dword ptr 4 +arg_4 = dword ptr 8 +arg_8 = word ptr 0Ch +arg_A = word ptr 0Eh + + push bp + mov bp, sp + sub sp, 6 + push si + push di + cmp [bp+arg_A], 0 + jz short loc_68CF + mov ax, 2 + jmp short loc_68D1 +; --------------------------------------------------------------------------- + +loc_68CF: ; CODE XREF: sub_68BC+Cj + xor ax, ax + +loc_68D1: ; CODE XREF: sub_68BC+11j + mov [bp+var_2], ax + les bx, ss:16h + mov ax, es:[bx+6] + mov [bp+var_4], ax + push ds + mov ds, [bp+var_4] + mov ax, [bp+arg_8] + and ax, 1 + mov [bp+var_6], ax + test byte ptr [bp+arg_8], 4 + jz short loc_68F7 + or [bp+var_6], 2 + +loc_68F7: ; CODE XREF: sub_68BC+35j + test byte ptr [bp+arg_8], 2 + jz short loc_690B + or [bp+var_6], 4 + test byte ptr [bp+arg_8+1], 1 + jnz short loc_690B + or [bp+var_6], 20h + +loc_690B: ; CODE XREF: sub_68BC+3Fj sub_68BC+49j + test byte ptr [bp+arg_8], 20h + jz short loc_6915 + or [bp+var_6], 8 + +loc_6915: ; CODE XREF: sub_68BC+53j + test byte ptr [bp+arg_8], 80h + jz short loc_691F + or [bp+var_6], 10h + +loc_691F: ; CODE XREF: sub_68BC+5Dj + mov bx, [bp+var_6] + cmp bx, 17h + jbe short loc_692A + jmp loc_6A3D +; --------------------------------------------------------------------------- + +loc_692A: ; CODE XREF: sub_68BC+69j + add bx, bx + jmp cs:off_6A44[bx] + +loc_6931: ; DATA XREF: seg000:off_6A44o + push [bp+var_2] + push word ptr [bp+arg_0] + ; Hack + db 0ffh + db 056h + db 008h + pop cx + pop cx + jmp loc_6A3D +; --------------------------------------------------------------------------- + +loc_693F: ; CODE XREF: sub_68BC+70j + ; DATA XREF: seg000:6A46o + push [bp+var_2] + push word ptr [bp+arg_0] + call [bp+arg_4] + pop cx + pop cx + jmp loc_6A3D +; --------------------------------------------------------------------------- + +loc_694D: ; CODE XREF: sub_68BC+70j + ; DATA XREF: seg000:6A48o + push [bp+var_2] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + ; Hack + db 0ffh + db 056h + db 008h + add sp, 6 + jmp loc_6A3D +; --------------------------------------------------------------------------- + +loc_695F: ; CODE XREF: sub_68BC+70j + ; DATA XREF: seg000:6A4Ao + push [bp+var_2] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + call [bp+arg_4] + add sp, 6 + jmp loc_6A3D +; --------------------------------------------------------------------------- + +loc_6971: ; CODE XREF: sub_68BC+70j + ; DATA XREF: seg000:6A4Co + push [bp+var_2] + push word ptr [bp+arg_0] + ; Hack + db 0ffh + db 056h + db 008h + jmp short loc_69D7 +; --------------------------------------------------------------------------- + +loc_697C: ; CODE XREF: sub_68BC+70j + ; DATA XREF: seg000:6A4Eo + push [bp+var_2] + push word ptr [bp+arg_0] + jmp short loc_69D4 +; --------------------------------------------------------------------------- + +loc_6984: ; CODE XREF: sub_68BC+70j + ; DATA XREF: seg000:6A50o + push [bp+var_2] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + ; Hack + db 0ffh + db 056h + db 008h + jmp short loc_699E +; --------------------------------------------------------------------------- + +loc_6992: ; CODE XREF: sub_68BC+70j + ; DATA XREF: seg000:6A52o + push [bp+var_2] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + call [bp+arg_4] + +loc_699E: ; CODE XREF: sub_68BC+D4j + jmp loc_6A3D +; --------------------------------------------------------------------------- + +loc_69A1: ; CODE XREF: sub_68BC+70j + ; DATA XREF: seg000:6A54o + mov bx, word ptr [bp+arg_0] + mov ax, [bp+var_2] + push bx + pop bx + ; Hack + db 0ffh + db 056h + db 008h + jmp loc_6A3D +; --------------------------------------------------------------------------- + +loc_69AF: ; CODE XREF: sub_68BC+70j + ; DATA XREF: seg000:6A56o + mov bx, word ptr [bp+arg_0] + mov ax, [bp+var_2] + push bx + pop bx + call [bp+arg_4] + jmp loc_6A3D +; --------------------------------------------------------------------------- + +loc_69BD: ; CODE XREF: sub_68BC+70j + ; DATA XREF: seg000:6A58o + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + mov ax, [bp+var_2] + ; Hack + db 0ffh + db 056h + db 008h + jmp short loc_69D7 +; --------------------------------------------------------------------------- + +loc_69CB: ; CODE XREF: sub_68BC+70j + ; DATA XREF: seg000:6A5Ao + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + mov ax, [bp+var_2] + +loc_69D4: ; CODE XREF: sub_68BC+C6j + call [bp+arg_4] + +loc_69D7: ; CODE XREF: sub_68BC+BEj + ; sub_68BC+10Dj + jmp short loc_6A3D +; --------------------------------------------------------------------------- + +loc_69D9: ; CODE XREF: sub_68BC+70j + ; DATA XREF: seg000:6A64o + mov si, word ptr [bp+arg_0] + push [bp+var_2] + ; Hack + db 0ffh + db 056h + db 008h + pop cx + jmp short loc_6A3D +; --------------------------------------------------------------------------- + +loc_69E5: ; CODE XREF: sub_68BC+70j + ; DATA XREF: seg000:6A66o + mov si, word ptr [bp+arg_0] + push [bp+var_2] + call [bp+arg_4] + pop cx + jmp short loc_6A3D +; --------------------------------------------------------------------------- + +loc_69F1: ; CODE XREF: sub_68BC+70j + ; DATA XREF: seg000:6A68o + push ds + lds si, [bp+arg_0] + push [bp+var_2] + ; Hack + db 0ffh + db 056h + db 008h + pop cx + pop ds + jmp short loc_6A3D +; --------------------------------------------------------------------------- + +loc_69FF: ; CODE XREF: sub_68BC+70j + ; DATA XREF: seg000:6A6Ao + push ds + lds si, [bp+arg_0] + push [bp+var_2] + call [bp+arg_4] + pop cx + pop ds + jmp short loc_6A3D +; --------------------------------------------------------------------------- + +loc_6A0D: ; CODE XREF: sub_68BC+70j + ; DATA XREF: seg000:6A6Co + mov si, word ptr [bp+arg_0] + push [bp+var_2] + ; Hack + db 0ffh + db 056h + db 008h + jmp short loc_6A3D +; --------------------------------------------------------------------------- + +loc_6A18: ; CODE XREF: sub_68BC+70j + ; DATA XREF: seg000:6A6Eo + mov si, word ptr [bp+arg_0] + push [bp+var_2] + call [bp+arg_4] + jmp short loc_6A3D +; --------------------------------------------------------------------------- + +loc_6A23: ; CODE XREF: sub_68BC+70j + ; DATA XREF: seg000:6A70o + push ds + lds si, [bp+arg_0] + push [bp+var_2] + ; Hack + db 0ffh + db 056h + db 008h + pop ds + jmp short loc_6A3D +; --------------------------------------------------------------------------- + +loc_6A30: ; CODE XREF: sub_68BC+70j + ; DATA XREF: seg000:6A72o + push ds + lds si, [bp+arg_0] + push [bp+var_2] + call [bp+arg_4] + pop ds + jmp short $+2 + +loc_6A3D: ; CODE XREF: sub_68BC+6Bj sub_68BC+70j ... + pop ds + pop di + pop si + mov sp, bp + pop bp + retn +sub_68BC endp ; sp-analysis failed + +; --------------------------------------------------------------------------- +off_6A44 dw offset loc_6931 ; DATA XREF: sub_68BC+70r + dw offset loc_693F + dw offset loc_694D + dw offset loc_695F + dw offset loc_6971 + dw offset loc_697C + dw offset loc_6984 + dw offset loc_6992 + dw offset loc_69A1 + dw offset loc_69AF + dw offset loc_69BD + dw offset loc_69CB + dw offset loc_6A3D + dw offset loc_6A3D + dw offset loc_6A3D + dw offset loc_6A3D + dw offset loc_69D9 + dw offset loc_69E5 + dw offset loc_69F1 + dw offset loc_69FF + dw offset loc_6A0D + dw offset loc_6A18 + dw offset loc_6A23 + dw offset loc_6A30 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_6A74 proc near ; CODE XREF: sub_86BB+3CFp + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = dword ptr 8 +arg_8 = word ptr 0Ch + + push bp + mov bp, sp + sub sp, 4 + push si + push di + les bx, ss:16h + mov ax, es:[bx+6] + mov [bp+var_2], ax + push ds + mov ds, [bp+var_2] + mov ax, [bp+arg_8] + and ax, 1 + mov [bp+var_4], ax + test byte ptr [bp+arg_8], 4 + jz short loc_6A9F + or [bp+var_4], 2 + +loc_6A9F: ; CODE XREF: sub_6A74+25j + test byte ptr [bp+arg_8], 2 + jz short loc_6AA9 + or [bp+var_4], 4 + +loc_6AA9: ; CODE XREF: sub_6A74+2Fj + test byte ptr [bp+arg_8], 20h + jz short loc_6AB3 + or [bp+var_4], 8 + +loc_6AB3: ; CODE XREF: sub_6A74+39j + mov bx, [bp+var_4] + cmp bx, 0Bh + ja short loc_6B26 + add bx, bx + jmp cs:off_6B2D[bx] + +loc_6AC2: ; DATA XREF: seg000:off_6B2Do + push [bp+arg_0] + ; Hack + db 0ffh + db 056h + db 008h + pop cx + jmp short loc_6B26 +; --------------------------------------------------------------------------- + +loc_6ACB: ; CODE XREF: sub_6A74+49j + ; DATA XREF: seg000:6B2Fo + push [bp+arg_0] + call [bp+arg_4] + pop cx + jmp short loc_6B26 +; --------------------------------------------------------------------------- + +loc_6AD4: ; CODE XREF: sub_6A74+49j + ; DATA XREF: seg000:6B31o + push [bp+arg_2] + push [bp+arg_0] + ; Hack + db 0ffh + db 056h + db 008h + jmp short loc_6AE8 +; --------------------------------------------------------------------------- + +loc_6ADF: ; CODE XREF: sub_6A74+49j + ; DATA XREF: seg000:6B33o + push [bp+arg_2] + push [bp+arg_0] + call [bp+arg_4] + +loc_6AE8: ; CODE XREF: sub_6A74+69j + pop cx + pop cx + jmp short loc_6B26 +; --------------------------------------------------------------------------- + +loc_6AEC: ; CODE XREF: sub_6A74+49j + ; DATA XREF: seg000:6B35o + push [bp+arg_0] + ; Hack + db 0ffh + db 056h + db 008h + jmp short loc_6AFA +; --------------------------------------------------------------------------- + +loc_6AF4: ; CODE XREF: sub_6A74+49j + ; DATA XREF: seg000:6B37o + push [bp+arg_0] + call [bp+arg_4] + +loc_6AFA: ; CODE XREF: sub_6A74+7Ej + jmp short loc_6B26 +; --------------------------------------------------------------------------- + +loc_6AFC: ; CODE XREF: sub_6A74+49j + ; DATA XREF: seg000:6B3Do + mov bx, [bp+arg_0] + push bx + pop bx + ; Hack + db 0ffh + db 056h + db 008h + jmp short loc_6B26 +; --------------------------------------------------------------------------- + +loc_6B06: ; CODE XREF: sub_6A74+49j + ; DATA XREF: seg000:6B3Fo + mov bx, [bp+arg_0] + push bx + pop bx + call [bp+arg_4] + jmp short loc_6B26 +; --------------------------------------------------------------------------- + +loc_6B10: ; CODE XREF: sub_6A74+49j + ; DATA XREF: seg000:6B39o ... + push [bp+arg_2] + push [bp+arg_0] + ; Hack + db 0ffh + db 056h + db 008h + jmp short loc_6B24 +; --------------------------------------------------------------------------- + +loc_6B1B: ; CODE XREF: sub_6A74+49j + ; DATA XREF: seg000:6B3Bo ... + push [bp+arg_2] + push [bp+arg_0] + call [bp+arg_4] + +loc_6B24: ; CODE XREF: sub_6A74+A5j + jmp short $+2 + +loc_6B26: ; CODE XREF: sub_6A74+45j sub_6A74+55j ... + pop ds + pop di + pop si + mov sp, bp + pop bp + retn +sub_6A74 endp ; sp-analysis failed + +; --------------------------------------------------------------------------- +off_6B2D dw offset loc_6AC2 ; DATA XREF: sub_6A74+49r + dw offset loc_6ACB + dw offset loc_6AD4 + dw offset loc_6ADF + dw offset loc_6AEC + dw offset loc_6AF4 + dw offset loc_6B10 + dw offset loc_6B1B + dw offset loc_6AFC + dw offset loc_6B06 + dw offset loc_6B10 + dw offset loc_6B1B + db 4 dup(0), 3, 6Eh + dw seg seg000 + db 14h dup(0), 5Ch, 6Eh + dw seg seg000 + db 14h dup(0), 0E2h, 0FFh, 2 dup(0), 3, 0, 45h, 6Bh + dw seg seg000 + db 2 dup(0), 4, 3 dup(0), 3, 0, 5Dh, 6Bh + dw seg seg000 + db 2 dup(0), 4, 0 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl __far sub_6B93(int, int, void *src, int, int, int, int, int, int, int, int, int, int, int, int) +sub_6B93 proc far ; CODE XREF: _ThrowException(void *,void *,void *,void *,uint,uint,uint,uchar *)+4Dp + ; _ReThrowException(uint,uchar *)+9Ep + +var_48 = word ptr -48h +var_46 = word ptr -46h +var_44 = word ptr -44h +var_42 = word ptr -42h +var_40 = word ptr -40h +var_3E = word ptr -3Eh +var_3C = word ptr -3Ch +var_3A = word ptr -3Ah +var_38 = dword ptr -38h +var_34 = dword ptr -34h +var_30 = dword ptr -30h +var_2C = word ptr -2Ch +var_2A = word ptr -2Ah +n = word ptr -28h +var_26 = dword ptr -26h +var_22 = dword ptr -22h +var_1E = word ptr -1Eh +var_12 = word ptr -12h +arg_0 = word ptr 6 +arg_2 = word ptr 8 +src = dword ptr 0Ah +arg_8 = word ptr 0Eh +arg_A = word ptr 10h +arg_C = word ptr 12h +arg_E = word ptr 14h +arg_10 = word ptr 16h +arg_12 = word ptr 18h +arg_14 = word ptr 1Ah +arg_16 = word ptr 1Ch +arg_18 = word ptr 1Eh +arg_1A = word ptr 20h +arg_1C = word ptr 22h +arg_1E = word ptr 24h + + push bp + mov bp, sp + sub sp, 48h + push si + push di + mov ax, seg seg000 + mov bx, 6B75h + nop + push cs + call near ptr ___InitExceptBlocks + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + mov word ptr [bp+var_22+2], dx + mov word ptr [bp+var_22], ax + les bx, ss:16h + mov word ptr es:[bx+6], ds + mov dx, ss:18h + mov ax, ss:16h + add ax, 28h ; '(' + les bx, ss:16h + mov es:[bx+1Eh], dx + mov es:[bx+1Ch], ax + les bx, [bp+var_22] + mov dx, word ptr [bp+var_22+2] + mov ax, word ptr [bp+var_22] + add ax, es:[bx+4] + mov word ptr [bp+var_34+2], dx + mov word ptr [bp+var_34], ax + les bx, ss:16h + mov dx, es:[bx+1Eh] + mov ax, es:[bx+1Ch] + mov word ptr [bp+var_38+2], dx + mov word ptr [bp+var_38], ax + jmp short loc_6C1F +; --------------------------------------------------------------------------- + +loc_6BFC: ; CODE XREF: sub_6B93+93j + les bx, ss:16h + mov ax, es:[bx+1Ch] + add ax, 7Fh ; '' + cmp ax, word ptr [bp+var_38] + jbe short loc_6C1C + les bx, [bp+var_34] + mov al, es:[bx] + les bx, [bp+var_38] + mov es:[bx], al + inc word ptr [bp+var_38] + +loc_6C1C: ; CODE XREF: sub_6B93+78j + inc word ptr [bp+var_34] + +loc_6C1F: ; CODE XREF: sub_6B93+67j + les bx, [bp+var_34] + cmp byte ptr es:[bx], 0 + jnz short loc_6BFC + les bx, [bp+var_38] + mov byte ptr es:[bx], 0 + les bx, ss:16h + mov ax, [bp+arg_14] + mov es:[bx+1Ah], ax + les bx, ss:16h + mov dx, [bp+arg_18] + mov ax, [bp+arg_16] + mov es:[bx+18h], dx + mov es:[bx+16h], ax + mov dx, word ptr [bp+var_22+2] + mov ax, word ptr [bp+var_22] + mov word ptr [bp+var_26+2], dx + mov word ptr [bp+var_26], ax + les bx, [bp+var_22] + mov ax, es:[bx] + mov [bp+n], ax + les bx, [bp+var_22] + mov ax, es:[bx+2] + mov [bp+var_2A], ax + test byte ptr [bp+var_2A], 2 + jz short loc_6C7C + les bx, [bp+var_22] + mov ax, es:[bx+8] + jmp short loc_6C7E +; --------------------------------------------------------------------------- + +loc_6C7C: ; CODE XREF: sub_6B93+DEj + xor ax, ax + +loc_6C7E: ; CODE XREF: sub_6B93+E7j + mov [bp+var_2C], ax + test byte ptr [bp+var_2A], 30h + jz short loc_6C98 + les bx, [bp+var_26] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+var_26+2], dx + mov word ptr [bp+var_26], ax + +loc_6C98: ; CODE XREF: sub_6B93+F2j + mov ax, [bp+n] + add ax, 3Ah ; ':' + push ax + push cs + call near ptr sub_63D4 + pop cx + mov word ptr [bp+var_30+2], dx + mov word ptr [bp+var_30], ax + les bx, ss:16h + mov dx, es:[bx+2] + mov ax, es:[bx] + les bx, [bp+var_30] + mov es:[bx+2], dx + mov es:[bx], ax + les bx, ss:16h + mov dx, word ptr [bp+var_30+2] + mov ax, word ptr [bp+var_30] + mov es:[bx+2], dx + mov es:[bx], ax + les bx, [bp+var_30] + mov dx, word ptr [bp+var_22+2] + mov ax, word ptr [bp+var_22] + mov es:[bx+6], dx + mov es:[bx+4], ax + les bx, [bp+var_30] + mov ax, [bp+arg_12] + mov es:[bx+0Ch], ax + les bx, [bp+var_30] + mov ax, [bp+n] + mov es:[bx+0Eh], ax + les bx, [bp+var_30] + mov ax, [bp+var_2A] + mov es:[bx+14h], ax + les bx, [bp+var_30] + mov ax, [bp+var_2C] + mov es:[bx+16h], ax + les bx, [bp+var_30] + mov dx, word ptr [bp+var_26+2] + mov ax, word ptr [bp+var_26] + mov es:[bx+12h], dx + mov es:[bx+10h], ax + les bx, [bp+var_30] + mov dx, [bp+arg_A] + mov ax, [bp+arg_8] + mov es:[bx+0Ah], dx + mov es:[bx+8], ax + les bx, [bp+var_30] + mov word ptr es:[bx+24h], 0 + les bx, [bp+var_30] + mov word ptr es:[bx+28h], 0 + mov word ptr es:[bx+26h], 0 + les bx, [bp+var_30] + mov word ptr es:[bx+18h], ds + les bx, [bp+var_30] + mov word ptr es:[bx+1Ch], seg seg000 + mov word ptr es:[bx+1Ah], 6430h + les bx, [bp+var_30] + mov ax, [bp+arg_14] + mov es:[bx+2Ch], ax + les bx, [bp+var_30] + mov dx, [bp+arg_18] + mov ax, [bp+arg_16] + mov es:[bx+30h], dx + mov es:[bx+2Eh], ax + les bx, [bp+var_30] + mov dx, [bp+arg_E] + mov ax, [bp+arg_C] + mov es:[bx+20h], dx + mov es:[bx+1Eh], ax + les bx, [bp+var_30] + mov ax, [bp+arg_10] + mov es:[bx+22h], ax + les bx, [bp+var_30] + mov byte ptr es:[bx+39h], 0 + les bx, [bp+var_30] + mov byte ptr es:[bx+38h], 1 + push [bp+n] ; n + push word ptr [bp+src+2] + push word ptr [bp+src] ; src + mov ax, word ptr [bp+var_30] + add ax, 3Ah ; ':' + push word ptr [bp+var_30+2] + push ax ; dest + nop + push cs + call near ptr _memcpy + add sp, 0Ah + test byte ptr [bp+var_2C], 1 + jz short loc_6E22 + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + mov dx, es:[bx+2] + mov ax, es:[bx] + mov [bp+var_3A], dx + mov [bp+var_3C], ax + mov [bp+var_12], 6 + push [bp+arg_10] + push [bp+arg_E] + push [bp+arg_C] + push word ptr [bp+src+2] + push word ptr [bp+src] + mov ax, word ptr [bp+var_30] + add ax, 3Ah ; ':' + push word ptr [bp+var_30+2] + push ax + call sub_656E + add sp, 0Eh + mov [bp+var_12], 0 + jmp short loc_6E0D +; --------------------------------------------------------------------------- + nop + push cs + call near ptr ___call_terminate +; --------------------------------------------------------------------------- + db 90h +; --------------------------------------------------------------------------- + push cs + call near ptr @_CatchCleanup$qv ; _CatchCleanup(void) + +loc_6E0D: ; CODE XREF: sub_6B93+26Ej + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, [bp+var_3A] + mov cx, [bp+var_3C] + mov es, dx + xchg ax, bx + mov es:[bx+2], ax + mov es:[bx], cx + +loc_6E22: ; CODE XREF: sub_6B93+22Dj + cmp [bp+arg_1E], 0 + jnz short loc_6E66 + test byte ptr [bp+var_2C], 2 + jz short loc_6E66 + mov [bp+var_12], 12h + mov ax, 1 + push ax + les bx, [bp+var_22] + push word ptr es:[bx+22h] + les bx, [bp+var_22] + push word ptr es:[bx+20h] + push word ptr es:[bx+1Eh] + push word ptr [bp+src+2] + push word ptr [bp+src] + call sub_68BC + add sp, 0Ch + mov [bp+var_12], 0 + jmp short loc_6E66 +; --------------------------------------------------------------------------- + db 90h +; --------------------------------------------------------------------------- + push cs + call near ptr ___call_terminate +; --------------------------------------------------------------------------- + nop + push cs + call near ptr @_CatchCleanup$qv ; _CatchCleanup(void) + +loc_6E66: ; CODE XREF: sub_6B93+293j + ; sub_6B93+299j ... + les bx, ss:16h + mov dx, es:[bx+1Eh] + mov ax, es:[bx+1Ch] + mov [bp+var_46], dx + mov [bp+var_48], ax + mov dx, [bp+arg_1C] + mov ax, [bp+arg_1A] + mov [bp+var_42], dx + mov [bp+var_44], ax + mov dx, word ptr [bp+var_30+2] + mov ax, word ptr [bp+var_30] + mov [bp+var_3E], dx + mov [bp+var_40], ax + push ss + lea ax, [bp+var_48] + push ax + xor ax, ax + mov dx, 3 + push ax + push dx + xor ax, ax + mov dx, 1 + push ax + push dx + mov ax, 0EEFh + mov dx, 0FACEh + push ax + push dx + nop + push cs + call near ptr _RaiseException + add sp, 10h + push [bp+var_1E] + nop + push cs + call near ptr ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf +sub_6B93 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl __far _ThrowException(int, int, void *src, int, int, int, int, int, int, int, int, int) +@_ThrowException$qnvt1t1t1uiuiuinuc proc far ; CODE XREF: seg000:23AAp + ; xalloc::raise(void)+6Cp ... + +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +src = dword ptr 0Ah +arg_8 = word ptr 0Eh +arg_A = word ptr 10h +arg_C = word ptr 12h +arg_E = word ptr 14h +arg_10 = word ptr 16h +arg_12 = word ptr 18h +arg_14 = word ptr 1Ah +arg_16 = word ptr 1Ch +arg_18 = word ptr 1Eh + + push bp + mov bp, sp + sub sp, 6 + push si + push di + mov [bp+var_6], bp + mov bx, [bp+var_6] + mov dx, ss:[bx+4] + mov ax, ss:[bx+2] + mov [bp+var_2], dx + mov [bp+var_4], ax + xor ax, ax + push ax ; int + push [bp+var_2] ; int + push [bp+var_4] ; int + push [bp+arg_18] ; int + push [bp+arg_16] ; int + push [bp+arg_14] ; int + push [bp+arg_12] ; int + push [bp+arg_10] ; int + push [bp+arg_E] ; int + push [bp+arg_C] ; int + push [bp+arg_A] ; int + push [bp+arg_8] ; int + push word ptr [bp+src+2] + push word ptr [bp+src] ; src + push [bp+arg_2] ; int + push [bp+arg_0] ; int + push cs + call near ptr sub_6B93 + add sp, 20h + pop di + pop si + mov sp, bp + pop bp + retf +@_ThrowException$qnvt1t1t1uiuiuinuc endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; _ReThrowException(unsigned int, unsigned char *) +@_ReThrowException$quinuc proc far + +var_A = word ptr -0Ah +var_8 = dword ptr -8 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + sub sp, 0Ah + push si + push di + mov [bp+var_A], bp + mov bx, [bp+var_A] + mov dx, ss:[bx+4] + mov ax, ss:[bx+2] + mov [bp+var_2], dx + mov [bp+var_4], ax + les bx, ss:16h + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + mov ax, word ptr [bp+var_8] + or ax, word ptr [bp+var_8+2] + jnz short loc_6F56 + nop + push cs + call near ptr ___call_terminate +; --------------------------------------------------------------------------- + +loc_6F56: ; CODE XREF: _ReThrowException(uint,uchar *)+34j + mov ax, 1 + push ax ; int + push [bp+var_2] ; int + push [bp+var_4] ; int + push [bp+arg_4] ; int + push [bp+arg_2] ; int + push [bp+arg_0] ; int + les bx, [bp+var_8] + push word ptr es:[bx+0Ch] ; int + les bx, [bp+var_8] + push word ptr es:[bx+22h] ; int + les bx, [bp+var_8] + push word ptr es:[bx+20h] ; int + push word ptr es:[bx+1Eh] ; int + les bx, [bp+var_8] + push word ptr es:[bx+0Ah] ; int + push word ptr es:[bx+8] ; int + les bx, [bp+var_8] + cmp byte ptr es:[bx+38h], 0 + jz short loc_6FA2 + mov dx, word ptr [bp+var_8+2] + mov ax, word ptr [bp+var_8] + add ax, 3Ah ; ':' + jmp short loc_6FAB +; --------------------------------------------------------------------------- + +loc_6FA2: ; CODE XREF: _ReThrowException(uint,uchar *)+7Aj + les bx, [bp+var_8] + mov ax, es:[bx+36h] + mov dx, ss + +loc_6FAB: ; CODE XREF: _ReThrowException(uint,uchar *)+85j + push dx + push ax ; src + les bx, [bp+var_8] + push word ptr es:[bx+6] ; int + push word ptr es:[bx+4] ; int + push cs + call near ptr sub_6B93 + add sp, 20h + pop di + pop si + mov sp, bp + pop bp + retf +@_ReThrowException$quinuc endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +sub_6FC5 proc far ; CODE XREF: sub_6FCA+22p + push si + push di + pop di + pop si + retf +sub_6FC5 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_6FCA proc far ; CODE XREF: __Global_unwind+3Bp + ; _RaiseException+2A6p ... + +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + sub sp, 6 + push si + push di + mov [bp+var_4], 0 + mov bx, [bp+arg_0] + test byte ptr ss:[bx+4], 6 + jz short loc_6FE4 + inc [bp+var_4] + +loc_6FE4: ; CODE XREF: sub_6FCA+15j + mov ax, ss:14h + mov [bp+var_2], ax + push cs + call near ptr sub_6FC5 + jmp short loc_7032 +; --------------------------------------------------------------------------- + +loc_6FF1: ; CODE XREF: sub_6FCA+74j + mov ax, [bp+var_2] + mov [bp+var_6], ax + xor ax, ax + push ax + push ax + push [bp+arg_4] + push [bp+arg_2] + push [bp+var_2] + push ss + push [bp+arg_0] + mov bx, [bp+var_6] + call dword ptr ss:[bx+2] + add sp, 0Eh + mov dx, ax + or dx, dx + jnz short loc_701C + mov ax, dx + jmp short loc_7050 +; --------------------------------------------------------------------------- + +loc_701C: ; CODE XREF: sub_6FCA+4Cj + cmp [bp+var_4], 0 + jz short loc_7029 + mov ax, [bp+var_2] + mov ss:14h, ax + +loc_7029: ; CODE XREF: sub_6FCA+56j + mov bx, [bp+var_2] + mov ax, ss:[bx] + mov [bp+var_2], ax + +loc_7032: ; CODE XREF: sub_6FCA+25j + cmp [bp+var_2], 0FFFFh + jz short loc_7040 + mov ax, [bp+var_2] + cmp ax, [bp+arg_6] + jnz short loc_6FF1 + +loc_7040: ; CODE XREF: sub_6FCA+6Cj + cmp [bp+var_4], 0 + jz short loc_704D + mov ax, [bp+var_2] + mov ss:14h, ax + +loc_704D: ; CODE XREF: sub_6FCA+7Aj + mov ax, 1 + +loc_7050: ; CODE XREF: sub_6FCA+50j + pop di + pop si + mov sp, bp + pop bp + retf +sub_6FCA endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__Global_unwind proc far ; CODE XREF: __ExceptionHandler+210p + +var_4C = word ptr -4Ch +var_4A = word ptr -4Ah +var_48 = word ptr -48h +var_46 = word ptr -46h +var_3E = word ptr -3Eh +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + sub sp, 4Ch + push si + push di + mov dx, [bp+arg_2] + or dx, dx + jnz short loc_7081 + mov [bp+var_4A], 0 + mov [bp+var_4C], 26h ; '&' + mov [bp+var_46], 0 + mov [bp+var_48], 2 + mov [bp+var_3E], 0 + lea dx, [bp+var_4C] + +loc_7081: ; CODE XREF: __Global_unwind+Dj + mov bx, dx + or word ptr ss:[bx+4], 2 + push [bp+arg_0] + xor ax, ax + push ax + push ax + push dx + push cs + call near ptr sub_6FCA + add sp, 8 + pop di + pop si + mov sp, bp + pop bp + retf +__Global_unwind endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +sub_709D proc far ; CODE XREF: _RaiseException+16p + push si + push di + pop di + pop si + retf +sub_709D endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +_RaiseException proc far ; CODE XREF: sub_6B93+31Bp + +dest = word ptr -186h +var_184 = word ptr -184h +var_182 = word ptr -182h +var_180 = word ptr -180h +var_17E = word ptr -17Eh +var_17C = word ptr -17Ch +var_176 = word ptr -176h +var_174 = word ptr -174h +var_172 = word ptr -172h +var_170 = word ptr -170h +var_16E = word ptr -16Eh +var_16C = word ptr -16Ch +var_16A = word ptr -16Ah +var_168 = word ptr -168h +var_166 = word ptr -166h +var_164 = word ptr -164h +var_162 = word ptr -162h +var_160 = word ptr -160h +var_15E = word ptr -15Eh +var_15A = word ptr -15Ah +var_158 = word ptr -158h +var_156 = word ptr -156h +var_154 = word ptr -154h +var_152 = byte ptr -152h +var_C6 = word ptr -0C6h +var_C4 = word ptr -0C4h +var_C2 = word ptr -0C2h +var_C0 = word ptr -0C0h +var_BE = word ptr -0BEh +var_BC = word ptr -0BCh +var_BA = word ptr -0BAh +var_B8 = word ptr -0B8h +var_B6 = word ptr -0B6h +var_B4 = word ptr -0B4h +var_B2 = word ptr -0B2h +var_B0 = word ptr -0B0h +var_AE = word ptr -0AEh +var_AC = word ptr -0ACh +var_AA = word ptr -0AAh +var_A8 = word ptr -0A8h +var_A6 = word ptr -0A6h +var_A4 = word ptr -0A4h +var_A2 = word ptr -0A2h +var_A0 = word ptr -0A0h +var_9E = word ptr -9Eh +var_9C = word ptr -9Ch +var_9A = word ptr -9Ah +var_98 = word ptr -98h +var_96 = word ptr -96h +var_94 = word ptr -94h +var_92 = word ptr -92h +var_90 = word ptr -90h +var_8E = word ptr -8Eh +var_8C = word ptr -8Ch +var_8A = word ptr -8Ah +var_88 = word ptr -88h +var_86 = byte ptr -86h +var_56 = word ptr -56h +var_54 = word ptr -54h +var_52 = word ptr -52h +var_50 = word ptr -50h +var_4E = word ptr -4Eh +var_4C = word ptr -4Ch +var_4A = word ptr -4Ah +var_48 = word ptr -48h +var_46 = byte ptr -46h +src = dword ptr -0Ah +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 18h +arg_2 = word ptr 1Ah +arg_4 = word ptr 1Ch +arg_6 = word ptr 1Eh +arg_8 = word ptr 20h +arg_A = word ptr 22h +arg_C = dword ptr 24h + +; FUNCTION CHUNK AT 7514 SIZE 0000000D BYTES + + push ax + push cx + push dx + push bx + push sp + push bp + push si + push di + push ds + push es + mov bp, sp + sub sp, 186h + lea ax, [bp+var_86] + push ax + push cs + call near ptr sub_709D + pop cx + pushf + pop ax + mov word ptr [bp+src+2], ax + cmp byte ptr word_13198, 3 + jnb short loc_70CB + jmp loc_7181 +; --------------------------------------------------------------------------- + +loc_70CB: ; CODE XREF: _RaiseException+24j + pushad + mov word ptr [bp+src], sp + mov ax, 20h ; ' ' + push ax ; n + push ss + push word ptr [bp+src] ; src + push ss + lea ax, [bp+dest] + push ax ; dest + nop + push cs + call near ptr _memcpy + add sp, 0Ah + popad + mov dx, [bp+var_184] + mov ax, [bp+dest] + mov [bp+var_B4], dx + mov [bp+var_B6], ax + mov dx, [bp+var_180] + mov ax, [bp+var_182] + mov [bp+var_B0], dx + mov [bp+var_B2], ax + mov dx, [bp+var_174] + mov ax, [bp+var_176] + mov [bp+var_AC], dx + mov [bp+var_AE], ax + mov dx, [bp+var_170] + mov ax, [bp+var_172] + mov [bp+var_A8], dx + mov [bp+var_AA], ax + mov dx, [bp+var_16C] + mov ax, [bp+var_16E] + mov [bp+var_A4], dx + mov [bp+var_A6], ax + mov dx, [bp+var_168] + mov ax, [bp+var_16A] + mov [bp+var_A0], dx + mov [bp+var_A2], ax + mov dx, [bp+var_17C] + mov ax, [bp+var_17E] + mov [bp+var_9C], dx + mov [bp+var_9E], ax + pushfd + pop eax + shr eax, 10h + mov [bp+var_90], ax + mov ax, word ptr [bp+src+2] + mov [bp+var_92], ax + mov [bp+var_C0], 0 + mov [bp+var_C2], fs + mov [bp+var_C4], 0 + mov [bp+var_C6], gs + jmp short loc_71CA +; --------------------------------------------------------------------------- + +loc_7181: ; CODE XREF: _RaiseException+26j + xor ax, ax + xor dx, dx + mov [bp+var_9C], ax + mov [bp+var_9E], dx + mov [bp+var_A0], ax + mov [bp+var_A2], dx + mov [bp+var_A4], ax + mov [bp+var_A6], dx + mov [bp+var_A8], ax + mov [bp+var_AA], dx + mov [bp+var_AC], ax + mov [bp+var_AE], dx + mov [bp+var_B0], ax + mov [bp+var_B2], dx + mov [bp+var_B4], ax + mov [bp+var_B6], dx + mov ax, word ptr [bp+src+2] + mov [bp+var_90], 0 + mov [bp+var_92], ax + +loc_71CA: ; CODE XREF: _RaiseException+DDj + mov dx, [bp+var_9C] + mov ax, [bp+var_9E] + add ax, 18h + adc dx, 0 + mov [bp+var_8C], dx + mov [bp+var_8E], ax + cmp [bp+arg_2], 0EEFh + jnz short loc_71FB + cmp [bp+arg_0], 0FACEh + jnz short loc_71FB + les bx, [bp+arg_C] + mov dx, es:[bx+6] + mov ax, es:[bx+4] + jmp short loc_7209 +; --------------------------------------------------------------------------- + +loc_71FB: ; CODE XREF: _RaiseException+143j + ; _RaiseException+14Aj + mov word ptr [bp+src], bp + mov bx, word ptr [bp+src] + mov dx, ss:[bx+16h] + mov ax, ss:[bx+14h] + +loc_7209: ; CODE XREF: _RaiseException+157j + mov [bp+var_4], dx + mov [bp+var_6], ax + mov ax, [bp+var_6] + mov [bp+var_98], 0 + mov [bp+var_9A], ax + mov ax, [bp+var_4] + mov [bp+var_94], 0 + mov [bp+var_96], ax + mov ax, 14h + push ax ; n + push ss + push bp ; src + push ss + lea ax, [bp+var_166] + push ax ; dest + nop + push cs + call near ptr _memcpy + add sp, 0Ah + mov ax, [bp+var_164] + mov [bp+var_B8], 0 + mov [bp+var_BA], ax + mov ax, [bp+var_166] + mov [bp+var_BC], 0 + mov [bp+var_BE], ax + mov [bp+var_88], 0 + mov [bp+var_8A], ss + mov ax, [bp+var_154] + mov [bp+var_A2], ax + mov ax, [bp+var_15A] + mov [bp+var_AE], ax + mov ax, [bp+var_156] + mov [bp+var_A6], ax + mov ax, [bp+var_158] + mov [bp+var_AA], ax + mov ax, [bp+var_160] + mov [bp+var_B2], ax + mov ax, [bp+var_162] + mov [bp+var_B6], ax + mov ax, [bp+var_15E] + mov [bp+var_9E], ax + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + and dx, 0EFFFh + mov [bp+var_54], dx + mov [bp+var_56], ax + mov dx, [bp+arg_6] + mov ax, [bp+arg_4] + mov [bp+var_50], dx + mov [bp+var_52], ax + mov dx, [bp+var_4] + mov ax, [bp+var_6] + mov [bp+var_4A], dx + mov [bp+var_4C], ax + mov [bp+var_4E], 0 + mov ax, word ptr [bp+arg_C] + or ax, word ptr [bp+arg_C+2] + jnz short loc_72DA + mov [bp+arg_A], 0 + mov [bp+arg_8], 0 + +loc_72DA: ; CODE XREF: _RaiseException+22Cj + cmp [bp+arg_A], 0 + jb short loc_72F2 + ja short loc_72E8 + cmp [bp+arg_8], 0Fh + jbe short loc_72F2 + +loc_72E8: ; CODE XREF: _RaiseException+23Ej + mov [bp+arg_A], 0 + mov [bp+arg_8], 0Fh + +loc_72F2: ; CODE XREF: _RaiseException+23Cj + ; _RaiseException+244j + mov ax, [bp+arg_8] + mov [bp+var_48], ax + mov [bp+var_2], 0 + jmp short loc_7328 +; --------------------------------------------------------------------------- + +loc_72FF: ; CODE XREF: _RaiseException+28Ej + ; _RaiseException+295j + mov bx, [bp+var_2] + mov cl, 2 + shl bx, cl + lea ax, [bp+var_46] + add bx, ax + mov ax, [bp+var_2] + mov cl, 2 + shl ax, cl + les si, [bp+arg_C] + add si, ax + mov dx, es:[si+2] + mov ax, es:[si] + mov ss:[bx+2], dx + mov ss:[bx], ax + inc [bp+var_2] + +loc_7328: ; CODE XREF: _RaiseException+25Bj + mov ax, [bp+var_2] + xor dx, dx + cmp dx, [bp+arg_A] + jb short loc_72FF + jnz short loc_7339 + cmp ax, [bp+arg_8] + jb short loc_72FF + +loc_7339: ; CODE XREF: _RaiseException+290j + ; _RaiseException+2E0j + mov ax, 0FFFFh + push ax + push ss + lea ax, [bp+var_152] + push ax + lea ax, [bp+var_56] + push ax + push cs + call near ptr sub_6FCA + add sp, 8 + or ax, ax + jnz short loc_7384 + test byte ptr [bp+arg_4], 1 + jz short loc_73A4 + mov [bp+var_54], 0C000h + mov [bp+var_56], 25h ; '%' + mov dx, [bp+arg_6] + mov ax, [bp+arg_4] + mov [bp+var_50], dx + mov [bp+var_52], ax + mov [bp+var_4A], 0 + mov [bp+var_4C], 0 + mov [bp+var_4E], 0 + mov [bp+var_48], 0 + jmp short loc_7339 +; --------------------------------------------------------------------------- + +loc_7384: ; CODE XREF: _RaiseException+2AEj + or [bp+var_52], 2 + mov ax, 0FFFFh + push ax + push ss + lea ax, [bp+var_152] + push ax + lea ax, [bp+var_56] + push ax + push cs + call near ptr sub_6FCA + add sp, 8 + or ax, ax + jz short loc_73A4 + jmp loc_750F +; --------------------------------------------------------------------------- + +loc_73A4: ; CODE XREF: _RaiseException+2B4j + ; _RaiseException+2FDj + cmp byte ptr word_13198, 3 + jnb short loc_73AE + jmp loc_748E +; --------------------------------------------------------------------------- + +loc_73AE: ; CODE XREF: _RaiseException+307j + mov cx, [bp+var_8E] + sub cx, 30h ; '0' + mov es, [bp+var_8A] + mov bx, cx + mov ax, [bp+var_C6] + mov es:[bx], ax + mov ax, [bp+var_C2] + mov es:[bx+2], ax + mov ax, [bp+var_BE] + mov es:[bx+4], ax + mov ax, [bp+var_BA] + mov es:[bx+6], ax + mov dx, [bp+var_B4] + mov ax, [bp+var_B6] + mov es:[bx+0Ah], dx + mov es:[bx+8], ax + mov dx, [bp+var_B0] + mov ax, [bp+var_B2] + mov es:[bx+0Eh], dx + mov es:[bx+0Ch], ax + mov dx, [bp+var_9C] + mov ax, [bp+var_9E] + mov es:[bx+12h], dx + mov es:[bx+10h], ax + mov dx, [bp+var_8C] + mov ax, [bp+var_8E] + mov es:[bx+16h], dx + mov es:[bx+14h], ax + mov dx, [bp+var_AC] + mov ax, [bp+var_AE] + mov es:[bx+1Ah], dx + mov es:[bx+18h], ax + mov dx, [bp+var_A8] + mov ax, [bp+var_AA] + mov es:[bx+1Eh], dx + mov es:[bx+1Ch], ax + mov dx, [bp+var_A4] + mov ax, [bp+var_A6] + mov es:[bx+22h], dx + mov es:[bx+20h], ax + mov dx, [bp+var_A0] + mov ax, [bp+var_A2] + mov es:[bx+26h], dx + mov es:[bx+24h], ax + mov dx, [bp+var_90] + mov ax, [bp+var_92] + mov es:[bx+2Ah], dx + mov es:[bx+28h], ax + mov ax, [bp+var_9A] + mov es:[bx+2Ch], ax + mov ax, [bp+var_96] + mov es:[bx+2Eh], ax + mov ss, [bp+var_8A] + mov sp, bx + pop gs + pop fs + pop es + pop ds + popad + popfd + retf +; --------------------------------------------------------------------------- + jmp loc_7514 +; --------------------------------------------------------------------------- + +loc_748E: ; CODE XREF: _RaiseException+309j + mov cx, [bp+var_8E] + sub cx, 1Ah + mov es, [bp+var_8A] + mov bx, cx + mov ax, [bp+var_BE] + mov es:[bx], ax + mov ax, [bp+var_BA] + mov es:[bx+2], ax + mov ax, [bp+var_B6] + mov es:[bx+4], ax + mov ax, [bp+var_B2] + mov es:[bx+6], ax + mov ax, [bp+var_9E] + mov es:[bx+8], ax + mov ax, [bp+var_8E] + mov es:[bx+0Ah], ax + mov ax, [bp+var_AE] + mov es:[bx+0Ch], ax + mov ax, [bp+var_AA] + mov es:[bx+0Eh], ax + mov ax, [bp+var_A6] + mov es:[bx+10h], ax + mov ax, [bp+var_A2] + mov es:[bx+12h], ax + mov ax, [bp+var_92] + mov es:[bx+14h], ax + mov ax, [bp+var_9A] + mov es:[bx+16h], ax + mov ax, [bp+var_96] + mov es:[bx+18h], ax + mov ss, [bp+var_8A] + mov sp, bx + pop es + pop ds + popa + popf + retf +; --------------------------------------------------------------------------- + jmp short loc_7514 +; --------------------------------------------------------------------------- + +loc_750F: ; CODE XREF: _RaiseException+2FFj + nop + push cs + call near ptr ___call_terminate +_RaiseException endp + +; --------------------------------------------------------------------------- +; START OF FUNCTION CHUNK FOR _RaiseException + +loc_7514: ; CODE XREF: _RaiseException+3E9j + ; _RaiseException+46Bj + mov sp, bp + pop es + pop ds + pop di + pop si + pop bp + pop bx + pop bx + pop dx + pop cx + pop ax + retf +; END OF FUNCTION CHUNK FOR _RaiseException +; --------------------------------------------------------------------------- + db 4 dup(0), 83h, 75h + dw seg seg000 + db 14h dup(0), 0E2h, 0FFh, 2 dup(0), 3, 0, 21h, 75h + dw seg seg000 + db 2 dup(0), 4, 0 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_754B proc near ; CODE XREF: sub_759B+58p sub_759B+C4p ... + +var_1E = word ptr -1Eh +var_12 = word ptr -12h +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = word ptr 8 +arg_6 = word ptr 0Ah +arg_8 = word ptr 0Ch + + push bp + mov bp, sp + sub sp, 1Eh + push si + push di + mov ax, seg seg000 + mov bx, 7539h + nop + push cs + call near ptr ___InitExceptBlocks + mov [bp+var_12], 6 + mov ax, 1 + push ax + push [bp+arg_8] + push [bp+arg_6] + push [bp+arg_4] + push [bp+arg_2] + push [bp+arg_0] + call sub_68BC + add sp, 0Ch + mov [bp+var_12], 0 + jmp short loc_758D +; --------------------------------------------------------------------------- + nop + push cs + call near ptr ___call_terminate +; --------------------------------------------------------------------------- + db 90h +; --------------------------------------------------------------------------- + push cs + call near ptr @_CatchCleanup$qv ; _CatchCleanup(void) + +loc_758D: ; CODE XREF: sub_754B+36j + push [bp+var_1E] + nop + push cs + call near ptr ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retn +sub_754B endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_759B proc near ; CODE XREF: _CatchCleanup(void)+5Ap + ; sub_7AE5+138p + +var_8 = dword ptr -8 +var_4 = dword ptr -4 +arg_0 = dword ptr 4 + + push bp + mov bp, sp + sub sp, 8 + push si + push di + les bx, [bp+arg_0] + cmp byte ptr es:[bx+38h], 0 + jz short loc_7616 + les bx, [bp+arg_0] + test byte ptr es:[bx+16h], 2 + jz short loc_760E + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + les bx, [bp+arg_0] + les bx, es:[bx+4] + mov word ptr [bp+var_4+2], es + mov word ptr [bp+var_4], bx + push word ptr es:[bx+22h] + les bx, [bp+var_4] + push word ptr es:[bx+20h] + push word ptr es:[bx+1Eh] + mov ax, word ptr [bp+arg_0] + add ax, 3Ah ; ':' + push word ptr [bp+arg_0+2] + push ax + call sub_754B + add sp, 0Ah + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, word ptr [bp+var_8+2] + mov cx, word ptr [bp+var_8] + mov es, dx + xchg ax, bx + mov es:[bx+2], ax + mov es:[bx], cx + +loc_760E: ; CODE XREF: sub_759B+1Aj + les bx, [bp+arg_0] + mov byte ptr es:[bx+38h], 0 + +loc_7616: ; CODE XREF: sub_759B+10j + les bx, [bp+arg_0] + cmp byte ptr es:[bx+39h], 0 + jz short loc_766D + les bx, [bp+arg_0] + mov dx, es:[bx+34h] + mov ax, es:[bx+32h] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + les bx, [bp+var_8] + test byte ptr es:[bx+2], 2 + jz short loc_7665 + les bx, [bp+var_8] + test byte ptr es:[bx+8], 2 + jz short loc_7665 + les bx, [bp+var_8] + push word ptr es:[bx+22h] + les bx, [bp+var_8] + push word ptr es:[bx+20h] + push word ptr es:[bx+1Eh] + push ss + les bx, [bp+arg_0] + push word ptr es:[bx+36h] + call sub_754B + add sp, 0Ah + +loc_7665: ; CODE XREF: sub_759B+9Ej sub_759B+A8j + les bx, [bp+arg_0] + mov byte ptr es:[bx+39h], 0 + +loc_766D: ; CODE XREF: sub_759B+83j + pop di + pop si + mov sp, bp + pop bp + retn +sub_759B endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; _CatchCleanup(void) +@_CatchCleanup$qv proc far ; CODE XREF: ___call_terminate+69p + ; sub_6B93+277p ... + +var_6 = word ptr -6 +var_4 = dword ptr -4 +arg_0 = dword ptr 6 +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + sub sp, 6 + push si + push di + les bx, ss:16h + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + les bx, [bp+var_4] + mov dx, es:[bx+2] + mov ax, es:[bx] + les bx, ss:16h + mov es:[bx+2], dx + mov es:[bx], ax + les bx, [bp+var_4] + mov ax, es:[bx+24h] + mov [bp+var_6], ax + mov bx, [bp+var_6] + les ax, ss:[bx+arg_0] + mov bx, [bp+var_6] + add ax, ss:[bx+arg_6] + mov bx, ax + mov ax, es:[bx] + mov bx, [bp+var_6] + mov ss:[bx+arg_6], ax + push word ptr [bp+var_4+2] + push word ptr [bp+var_4] + call sub_759B + pop cx + pop cx + push ds + les bx, [bp+var_4] + mov ds, word ptr es:[bx+18h] + push word ptr [bp+var_4+2] + push word ptr [bp+var_4] + les bx, [bp+var_4] + call dword ptr es:[bx+1Ah] + pop cx + pop cx + pop ds + pop di + pop si + mov sp, bp + pop bp + retf +@_CatchCleanup$qv endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_76F0 proc near ; CODE XREF: sub_76F0+A0p sub_77BC+36p ... + +var_C = word ptr -0Ch +var_A = word ptr -0Ah +var_8 = dword ptr -8 +var_4 = dword ptr -4 +arg_0 = dword ptr 4 +arg_4 = word ptr 8 +arg_6 = word ptr 0Ah +arg_8 = word ptr 0Ch +arg_A = word ptr 0Eh + + push bp + mov bp, sp + sub sp, 0Ch + push si + push di + +loc_76F8: ; CODE XREF: sub_76F0+C3j + les bx, [bp+arg_0] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + mov ax, word ptr [bp+var_4] + or ax, word ptr [bp+var_4+2] + jnz short loc_7715 + xor ax, ax + jmp loc_77B6 +; --------------------------------------------------------------------------- + +loc_7715: ; CODE XREF: sub_76F0+1Ej + mov bx, [bp+arg_A] + mov dx, ss:[bx+2] + mov ax, ss:[bx] + les bx, [bp+arg_0] + add ax, es:[bx+4] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + cmp [bp+arg_4], 0 + jz short loc_7741 + les bx, [bp+var_8] + mov ax, es:[bx] + mov dx, word ptr [bp+var_8+2] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + +loc_7741: ; CODE XREF: sub_76F0+40j + push [bp+arg_8] + push [bp+arg_6] + push word ptr [bp+var_4+2] + push word ptr [bp+var_4] + push cs + call near ptr sub_6070 + add sp, 8 + or ax, ax + jnz short loc_779A + les bx, [bp+var_4] + test byte ptr es:[bx+2], 2 + jz short loc_77AF + les bx, [bp+var_4] + mov dx, word ptr [bp+var_4+2] + mov ax, word ptr [bp+var_4] + add ax, es:[bx+0Ah] + mov [bp+var_A], dx + mov [bp+var_C], ax + mov ax, [bp+var_C] + or ax, [bp+var_A] + jz short loc_77AF + lea ax, [bp+var_8] + push ax + push [bp+arg_8] + push [bp+arg_6] + xor ax, ax + push ax + push [bp+var_A] + push [bp+var_C] + call sub_76F0 + add sp, 0Ch + or ax, ax + jz short loc_77AF + +loc_779A: ; CODE XREF: sub_76F0+66j + mov bx, [bp+arg_A] + mov dx, word ptr [bp+var_8+2] + mov ax, word ptr [bp+var_8] + mov ss:[bx+2], dx + mov ss:[bx], ax + mov ax, 1 + jmp short loc_77B6 +; --------------------------------------------------------------------------- + +loc_77AF: ; CODE XREF: sub_76F0+70j sub_76F0+8Bj ... + add word ptr [bp+arg_0], 8 + jmp loc_76F8 +; --------------------------------------------------------------------------- + +loc_77B6: ; CODE XREF: sub_76F0+22j sub_76F0+BDj + pop di + pop si + mov sp, bp + pop bp + retn +sub_76F0 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_77BC proc far ; CODE XREF: sub_783F+159p + ; sub_783F+1C2p + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = dword ptr 0Ah +arg_8 = word ptr 0Eh +arg_A = word ptr 10h + + push bp + mov bp, sp + sub sp, 4 + push si + push di + mov ax, [bp+arg_0] + or ax, [bp+arg_2] + jz short loc_782D + les bx, [bp+arg_4] + mov dx, word ptr [bp+arg_4+2] + mov ax, word ptr [bp+arg_4] + add ax, es:[bx+0Ah] + mov [bp+var_2], dx + mov [bp+var_4], ax + lea ax, [bp+arg_0] + push ax + push [bp+arg_A] + push [bp+arg_8] + xor ax, ax + push ax + push [bp+var_2] + push [bp+var_4] + call sub_76F0 + add sp, 0Ch + or ax, ax + jnz short loc_782D + les bx, [bp+arg_4] + mov dx, word ptr [bp+arg_4+2] + mov ax, word ptr [bp+arg_4] + add ax, es:[bx+0Ch] + mov [bp+var_2], dx + mov [bp+var_4], ax + lea ax, [bp+arg_0] + push ax + push [bp+arg_A] + push [bp+arg_8] + mov ax, 1 + push ax + push [bp+var_2] + push [bp+var_4] + call sub_76F0 + add sp, 0Ch + or ax, ax + jz short loc_7835 + +loc_782D: ; CODE XREF: sub_77BC+Ej sub_77BC+3Ej + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + jmp short loc_7839 +; --------------------------------------------------------------------------- + +loc_7835: ; CODE XREF: sub_77BC+6Fj + xor dx, dx + xor ax, ax + +loc_7839: ; CODE XREF: sub_77BC+77j + pop di + pop si + mov sp, bp + pop bp + retf +sub_77BC endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __fastcall sub_783F(int, int, int, __int32, int, __int32, __int32, int) +sub_783F proc near ; CODE XREF: __ExceptionHandler+248p + +var_18 = word ptr -18h +var_16 = word ptr -16h +var_14 = word ptr -14h +var_12 = word ptr -12h +var_10 = word ptr -10h +src = dword ptr -0Eh +n = word ptr -0Ah +var_8 = dword ptr -8 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 4 +arg_6 = dword ptr 0Ah +arg_A = word ptr 0Eh +arg_E = word ptr 12h + + push bp + mov bp, sp + sub sp, 18h + push si + push di + les bx, dword ptr [bp+arg_0] + mov dx, es:[bx+6] + mov ax, es:[bx+4] + mov [bp+var_2], dx + mov [bp+var_4], ax + les bx, [bp+arg_6] + mov es:[bx+34h], dx + mov es:[bx+32h], ax + mov ax, [bp+var_4] + or ax, [bp+var_2] + jnz short loc_786E + jmp loc_7ADF +; --------------------------------------------------------------------------- + +loc_786E: ; CODE XREF: sub_783F+2Aj + les bx, dword ptr [bp+arg_0] + test byte ptr es:[bx+8], 80h + jz short loc_787B + jmp loc_7ADF +; --------------------------------------------------------------------------- + +loc_787B: ; CODE XREF: sub_783F+37j + les bx, dword ptr [bp+arg_0] + mov ax, es:[bx+8] + and ax, 1 + neg ax + sbb ax, ax + inc ax + mov [bp+var_14], ax + mov dx, word ptr [bp+arg_6+2] + mov ax, word ptr [bp+arg_6] + add ax, 3Ah ; ':' + mov word ptr [bp+src+2], dx + mov word ptr [bp+src], ax + les bx, [bp+arg_6] + mov byte ptr es:[bx+39h], 1 + les bx, dword ptr [bp+arg_A] + mov ax, es:[bx] + add ax, [bp+arg_E] + les bx, [bp+arg_6] + mov es:[bx+36h], ax + mov dx, [bp+var_2] + mov ax, [bp+var_4] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + les bx, [bp+var_8] + mov ax, es:[bx] + mov [bp+n], ax + les bx, [bp+var_8] + mov cx, es:[bx+2] + mov dx, cx + test cl, 30h + jz short loc_78EF + les bx, [bp+var_8] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + les bx, [bp+var_8] + mov dx, es:[bx+2] + +loc_78EF: ; CODE XREF: sub_783F+96j + test cl, 10h + jz short loc_7917 + les bx, [bp+arg_6] + test byte ptr es:[bx+0Ch], 1 + jz short loc_7917 + push [bp+n] + xor ax, ax + push ax ; n + push ss ; c + les bx, [bp+arg_6] + push word ptr es:[bx+36h] + nop + push cs ; s + call _memset + add sp, 8 + jmp loc_7A42 +; --------------------------------------------------------------------------- + +loc_7917: ; CODE XREF: sub_783F+B3j sub_783F+BDj + test dl, 1 + jnz short loc_791F + jmp loc_79C3 +; --------------------------------------------------------------------------- + +loc_791F: ; CODE XREF: sub_783F+DBj + test cl, 30h + jnz short loc_7927 + jmp loc_79C3 +; --------------------------------------------------------------------------- + +loc_7927: ; CODE XREF: sub_783F+E3j + test cl, 20h + jz short loc_792E + jmp short loc_7951 +; --------------------------------------------------------------------------- + +loc_792E: ; CODE XREF: sub_783F+EBj + les bx, [bp+src] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+src+2], dx + mov word ptr [bp+src], ax + les bx, [bp+arg_6] + test byte ptr es:[bx+15h], 10h + jz short loc_7958 + mov ax, word ptr [bp+src] + mov word ptr [bp+src+2], ds + mov word ptr [bp+src], ax + +loc_7951: ; CODE XREF: sub_783F+EDj + mov [bp+var_14], 1 + jmp short $+2 + +loc_7958: ; CODE XREF: sub_783F+107j + push word ptr [bp+var_8+2] + push word ptr [bp+var_8] + les bx, [bp+arg_6] + push word ptr es:[bx+12h] + push word ptr es:[bx+10h] + push cs + call near ptr sub_6070 + add sp, 8 + or ax, ax + jnz short loc_79B9 + mov dx, word ptr [bp+src+2] + mov ax, word ptr [bp+src] + mov [bp+var_16], dx + mov [bp+var_18], ax + push word ptr [bp+var_8+2] + push word ptr [bp+var_8] + les bx, [bp+arg_6] + push word ptr es:[bx+12h] + push word ptr es:[bx+10h] + push word ptr [bp+src+2] + push word ptr [bp+src] + push cs + call near ptr sub_77BC + add sp, 0Ch + mov word ptr [bp+src+2], dx + mov word ptr [bp+src], ax + mov dx, word ptr [bp+src+2] + mov ax, word ptr [bp+src] + cmp dx, [bp+var_16] + jnz short loc_79B4 + cmp ax, [bp+var_18] + jz short loc_79B9 + +loc_79B4: ; CODE XREF: sub_783F+16Ej + mov [bp+var_14], 1 + +loc_79B9: ; CODE XREF: sub_783F+133j + ; sub_783F+173j + push [bp+n] + push ss + lea ax, [bp+src] + jmp loc_7A8D +; --------------------------------------------------------------------------- + +loc_79C3: ; CODE XREF: sub_783F+DDj sub_783F+E5j + les bx, [bp+arg_6] + test byte ptr es:[bx+14h], 1 + jz short loc_7A49 + push word ptr [bp+var_8+2] + push word ptr [bp+var_8] + les bx, [bp+arg_6] + push word ptr es:[bx+12h] + push word ptr es:[bx+10h] + push cs + call near ptr sub_6070 + add sp, 8 + or ax, ax + jnz short loc_7A12 + push word ptr [bp+var_8+2] + push word ptr [bp+var_8] + les bx, [bp+arg_6] + push word ptr es:[bx+12h] + push word ptr es:[bx+10h] + push word ptr [bp+src+2] + push word ptr [bp+src] + push cs + call near ptr sub_77BC + add sp, 0Ch + mov word ptr [bp+src+2], dx + mov word ptr [bp+src], ax + mov [bp+var_14], 1 + +loc_7A12: ; CODE XREF: sub_783F+1A8j + les bx, [bp+var_8] + test byte ptr es:[bx+8], 1 + jz short loc_7A90 + les bx, dword ptr [bp+arg_0] + push word ptr es:[bx+0Eh] + les bx, dword ptr [bp+arg_0] + push word ptr es:[bx+0Ch] + push word ptr es:[bx+0Ah] + push word ptr [bp+src+2] + push word ptr [bp+src] + push ss + les bx, [bp+arg_6] + push word ptr es:[bx+36h] + call sub_656E + add sp, 0Eh + +loc_7A42: ; CODE XREF: sub_783F+D5j + ; sub_783F+227j + mov [bp+var_14], 1 + jmp short loc_7AA9 +; --------------------------------------------------------------------------- + +loc_7A49: ; CODE XREF: sub_783F+18Cj + test cl, 20h + jz short loc_7A68 + push [bp+n] ; n + push ss + lea ax, [bp+src] + push ax ; src + push ss + les bx, [bp+arg_6] + push word ptr es:[bx+36h] ; dest + nop + push cs + call near ptr _memcpy + add sp, 0Ah + jmp short loc_7A42 +; --------------------------------------------------------------------------- + +loc_7A68: ; CODE XREF: sub_783F+20Dj + test cl, 10h + jz short loc_7A90 + les bx, [bp+arg_6] + mov ax, es:[bx+0Eh] + cmp ax, [bp+n] + jz short loc_7A90 + les bx, [bp+src] + mov ax, es:[bx] + mov [bp+var_10], ds + mov [bp+var_12], ax + mov ax, 4 + push ax + push ss + lea ax, [bp+var_12] + +loc_7A8D: ; CODE XREF: sub_783F+181j + push ax + jmp short loc_7A99 +; --------------------------------------------------------------------------- + +loc_7A90: ; CODE XREF: sub_783F+1DBj + ; sub_783F+22Cj ... + push [bp+n] ; n + push word ptr [bp+src+2] + push word ptr [bp+src] ; src + +loc_7A99: ; CODE XREF: sub_783F+24Fj + push ss + les bx, [bp+arg_6] + push word ptr es:[bx+36h] ; dest + nop + push cs + call near ptr _memcpy + add sp, 0Ah + +loc_7AA9: ; CODE XREF: sub_783F+208j + cmp [bp+var_14], 0 + jnz short loc_7ADF + les bx, [bp+var_8] + test byte ptr es:[bx+8], 2 + jz short loc_7AD7 + les bx, [bp+var_8] + push word ptr es:[bx+22h] + les bx, [bp+var_8] + push word ptr es:[bx+20h] + push word ptr es:[bx+1Eh] + push word ptr [bp+src+2] + push word ptr [bp+src] + call sub_754B + add sp, 0Ah + +loc_7AD7: ; CODE XREF: sub_783F+278j + les bx, [bp+arg_6] + mov byte ptr es:[bx+38h], 0 + +loc_7ADF: ; CODE XREF: sub_783F+2Cj sub_783F+39j ... + pop di + pop si + mov sp, bp + pop bp + retn +sub_783F endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_7AE5 proc near ; CODE XREF: __Local_unwind+15p + ; __Return_unwind+15p ... + +var_20 = word ptr -20h +var_1E = word ptr -1Eh +var_1C = word ptr -1Ch +var_1A = dword ptr -1Ah +var_16 = dword ptr -16h +var_12 = word ptr -12h +var_10 = word ptr -10h +var_E = word ptr -0Eh +var_C = word ptr -0Ch +var_A = word ptr -0Ah +var_8 = word ptr -8 +var_6 = word ptr -6 +var_4 = dword ptr -4 +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = word ptr 8 +arg_8 = word ptr 0Ch +arg_A = word ptr 0Eh +arg_C = word ptr 10h +arg_E = word ptr 12h + + push bp + mov bp, sp + sub sp, 20h + push si + push di + mov [bp+var_E], 0 + les bx, ss:16h + mov si, [bp+arg_0] + mov ax, ss:[si+arg_A] + mov es:[bx+6], ax + mov [bp+var_C], ax + les bx, ss:16h + mov si, [bp+arg_0] + mov ax, ss:[si+arg_C] + mov es:[bx+8], ax + mov bx, [bp+arg_0] + mov dx, ss:[bx+arg_4] + mov ax, ss:[bx+arg_2] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + les bx, [bp+var_4] + mov ax, [bp+arg_0] + sub ax, es:[bx+4] + mov [bp+var_A], ax + mov bx, [bp+arg_0] + mov ax, ss:[bx+arg_8] + jmp loc_7C8A +; --------------------------------------------------------------------------- + +loc_7B3D: ; CODE XREF: sub_7AE5+1B6j + mov ax, [bp+var_6] + mov [bp+var_12], ax + les bx, [bp+var_4] + add bx, [bp+var_12] + mov ax, es:[bx] + mov [bp+var_8], ax + add [bp+var_12], 2 + les bx, [bp+var_4] + add bx, [bp+var_12] + mov ax, es:[bx] + mov [bp+var_10], ax + add [bp+var_12], 2 + mov bx, [bp+arg_0] + mov ax, [bp+var_8] + mov ss:[bx+arg_8], ax + mov bx, [bp+var_10] + cmp bx, 5 + jbe short loc_7B78 + jmp loc_7C87 +; --------------------------------------------------------------------------- + +loc_7B78: ; CODE XREF: sub_7AE5+8Ej + add bx, bx + jmp cs:off_7CA4[bx] + +loc_7B7F: ; DATA XREF: seg000:off_7CA4o + les bx, [bp+var_4] + add bx, [bp+var_12] + mov dx, es:[bx+6] + mov ax, es:[bx+4] + mov word ptr dword_13FB0+2, dx + mov word ptr dword_13FB0, ax + mov bx, [bp+arg_0] + mov ss:[bx+arg_E], 1 + push ds + pop es + assume es:dseg + push ds + mov ds, [bp+var_C] + push bp + mov bp, [bp+var_A] + call es:dword_13FB0 + pop bp + pop ds + mov bx, [bp+arg_0] + mov ss:[bx+arg_E], 0 + jmp loc_7C87 +; --------------------------------------------------------------------------- + +loc_7BBA: ; CODE XREF: sub_7AE5+95j + ; DATA XREF: seg000:7CACo + add [bp+var_12], 4 + mov dx, ss:18h + mov ax, ss:16h + jmp short loc_7BE9 +; --------------------------------------------------------------------------- + +loc_7BC9: ; CODE XREF: sub_7AE5+11Cj + les bx, [bp+var_16] + assume es:nothing + mov ax, es:[bx+24h] + cmp ax, [bp+arg_0] + jnz short loc_7BE3 + les bx, [bp+var_16] + mov ax, es:[bx+2Ah] + cmp ax, [bp+var_6] + jnz short loc_7BE3 + jmp short loc_7C03 +; --------------------------------------------------------------------------- + +loc_7BE3: ; CODE XREF: sub_7AE5+EEj sub_7AE5+FAj + mov dx, word ptr [bp+var_16+2] + mov ax, word ptr [bp+var_16] + +loc_7BE9: ; CODE XREF: sub_7AE5+E2j + mov word ptr [bp+var_1A+2], dx + mov word ptr [bp+var_1A], ax + les bx, [bp+var_1A] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_16+2], dx + mov word ptr [bp+var_16], ax + or ax, dx + jnz short loc_7BC9 + +loc_7C03: ; CODE XREF: sub_7AE5+FCj + les bx, [bp+var_16] + mov dx, es:[bx+2] + mov ax, es:[bx] + les bx, [bp+var_1A] + mov es:[bx+2], dx + mov es:[bx], ax + push word ptr [bp+var_16+2] + push word ptr [bp+var_16] + call sub_759B + pop cx + pop cx + push ds + les bx, [bp+var_16] + mov ds, word ptr es:[bx+18h] + push word ptr [bp+var_16+2] + push word ptr [bp+var_16] + les bx, [bp+var_16] + call dword ptr es:[bx+1Ah] + pop cx + pop cx + pop ds + jmp short loc_7C87 +; --------------------------------------------------------------------------- + +loc_7C3C: ; CODE XREF: sub_7AE5+95j + ; DATA XREF: seg000:7CAEo + les bx, [bp+var_4] + add bx, [bp+var_12] + mov ax, es:[bx] + mov [bp+var_1C], ax + add [bp+var_12], 2 + les bx, [bp+var_4] + add bx, [bp+var_12] + mov ax, es:[bx] + mov [bp+var_1E], ds + mov [bp+var_20], ax + mov ax, word ptr [bp+var_4+2] + mov dx, [bp+var_20] + mov [bp+var_1E], ax + mov [bp+var_20], dx + push [bp+var_A] + push [bp+arg_0] + mov ax, [bp+var_1C] + add ax, [bp+var_E] + cwd + push dx + push ax + push [bp+var_1E] + push [bp+var_20] + call sub_86BB + add sp, 0Ch + mov [bp+var_E], ax + jmp short $+2 + +loc_7C87: ; CODE XREF: sub_7AE5+90j sub_7AE5+95j ... + mov ax, [bp+var_8] + +loc_7C8A: ; CODE XREF: sub_7AE5+55j + mov [bp+var_6], ax + cmp [bp+var_6], 0 + jz short loc_7C9E + mov ax, [bp+var_6] + cmp ax, [bp+arg_2] + jz short loc_7C9E + jmp loc_7B3D +; --------------------------------------------------------------------------- + +loc_7C9E: ; CODE XREF: sub_7AE5+1ACj + ; sub_7AE5+1B4j + pop di + pop si + mov sp, bp + pop bp + retn +sub_7AE5 endp + +; --------------------------------------------------------------------------- +off_7CA4 dw offset loc_7B7F ; DATA XREF: sub_7AE5+95r + dw offset loc_7C87 + dw offset loc_7C87 + dw offset loc_7C87 + dw offset loc_7BBA + dw offset loc_7C3C + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__Local_unwind proc far + +var_2 = word ptr -2 +arg_0 = word ptr 6 + + push bp + mov bp, sp + sub sp, 2 + push si + push di + mov ax, ss:14h + mov [bp+var_2], ax + push [bp+arg_0] + push [bp+var_2] + call sub_7AE5 + pop cx + pop cx + pop di + pop si + mov sp, bp + pop bp + retf +__Local_unwind endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__Return_unwind proc far + +var_2 = word ptr -2 + + push bp + mov bp, sp + sub sp, 2 + push si + push di + mov ax, ss:14h + mov [bp+var_2], ax + xor ax, ax + push ax + push [bp+var_2] + call sub_7AE5 + pop cx + pop cx + mov bx, [bp+var_2] + mov ax, ss:[bx] + mov ss:14h, ax + pop di + pop si + mov sp, bp + pop bp + retf +__Return_unwind endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_7CFA proc near ; CODE XREF: __ExceptionHandler+1B1p + +var_8 = word ptr -8 +var_6 = word ptr -6 +var_4 = dword ptr -4 +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = dword ptr 8 + + push bp + mov bp, sp + sub sp, 8 + push si + push di + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + add ax, 4 + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + jmp short loc_7D68 +; --------------------------------------------------------------------------- + +loc_7D13: ; CODE XREF: sub_7CFA+78j + les bx, [bp+var_4] + mov dx, es:[bx+6] + mov ax, es:[bx+4] + mov [bp+var_6], dx + mov [bp+var_8], ax + mov ax, [bp+var_8] + or ax, [bp+var_6] + jz short loc_7D5C + xor ax, ax + push ax + les bx, [bp+arg_4] + push word ptr es:[bx+0Ch] + push [bp+var_6] + push [bp+var_8] + les bx, [bp+arg_4] + push word ptr es:[bx+0Ah] + push word ptr es:[bx+8] + les bx, [bp+arg_4] + push word ptr es:[bx+6] + push word ptr es:[bx+4] + call sub_6469 + add sp, 10h + or ax, ax + jz short loc_7D64 + +loc_7D5C: ; CODE XREF: sub_7CFA+30j + mov dx, word ptr [bp+var_4+2] + mov ax, word ptr [bp+var_4] + jmp short loc_7D78 +; --------------------------------------------------------------------------- + +loc_7D64: ; CODE XREF: sub_7CFA+60j + add word ptr [bp+var_4], 10h + +loc_7D68: ; CODE XREF: sub_7CFA+17j + les bx, [bp+var_4] + mov ax, es:[bx] + or ax, es:[bx+2] + jnz short loc_7D13 + xor dx, dx + xor ax, ax + +loc_7D78: ; CODE XREF: sub_7CFA+68j + pop di + pop si + mov sp, bp + pop bp + retn +sub_7CFA endp + +; --------------------------------------------------------------------------- + db 2 dup(2Ah), 42h, 2 dup(43h), 78h, 68h, 31h + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__ExceptionHandler proc far ; DATA XREF: ___InitExceptBlocks+28o + +var_38 = word ptr -38h +var_36 = word ptr -36h +var_34 = word ptr -34h +var_32 = word ptr -32h +var_30 = word ptr -30h +var_2E = word ptr -2Eh +var_2C = word ptr -2Ch +var_2A = word ptr -2Ah +var_28 = word ptr -28h +var_26 = dword ptr -26h +var_20 = dword ptr -20h +var_1C = word ptr -1Ch +var_1A = word ptr -1Ah +var_18 = word ptr -18h +var_16 = word ptr -16h +var_14 = word ptr -14h +var_12 = word ptr -12h +var_10 = dword ptr -10h +var_C = dword ptr -0Ch +var_8 = word ptr -8 +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch +arg_8 = word ptr 0Eh +arg_A = word ptr 10h +arg_E = word ptr 14h +arg_10 = word ptr 16h +arg_12 = word ptr 18h +arg_14 = word ptr 1Ah + + push bp + mov bp, sp + sub sp, 38h + push si + push di + mov ax, [bp+arg_0] + mov [bp+var_2], ax + mov ax, [bp+arg_4] + mov [bp+var_4], ax + mov dx, [bp+arg_8] + mov ax, [bp+arg_6] + mov [bp+var_6], dx + mov [bp+var_8], ax + mov bx, [bp+var_2] + mov dx, ss:[bx+arg_14] + mov ax, ss:[bx+arg_12] + mov word ptr [bp+var_C+2], dx + mov word ptr [bp+var_C], ax + mov bx, [bp+var_4] + mov dx, ss:[bx+arg_2] + mov ax, ss:[bx+arg_0] + mov word ptr [bp+var_10+2], dx + mov word ptr [bp+var_10], ax + les bx, [bp+var_10] + mov ax, [bp+var_4] + sub ax, es:[bx+4] + mov [bp+var_16], ax + mov bx, [bp+var_4] + mov ax, ss:[bx+arg_4] + mov [bp+var_18], ax + les bx, ss:16h + mov si, [bp+var_4] + mov ax, ss:[si+arg_8] + mov es:[bx+6], ax + mov [bp+var_1A], ax + les bx, ss:16h + mov si, [bp+var_4] + mov ax, ss:[si+arg_A] + mov es:[bx+8], ax + mov [bp+var_1C], ax + mov bx, [bp+var_2] + test byte ptr ss:[bx+4], 6 + jnz short loc_7E12 + jmp loc_7EBA +; --------------------------------------------------------------------------- + +loc_7E12: ; CODE XREF: __ExceptionHandler+87j + xor ax, ax + push ax + push [bp+var_4] + call sub_7AE5 + pop cx + pop cx + mov bx, [bp+var_2] + cmp word ptr ss:[bx+2], 0EEFh + jz short loc_7E2B + jmp loc_80ED +; --------------------------------------------------------------------------- + +loc_7E2B: ; CODE XREF: __ExceptionHandler+A0j + cmp word ptr ss:[bx], 0FACEh + jz short loc_7E35 + jmp loc_80ED +; --------------------------------------------------------------------------- + +loc_7E35: ; CODE XREF: __ExceptionHandler+AAj + les bx, [bp+var_10] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_20+2], dx + mov word ptr [bp+var_20], ax + mov ax, word ptr [bp+var_20] + or ax, word ptr [bp+var_20+2] + jnz short loc_7E50 + jmp loc_80ED +; --------------------------------------------------------------------------- + +loc_7E50: ; CODE XREF: __ExceptionHandler+C5j + jmp short loc_7E8E +; --------------------------------------------------------------------------- + +loc_7E52: ; CODE XREF: __ExceptionHandler+112j + mov ax, 1 + push ax + les bx, [bp+var_C] + push word ptr es:[bx+0Ch] + les bx, [bp+var_20] + push word ptr es:[bx+2] + push word ptr es:[bx] + les bx, [bp+var_C] + push word ptr es:[bx+0Ah] + push word ptr es:[bx+8] + les bx, [bp+var_C] + push word ptr es:[bx+6] + push word ptr es:[bx+4] + call sub_6469 + add sp, 10h + or ax, ax + jz short loc_7E8A + jmp loc_80ED +; --------------------------------------------------------------------------- + +loc_7E8A: ; CODE XREF: __ExceptionHandler+FFj + add word ptr [bp+var_20], 4 + +loc_7E8E: ; CODE XREF: __ExceptionHandler:loc_7E50j + les bx, [bp+var_20] + mov ax, es:[bx] + or ax, es:[bx+2] + jnz short loc_7E52 + mov ax, ss:14h + mov [bp-22h], ax + mov bx, [bp+var_4] + mov ax, ss:[bx] + mov ss:14h, ax + nop + push cs + call near ptr ___call_unexpected +; --------------------------------------------------------------------------- + mov ax, [bp-22h] + mov ss:14h, ax + jmp loc_80ED +; --------------------------------------------------------------------------- + +loc_7EBA: ; CODE XREF: __ExceptionHandler+89j + mov bx, [bp+var_4] + mov ax, ss:[bx+arg_6] + jmp loc_80E1 +; --------------------------------------------------------------------------- + +loc_7EC4: ; CODE XREF: __ExceptionHandler+364j + mov ax, [bp+var_12] + mov word ptr [bp+var_20], ax + les bx, [bp+var_10] + add bx, word ptr [bp+var_20] + mov ax, es:[bx] + mov [bp+var_14], ax + add word ptr [bp+var_20], 2 + les bx, [bp+var_10] + add bx, word ptr [bp+var_20] + mov ax, es:[bx] + mov word ptr [bp+var_20+2], ax + add word ptr [bp+var_20], 2 + mov bx, word ptr [bp+var_20+2] + cmp bx, 5 + jbe short loc_7EF5 + jmp loc_80DE +; --------------------------------------------------------------------------- + +loc_7EF5: ; CODE XREF: __ExceptionHandler+16Aj + add bx, bx + jmp cs:off_80F6[bx] + +loc_7EFC: ; DATA XREF: seg000:80FCo + mov bx, [bp+var_2] + cmp word ptr ss:[bx+2], 0EEFh + jz short loc_7F0A + jmp loc_80DE +; --------------------------------------------------------------------------- + +loc_7F0A: ; CODE XREF: __ExceptionHandler+17Fj + cmp word ptr ss:[bx], 0FACEh + jz short loc_7F14 + jmp loc_80DE +; --------------------------------------------------------------------------- + +loc_7F14: ; CODE XREF: __ExceptionHandler+189j + les bx, [bp+var_10] + add bx, word ptr [bp+var_20] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_26], dx + mov [bp+var_28], ax + add word ptr [bp+var_20], 4 + push word ptr [bp+var_C+2] + push word ptr [bp+var_C] + push word ptr [bp+var_26] + push [bp+var_28] + call sub_7CFA + add sp, 8 + mov [bp-22h], dx + mov word ptr [bp+var_26+2], ax + mov ax, word ptr [bp+var_26+2] + or ax, [bp-22h] + jnz short loc_7F4E + jmp loc_80DE +; --------------------------------------------------------------------------- + +loc_7F4E: ; CODE XREF: __ExceptionHandler+1C3j + les bx, [bp+var_C] + mov ax, [bp+var_4] + mov es:[bx+24h], ax + les bx, [bp+var_C] + mov dx, [bp-22h] + mov ax, word ptr [bp+var_26+2] + mov es:[bx+28h], dx + mov es:[bx+26h], ax + les bx, [bp+var_C] + mov ax, word ptr [bp+var_20] + mov es:[bx+2Ah], ax + mov ax, [bp+var_12] + mov [bp+var_30], ax + mov ax, word ptr [bp+var_20] + mov [bp+var_2E], ax + les bx, [bp+var_26+2] + +loc_7F82: ; CODE XREF: __ExceptionHandler+355j + mov dx, es:[bx+2] ; int + mov ax, es:[bx] + mov [bp+var_2A], dx + mov [bp+var_2C], ax + push [bp+var_2] + push [bp+var_4] + push cs + call near ptr __Global_unwind + pop cx + pop cx + push [bp+var_30] + push [bp+var_4] + call sub_7AE5 + pop cx + pop cx + mov bx, [bp+var_4] + mov ax, [bp+var_2E] ; int + mov ss:[bx+arg_6], ax + cmp word ptr [bp+var_20+2], 3 + jnz short loc_7FD4 + push [bp+var_16] + push word ptr [bp+var_26] ; __int32 + push [bp+var_28] ; int + push word ptr [bp+var_C+2] + push word ptr [bp+var_C] ; __int32 + push [bp+var_4] + push word ptr [bp-22h] ; __int32 + push word ptr [bp+var_26+2] ; int + call sub_783F + add sp, 10h + +loc_7FD4: ; CODE XREF: __ExceptionHandler+22Ej + mov dx, [bp+var_2A] + mov ax, [bp+var_2C] + mov si, [bp+var_1C] + mov ds, [bp+var_1A] + mov bx, [bp+var_18] + mov cx, [bp+var_16] + push cs + call near ptr ___JumpToCatch__ + jmp loc_80DE +; --------------------------------------------------------------------------- + +loc_7FED: ; CODE XREF: __ExceptionHandler+171j + ; DATA XREF: seg000:80F8o + mov bx, [bp+var_2] + cmp word ptr ss:[bx+2], 0EEFh + jnz short loc_8002 + cmp word ptr ss:[bx], 0FACEh + jnz short loc_8002 + jmp loc_80DE +; --------------------------------------------------------------------------- + +loc_8002: ; CODE XREF: __ExceptionHandler+270j + ; __ExceptionHandler+277j + mov ax, [bp+var_2] + mov [bp+var_36], ax + mov dx, [bp+var_6] + mov ax, [bp+var_8] + mov [bp+var_32], dx + mov [bp+var_34], ax + mov bx, [bp+var_2] + mov dx, ss:[bx+2] + mov ax, ss:[bx] + mov bx, [bp+var_4] + mov ss:[bx+arg_10], dx + mov ss:[bx+arg_E], ax + lea ax, [bp+var_36] + mov bx, [bp+var_4] + mov ss:[bx+arg_12], ax + les bx, [bp+var_10] + add bx, word ptr [bp+var_20] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr dword_13FB4+2, dx + mov word ptr dword_13FB4, ax + mov ax, ds + mov es, ax + assume es:dseg + push si + mov si, [bp+var_1C] + push ds + mov ds, [bp+var_1A] + push bp + mov bp, [bp+var_16] + call es:dword_13FB4 + pop bp + pop ds + pop si + mov [bp+var_38], ax + jmp short loc_8099 +; --------------------------------------------------------------------------- + +loc_8064: ; CODE XREF: __ExceptionHandler+171j + ; DATA XREF: seg000:80FAo + mov bx, [bp+var_2] + cmp word ptr ss:[bx+2], 0EEFh + jnz short loc_8078 + cmp word ptr ss:[bx], 0FACEh + jnz short loc_8078 + jmp short loc_80DE +; --------------------------------------------------------------------------- + +loc_8078: ; CODE XREF: __ExceptionHandler+2E7j + ; __ExceptionHandler+2EEj + mov bx, [bp+var_2] + mov dx, ss:[bx+2] + mov ax, ss:[bx] + mov bx, [bp+var_4] + mov ss:[bx+arg_10], dx + mov ss:[bx+arg_E], ax + les bx, [bp+var_10] + assume es:nothing + add bx, word ptr [bp+var_20] + mov ax, es:[bx] + mov [bp+var_38], ax + +loc_8099: ; CODE XREF: __ExceptionHandler+2DCj + cmp [bp+var_38], 0 + jge short loc_80B7 + mov bx, [bp+var_2] + test byte ptr ss:[bx+4], 1 + jz short loc_80B3 + mov bx, [bp+var_4] + mov ax, [bp+var_14] + mov ss:[bx+arg_6], ax + +loc_80B3: ; CODE XREF: __ExceptionHandler+321j + xor ax, ax + jmp short loc_80F0 +; --------------------------------------------------------------------------- + +loc_80B7: ; CODE XREF: __ExceptionHandler+317j + cmp [bp+var_38], 0 + jnz short loc_80BF + jmp short loc_80DE +; --------------------------------------------------------------------------- + +loc_80BF: ; CODE XREF: __ExceptionHandler+335j + mov bx, [bp+var_4] + mov ss:[bx+arg_12], 0 + add word ptr [bp+var_20], 4 + mov ax, [bp+var_14] + mov [bp+var_2E], ax + mov [bp+var_30], ax + les bx, [bp+var_10] + add bx, word ptr [bp+var_20] + jmp loc_7F82 +; --------------------------------------------------------------------------- + +loc_80DE: ; CODE XREF: __ExceptionHandler+16Cj + ; __ExceptionHandler+171j ... + mov ax, [bp+var_14] + +loc_80E1: ; CODE XREF: __ExceptionHandler+13Bj + mov [bp+var_12], ax + cmp [bp+var_12], 0 + jz short loc_80ED + jmp loc_7EC4 +; --------------------------------------------------------------------------- + +loc_80ED: ; CODE XREF: __ExceptionHandler+A2j + ; __ExceptionHandler+ACj ... + mov ax, 1 + +loc_80F0: ; CODE XREF: __ExceptionHandler+32Fj + pop di + pop si + mov sp, bp + pop bp + retf +__ExceptionHandler endp + +; --------------------------------------------------------------------------- +off_80F6 dw offset loc_80DE ; DATA XREF: __ExceptionHandler+171r + dw offset loc_7FED + dw offset loc_8064 + dw offset loc_7EFC + dw offset loc_80DE + dw offset loc_80DE + db 4 dup(0), 95h, 81h + dw seg seg000 + db 14h dup(0), 0A5h, 81h + dw seg seg000 + db 14h dup(0), 0E2h, 0FFh, 2 dup(0), 3, 0, 1Ah, 81h + dw seg seg000 + db 2 dup(0), 4, 0, 6, 0, 3, 0, 2, 81h + dw seg seg000 + db 6, 0, 4, 0 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_8150 proc far ; CODE XREF: sub_823D+50p + +var_1E = word ptr -1Eh +var_12 = word ptr -12h +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = dword ptr 0Ah +arg_8 = word ptr 0Eh + + push bp + mov bp, sp + sub sp, 1Eh + push si + push di + mov ax, seg seg000 + mov bx, 8132h + nop + push cs + call near ptr ___InitExceptBlocks + mov [bp+var_12], 6 + mov [bp+var_12], 12h + push [bp+arg_8] + les bx, [bp+arg_4] + push word ptr es:[bx+22h] + les bx, [bp+arg_4] + push word ptr es:[bx+20h] + push word ptr es:[bx+1Eh] + push [bp+arg_2] + push [bp+arg_0] + call sub_68BC + add sp, 0Ch + mov [bp+var_12], 6 + jmp short loc_819E +; --------------------------------------------------------------------------- + nop + push cs + call near ptr ___call_terminate +; --------------------------------------------------------------------------- + push cs + call near ptr @_CatchCleanup$qv ; _CatchCleanup(void) + +loc_819E: ; CODE XREF: sub_8150+43j + mov [bp+var_12], 0 + jmp short loc_81AE +; --------------------------------------------------------------------------- + nop + push cs + call near ptr ___call_terminate +; --------------------------------------------------------------------------- + push cs + call near ptr @_CatchCleanup$qv ; _CatchCleanup(void) + +loc_81AE: ; CODE XREF: sub_8150+53j + push [bp+var_1E] + nop + push cs + call near ptr ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf +sub_8150 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_81BC proc far ; CODE XREF: sub_823D+DCp + ; sub_823D+162p ... + +var_8 = dword ptr -8 +var_4 = dword ptr -4 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = dword ptr 0Ah +arg_8 = word ptr 0Eh +arg_C = word ptr 12h +arg_E = word ptr 14h +arg_10 = word ptr 16h + + push bp + mov bp, sp + sub sp, 8 + push si + push di + mov cx, [bp+arg_C] + jmp short loc_822B +; --------------------------------------------------------------------------- + +loc_81C9: ; CODE XREF: sub_81BC+79j + les bx, [bp+arg_4] + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + add ax, es:[bx+4] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + cmp [bp+arg_E], 0 + jz short loc_81F1 + les bx, [bp+var_4] + mov ax, es:[bx] + mov dx, word ptr [bp+var_4+2] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + +loc_81F1: ; CODE XREF: sub_81BC+24j + les bx, [bp+arg_4] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + les bx, [bp+var_8] + test byte ptr es:[bx+8], 2 + jz short loc_822B + push [bp+arg_10] + xor ax, ax + push ax + xor ax, ax + push ax + push cx + push word ptr [bp+var_8+2] + push word ptr [bp+var_8] + push word ptr [bp+var_4+2] + push word ptr [bp+var_4] + nop + push cs + call near ptr sub_823D + add sp, 10h + xor cx, cx + +loc_822B: ; CODE XREF: sub_81BC+Bj sub_81BC+4Dj + sub word ptr [bp+arg_4], 8 + mov ax, word ptr [bp+arg_4] + cmp ax, [bp+arg_8] + jnb short loc_81C9 + pop di + pop si + mov sp, bp + pop bp + retf +sub_81BC endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_823D proc far ; CODE XREF: sub_81BC+67p + ; sub_823D+25Ep ... + +var_2A = word ptr -2Ah +var_28 = word ptr -28h +var_26 = word ptr -26h +var_24 = word ptr -24h +var_22 = dword ptr -22h +var_1E = word ptr -1Eh +var_1C = word ptr -1Ch +var_1A = word ptr -1Ah +var_18 = dword ptr -18h +var_14 = word ptr -14h +var_12 = word ptr -12h +var_10 = dword ptr -10h +var_C = word ptr -0Ch +var_A = word ptr -0Ah +var_8 = dword ptr -8 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = dword ptr 0Ah +arg_8 = word ptr 0Eh +arg_A = word ptr 10h +arg_C = word ptr 12h +arg_E = word ptr 14h + + push bp + mov bp, sp + sub sp, 2Ah + push si + push di + cmp [bp+arg_C], 0 + jz short loc_8254 + les bx, [bp+arg_4] + mov ax, es:[bx+1Ah] + jmp short loc_825B +; --------------------------------------------------------------------------- + +loc_8254: ; CODE XREF: sub_823D+Cj + les bx, [bp+arg_4] + mov ax, es:[bx+1Ch] + +loc_825B: ; CODE XREF: sub_823D+15j + mov [bp+var_1A], 0 + mov [bp+var_1C], ax + mov ax, [bp+arg_8] + or ax, [bp+arg_A] + jz short loc_827D + mov dx, [bp+arg_A] + mov ax, [bp+arg_8] + cmp dx, [bp+var_1A] + jb short loc_8296 + jnz short loc_827D + cmp ax, [bp+var_1C] + jb short loc_8296 + +loc_827D: ; CODE XREF: sub_823D+2Cj sub_823D+39j + push [bp+arg_C] + push word ptr [bp+arg_4+2] + push word ptr [bp+arg_4] + push [bp+arg_2] + push [bp+arg_0] + push cs + call near ptr sub_8150 + add sp, 0Ah + jmp loc_8502 +; --------------------------------------------------------------------------- + +loc_8296: ; CODE XREF: sub_823D+37j sub_823D+3Ej + mov dx, [bp+arg_A] + mov ax, [bp+arg_8] + mov [bp+var_1A], dx + mov [bp+var_1C], ax + les bx, [bp+arg_4] + mov dx, word ptr [bp+arg_4+2] + mov ax, word ptr [bp+arg_4] + add ax, es:[bx+0Ch] + mov word ptr [bp+var_10+2], dx + mov word ptr [bp+var_10], ax + mov [bp+var_A], dx + mov [bp+var_C], ax + cmp [bp+arg_C], 0 + jz short loc_832F + +loc_82C1: ; CODE XREF: sub_823D+F0j + les bx, [bp+var_10] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov [bp+var_1E], dx + mov word ptr [bp+var_22+2], ax + mov ax, word ptr [bp+var_22+2] + or ax, [bp+var_1E] + jz short loc_832F + les bx, [bp+var_22+2] + test byte ptr es:[bx+8], 2 + jz short loc_8329 + les bx, [bp+var_22+2] + mov bx, es:[bx+1Ch] + xor ax, ax + cmp ax, [bp+var_1A] + jb short loc_8322 + jnz short loc_82F8 + cmp bx, [bp+var_1C] + jb short loc_8322 + +loc_82F8: ; CODE XREF: sub_823D+B4j + push [bp+arg_E] + mov ax, 1 + push ax + push [bp+var_1C] + push [bp+var_A] + push [bp+var_C] + mov ax, word ptr [bp+var_10] + add ax, 8 + push word ptr [bp+var_10+2] + push ax + +loc_8312: ; CODE XREF: sub_823D+2BBj + push [bp+arg_2] + push [bp+arg_0] + push cs + call near ptr sub_81BC + add sp, 12h + jmp loc_8502 +; --------------------------------------------------------------------------- + +loc_8322: ; CODE XREF: sub_823D+B2j sub_823D+B9j + sub [bp+var_1C], bx + sbb [bp+var_1A], 0 + +loc_8329: ; CODE XREF: sub_823D+A4j + add word ptr [bp+var_10], 8 + jmp short loc_82C1 +; --------------------------------------------------------------------------- + +loc_832F: ; CODE XREF: sub_823D+82j sub_823D+9Aj + les bx, [bp+arg_4] + mov dx, word ptr [bp+arg_4+2] + mov ax, word ptr [bp+arg_4] + add ax, es:[bx+0Ah] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + mov [bp+var_2], dx + mov [bp+var_4], ax + +loc_8348: ; CODE XREF: sub_823D+17Fj + les bx, [bp+var_8] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov [bp+var_1E], dx + mov word ptr [bp+var_22+2], ax + mov ax, word ptr [bp+var_22+2] + or ax, [bp+var_1E] + jz short loc_83BE + les bx, [bp+var_22+2] + test byte ptr es:[bx+8], 2 + jz short loc_83B8 + les bx, [bp+var_22+2] + mov bx, es:[bx+1Ch] + xor ax, ax + cmp ax, [bp+var_1A] + jb short loc_83B1 + jnz short loc_837F + cmp bx, [bp+var_1C] + jb short loc_83B1 + +loc_837F: ; CODE XREF: sub_823D+13Bj + push [bp+arg_E] + xor ax, ax + push ax + push [bp+var_1C] + push [bp+var_2] + push [bp+var_4] + mov ax, word ptr [bp+var_8] + add ax, 8 + push word ptr [bp+var_8+2] + push ax + push [bp+arg_2] + push [bp+arg_0] + push cs + call near ptr sub_81BC + add sp, 12h + cmp [bp+arg_C], 0 + jnz short loc_83AE + jmp loc_8502 +; --------------------------------------------------------------------------- + +loc_83AE: ; CODE XREF: sub_823D+16Cj + jmp loc_84E2 +; --------------------------------------------------------------------------- + +loc_83B1: ; CODE XREF: sub_823D+139j + ; sub_823D+140j + sub [bp+var_1C], bx + sbb [bp+var_1A], 0 + +loc_83B8: ; CODE XREF: sub_823D+12Bj + add word ptr [bp+var_8], 8 + jmp short loc_8348 +; --------------------------------------------------------------------------- + +loc_83BE: ; CODE XREF: sub_823D+121j + les bx, [bp+arg_4] + mov dx, word ptr [bp+arg_4+2] + mov ax, word ptr [bp+arg_4] + add ax, es:[bx+24h] + mov word ptr [bp+var_18+2], dx + mov word ptr [bp+var_18], ax + mov [bp+var_12], dx + mov [bp+var_14], ax + +loc_83D7: ; CODE XREF: sub_823D+2C2j + les bx, [bp+var_18] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_22+2], dx + mov word ptr [bp+var_22], ax + mov [bp+var_1E], 1 + les bx, [bp+var_22] + test byte ptr es:[bx+3], 4 + jz short loc_8411 + les bx, [bp+var_22] + mov ax, es:[bx+0Ah] + mov [bp+var_1E], ax + les bx, [bp+var_22] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+var_22+2], dx + mov word ptr [bp+var_22], ax + +loc_8411: ; CODE XREF: sub_823D+1B7j + les bx, [bp+var_22] + mov ax, es:[bx+1Ah] + imul [bp+var_1E] + mov bx, ax + xor ax, ax + cmp ax, [bp+var_1A] + ja short loc_8435 + jb short loc_842B + cmp bx, [bp+var_1C] + jnb short loc_8435 + +loc_842B: ; CODE XREF: sub_823D+1E7j + sub [bp+var_1C], bx + sbb [bp+var_1A], 0 + jmp loc_84FB +; --------------------------------------------------------------------------- + +loc_8435: ; CODE XREF: sub_823D+1E5j + ; sub_823D+1ECj ... + les bx, [bp+var_18] + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + add ax, es:[bx+4] + mov [bp+var_24], dx + mov [bp+var_26], ax + les bx, [bp+var_18] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov [bp+var_28], dx + mov [bp+var_2A], ax + cmp [bp+var_1E], 1 + jbe short loc_8481 + push [bp+arg_E] + push [bp+var_1A] + push [bp+var_1C] + les bx, [bp+var_18] + push word ptr es:[bx+2] + push word ptr es:[bx] + push [bp+var_24] + push [bp+var_26] + nop + push cs + call near ptr sub_8508 + add sp, 0Eh + jmp short loc_84A1 +; --------------------------------------------------------------------------- + +loc_8481: ; CODE XREF: sub_823D+21Fj + push [bp+arg_E] + mov ax, 1 + push ax + push [bp+var_1A] + push [bp+var_1C] + push [bp+var_28] + push [bp+var_2A] + push [bp+var_24] + push [bp+var_26] + push cs + call near ptr sub_823D + add sp, 10h + +loc_84A1: ; CODE XREF: sub_823D+242j + mov [bp+var_1A], 0 + mov [bp+var_1C], 0 + sub word ptr [bp+var_18], 6 + mov ax, word ptr [bp+var_18] + cmp ax, [bp+var_14] + jb short loc_84BA + jmp loc_8435 +; --------------------------------------------------------------------------- + +loc_84BA: ; CODE XREF: sub_823D+278j + push [bp+arg_E] + xor ax, ax + push ax + xor ax, ax + push ax + push [bp+var_2] + push [bp+var_4] + push word ptr [bp+var_8+2] + push word ptr [bp+var_8] + push [bp+arg_2] + push [bp+arg_0] + push cs + call near ptr sub_81BC + add sp, 12h + cmp [bp+arg_C], 0 + jz short loc_8502 + +loc_84E2: ; CODE XREF: sub_823D:loc_83AEj + push [bp+arg_E] + mov ax, 1 + push ax + xor ax, ax + push ax + push [bp+var_A] + push [bp+var_C] + push word ptr [bp+var_10+2] + push word ptr [bp+var_10] + jmp loc_8312 +; --------------------------------------------------------------------------- + +loc_84FB: ; CODE XREF: sub_823D+1F5j + add word ptr [bp+var_18], 6 + jmp loc_83D7 +; --------------------------------------------------------------------------- + +loc_8502: ; CODE XREF: sub_823D+56j sub_823D+E2j ... + pop di + pop si + mov sp, bp + pop bp + retf +sub_823D endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_8508 proc far ; CODE XREF: sub_823D+23Cp + ; sub_86BB+316p + +var_E = word ptr -0Eh +var_C = word ptr -0Ch +var_A = word ptr -0Ah +var_8 = word ptr -8 +var_6 = word ptr -6 +var_4 = dword ptr -4 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch +arg_8 = word ptr 0Eh +arg_A = word ptr 10h +arg_C = word ptr 12h + + push bp + mov bp, sp + sub sp, 0Eh + push si + push di + mov dx, [bp+arg_6] + mov ax, [bp+arg_4] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + les bx, [bp+var_4] + mov ax, es:[bx+0Ah] + mov [bp+var_6], ax + les bx, [bp+var_4] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + les bx, [bp+var_4] + mov ax, es:[bx+1Ah] + mov [bp+var_8], 0 + mov [bp+var_A], ax + mov ax, [bp+arg_8] + or ax, [bp+arg_A] + jnz short loc_8562 + mov bx, [bp+var_6] + xor cx, cx + mov dx, [bp+var_8] + mov ax, [bp+var_A] + call N_LXMUL@ + mov [bp+arg_A], dx + mov [bp+arg_8], ax + +loc_8562: ; CODE XREF: sub_8508+44j + push [bp+var_8] + push [bp+var_A] + push [bp+arg_A] + push [bp+arg_8] + call near ptr N_LUDIV@ + mov [bp+var_C], dx + mov [bp+var_E], ax + mov cx, [bp+var_C] + mov bx, [bp+var_E] + mov dx, [bp+var_8] + mov ax, [bp+var_A] + call N_LXMUL@ + sub [bp+arg_8], ax + sbb [bp+arg_A], dx + les bx, [bp+var_4] + mov bx, es:[bx] + xor cx, cx + mov dx, [bp+var_C] + mov ax, [bp+var_E] + call N_LXMUL@ + mov dx, [bp+arg_2] + add ax, [bp+arg_0] + mov [bp+arg_2], dx + mov [bp+arg_0], ax + mov ax, [bp+arg_8] + or ax, [bp+arg_A] + jz short loc_85F2 + push [bp+arg_C] + mov ax, 1 + push ax + push [bp+arg_A] + push [bp+arg_8] + jmp short loc_85DF +; --------------------------------------------------------------------------- + +loc_85C0: ; CODE XREF: sub_8508+FAj + les bx, [bp+var_4] + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + sub ax, es:[bx] + mov [bp+arg_2], dx + mov [bp+arg_0], ax + push [bp+arg_C] + mov ax, 1 + push ax + push [bp+var_8] + push [bp+var_A] + +loc_85DF: ; CODE XREF: sub_8508+B6j + push word ptr [bp+var_4+2] + push word ptr [bp+var_4] + push [bp+arg_2] + push [bp+arg_0] + push cs + call near ptr sub_823D + add sp, 10h + +loc_85F2: ; CODE XREF: sub_8508+A7j + mov ax, [bp+var_C] + mov dx, [bp+var_E] + sub [bp+var_E], 1 + sbb [bp+var_C], 0 + or dx, ax + jnz short loc_85C0 + pop di + pop si + mov sp, bp + pop bp + retf +sub_8508 endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_860A proc far ; CODE XREF: sub_86BB+1B1p + ; sub_86BB+2E4p + +var_8 = dword ptr -8 +var_4 = dword ptr -4 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + sub sp, 8 + push si + push di + mov cx, [bp+arg_4] + mov bx, cx + mov dx, ss:[bx+2] + mov ax, ss:[bx] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + les bx, [bp+var_4] + mov ax, es:[bx+8] + and ax, 50h + cmp ax, 50h ; 'P' + jnz short loc_86AF + les bx, [bp+var_4] + cmp word ptr es:[bx+6], 0FFFFh + jz short loc_86AF + les bx, [bp+var_4] + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + add ax, es:[bx+6] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + les bx, [bp+var_4] + test byte ptr es:[bx+9], 10h + jz short loc_8669 + les bx, [bp+var_8] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_8+2], dx + jmp short loc_8672 +; --------------------------------------------------------------------------- + +loc_8669: ; CODE XREF: sub_860A+4Ej + les bx, [bp+var_8] + mov ax, es:[bx] + mov word ptr [bp+var_8+2], ds + +loc_8672: ; CODE XREF: sub_860A+5Dj + mov word ptr [bp+var_8], ax + les bx, [bp+var_8] + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + sub ax, es:[bx-4] + mov [bp+arg_2], dx + mov [bp+arg_0], ax + les bx, [bp+var_8] + mov dx, word ptr [bp+var_8+2] + mov ax, word ptr [bp+var_8] + sub ax, es:[bx-2] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + les bx, [bp+var_8] + mov dx, es:[bx-6] + mov ax, es:[bx-8] + mov bx, cx + mov ss:[bx+2], dx + mov ss:[bx], ax + +loc_86AF: ; CODE XREF: sub_860A+27j sub_860A+31j + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + pop di + pop si + mov sp, bp + pop bp + retf +sub_860A endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_86BB proc near ; CODE XREF: sub_7AE5+197p + +driver = dword ptr -20h +var_1C = dword ptr -1Ch +var_18 = word ptr -18h +var_16 = dword ptr -16h +var_12 = dword ptr -12h +var_E = word ptr -0Eh +var_C = dword ptr -0Ch +var_8 = word ptr -8 +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = dword ptr 4 +arg_4 = word ptr 8 +arg_6 = word ptr 0Ah +arg_8 = word ptr 0Ch +arg_A = word ptr 0Eh +arg_16 = word ptr 1Ah +arg_18 = word ptr 1Ch + + push bp + mov bp, sp + sub sp, 20h + push si + push di + mov [bp+var_E], 0 + cmp word ptr [bp+arg_0], 0FFFFh + jnz short loc_86D1 + jmp loc_8ABE +; --------------------------------------------------------------------------- + +loc_86D1: ; CODE XREF: sub_86BB+11j + mov bx, [bp+arg_8] + mov dx, ss:[bx+arg_18] + mov ax, ss:[bx+arg_16] + mov [bp+var_2], dx + mov [bp+var_4], ax + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + mov dx, es:[bx+2] + mov ax, es:[bx] + sub ax, [bp+var_4] + sbb dx, [bp+var_2] + mov [bp+var_6], dx + mov [bp+var_8], ax + mov dx, [bp+arg_6] + mov ax, [bp+arg_4] + sub [bp+var_8], ax + sbb [bp+var_6], dx + les bx, [bp+arg_0] + test byte ptr es:[bx+4], 20h + jz short loc_872A + les bx, [bp+arg_0] + les bx, es:[bx] + les bx, es:[bx+6] + mov ax, es:[bx+1Ah] + mov [bp+var_6], 0 + mov [bp+var_8], ax + +loc_872A: ; CODE XREF: sub_86BB+57j + les bx, [bp+arg_0] + test byte ptr es:[bx+5], 1 + jz short loc_8741 + les bx, [bp+arg_0] + les bx, es:[bx] + mov ax, es:[bx+1Ch] + jmp loc_8AC0 +; --------------------------------------------------------------------------- + +loc_8741: ; CODE XREF: sub_86BB+77j + cmp [bp+var_6], 0 + jg short loc_8773 + jnz short loc_874F + cmp [bp+var_8], 0 + ja short loc_8773 + +loc_874F: ; CODE XREF: sub_86BB+8Cj + les bx, [bp+arg_0] + mov ax, es:[bx+4] + and ax, 3 + cmp ax, 3 + jz short loc_8761 + jmp loc_8ABE +; --------------------------------------------------------------------------- + +loc_8761: ; CODE XREF: sub_86BB+A1j + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + mov word ptr [bp+var_C+2], dx + mov word ptr [bp+var_C], ax + inc [bp+var_E] + jmp loc_88D8 +; --------------------------------------------------------------------------- + +loc_8773: ; CODE XREF: sub_86BB+8Aj sub_86BB+92j + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + mov word ptr [bp+var_C+2], dx + mov word ptr [bp+var_C], ax + +loc_877F: ; CODE XREF: sub_86BB+21Aj + les bx, [bp+var_C] + mov ax, es:[bx] + or ax, es:[bx+2] + jnz short loc_8792 + sub word ptr [bp+var_C], 0Ah + jmp loc_88D8 +; --------------------------------------------------------------------------- + +loc_8792: ; CODE XREF: sub_86BB+CEj + les bx, [bp+var_C] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_16+2], dx + mov word ptr [bp+var_16], ax + mov word ptr [bp+var_12+2], dx + mov word ptr [bp+var_12], ax + mov [bp+var_18], 1 + les bx, [bp+var_12] + test byte ptr es:[bx+2], 10h + jnz short loc_87BA + jmp loc_8884 +; --------------------------------------------------------------------------- + +loc_87BA: ; CODE XREF: sub_86BB+FAj + les bx, [bp+var_12] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+var_16+2], dx + mov word ptr [bp+var_16], ax + mov word ptr [bp+var_12+2], dx + mov word ptr [bp+var_12], ax + les bx, [bp+var_12] + test byte ptr es:[bx+2], 2 + jnz short loc_87DE + jmp loc_8884 +; --------------------------------------------------------------------------- + +loc_87DE: ; CODE XREF: sub_86BB+11Ej + les bx, [bp+var_12] + test byte ptr es:[bx+8], 20h + jnz short loc_87EB + jmp loc_8884 +; --------------------------------------------------------------------------- + +loc_87EB: ; CODE XREF: sub_86BB+12Bj + les bx, [bp+var_C] + test byte ptr es:[bx+4], 8 + jnz short loc_87F8 + jmp loc_8884 +; --------------------------------------------------------------------------- + +loc_87F8: ; CODE XREF: sub_86BB+138j + les bx, [bp+var_C] + test byte ptr es:[bx+4], 4 + jz short loc_8811 + les bx, [bp+var_C] + mov ax, es:[bx+6] + add ax, [bp+arg_A] + mov word ptr [bp+var_1C+2], ss + jmp short loc_881F +; --------------------------------------------------------------------------- + +loc_8811: ; CODE XREF: sub_86BB+145j + les bx, [bp+var_C] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+var_1C+2], dx + +loc_881F: ; CODE XREF: sub_86BB+154j + mov word ptr [bp+var_1C], ax + mov dx, word ptr [bp+var_1C+2] + mov ax, word ptr [bp+var_1C] + mov word ptr [bp+driver+2], dx + mov word ptr [bp+driver], ax + les bx, [bp+var_C] + test byte ptr es:[bx+4], 80h + jz short loc_8847 + les bx, [bp+driver] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_1C+2], dx + jmp short loc_8850 +; --------------------------------------------------------------------------- + +loc_8847: ; CODE XREF: sub_86BB+17Bj + les bx, [bp+driver] + mov ax, es:[bx] + mov word ptr [bp+var_1C+2], ds + +loc_8850: ; CODE XREF: sub_86BB+18Aj + mov word ptr [bp+var_1C], ax + les bx, [bp+var_C] + test byte ptr es:[bx+4], 40h + jz short loc_8861 + add word ptr [bp+var_1C], 4 + +loc_8861: ; CODE XREF: sub_86BB+1A0j + lea ax, [bp+var_12] + push ax + push word ptr [bp+var_1C+2] + push word ptr [bp+var_1C] + push cs + call near ptr sub_860A + add sp, 6 + mov word ptr [bp+var_1C+2], dx + mov word ptr [bp+var_1C], ax + mov dx, word ptr [bp+var_12+2] + mov ax, word ptr [bp+var_12] + mov word ptr [bp+var_16+2], dx + mov word ptr [bp+var_16], ax + +loc_8884: ; CODE XREF: sub_86BB+FCj + ; sub_86BB+120j ... + les bx, [bp+var_12] + test byte ptr es:[bx+3], 4 + jz short loc_88A9 + les bx, [bp+var_16] + mov ax, es:[bx+0Ah] + mov [bp+var_18], ax + les bx, [bp+var_16] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+var_16+2], dx + mov word ptr [bp+var_16], ax + +loc_88A9: ; CODE XREF: sub_86BB+1D1j + les bx, [bp+var_16] + mov ax, es:[bx+1Ah] + imul [bp+var_18] + mov [bp+var_18], ax + mov ax, [bp+var_18] + xor dx, dx + cmp dx, [bp+var_6] + jb short loc_88C7 + jnz short loc_88D8 + cmp ax, [bp+var_8] + jnb short loc_88D8 + +loc_88C7: ; CODE XREF: sub_86BB+203j + mov ax, [bp+var_18] + sub [bp+var_8], ax + sbb [bp+var_6], 0 + add word ptr [bp+var_C], 0Ah + jmp loc_877F +; --------------------------------------------------------------------------- + +loc_88D8: ; CODE XREF: sub_86BB+B5j sub_86BB+D4j ... + les bx, [bp+var_C] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_12+2], dx + mov word ptr [bp+var_12], ax + les bx, [bp+var_C] + mov ax, es:[bx+4] + mov word ptr [bp+var_16+2], ax + test byte ptr [bp+var_16+2], 4 + jz short loc_8907 + les bx, [bp+var_C] + mov ax, es:[bx+6] + add ax, [bp+arg_A] + mov word ptr [bp+var_16], ss + jmp short loc_8915 +; --------------------------------------------------------------------------- + +loc_8907: ; CODE XREF: sub_86BB+23Bj + les bx, [bp+var_C] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+var_16], dx + +loc_8915: ; CODE XREF: sub_86BB+24Aj + mov [bp+var_18], ax + test byte ptr [bp+var_16+2], 11h + jnz short loc_8921 + jmp loc_89AB +; --------------------------------------------------------------------------- + +loc_8921: ; CODE XREF: sub_86BB+261j + les bx, [bp+var_12] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+var_12+2], dx + mov word ptr [bp+var_12], ax + mov dx, word ptr [bp+var_16] + mov ax, [bp+var_18] + mov word ptr [bp+var_1C+2], dx + mov word ptr [bp+var_1C], ax + test byte ptr [bp+var_16+2], 80h + jz short loc_8953 + les bx, [bp+var_1C] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_16], dx + jmp short loc_895C +; --------------------------------------------------------------------------- + +loc_8953: ; CODE XREF: sub_86BB+287j + les bx, [bp+var_1C] + mov ax, es:[bx] + mov word ptr [bp+var_16], ds + +loc_895C: ; CODE XREF: sub_86BB+296j + mov [bp+var_18], ax + mov dx, word ptr [bp+var_16] + mov ax, [bp+var_18] + mov word ptr [bp+driver+2], dx + mov word ptr [bp+driver], ax + mov ax, word ptr [bp+var_16+2] + and ax, 48h + cmp ax, 40h ; '@' + jnz short loc_897A + add [bp+var_18], 4 + +loc_897A: ; CODE XREF: sub_86BB+2B9j + les bx, [bp+var_12] + test byte ptr es:[bx+2], 2 + jz short loc_89AB + les bx, [bp+var_12] + test byte ptr es:[bx+8], 20h + jz short loc_89AB + test byte ptr [bp+var_16+2], 8 + jz short loc_89AB + lea ax, [bp+var_12] + push ax + push word ptr [bp+var_16] + push [bp+var_18] + push cs + call near ptr sub_860A + add sp, 6 + mov word ptr [bp+var_16], dx + mov [bp+var_18], ax + +loc_89AB: ; CODE XREF: sub_86BB+263j + ; sub_86BB+2C7j ... + cmp [bp+var_E], 0 + jnz short loc_89F9 + les bx, [bp+var_12] + test byte ptr es:[bx+3], 4 + jz short loc_89D9 + push [bp+arg_A] + push [bp+var_6] + push [bp+var_8] + push word ptr [bp+var_12+2] + push word ptr [bp+var_12] + push word ptr [bp+var_16] + push [bp+var_18] + push cs + call near ptr sub_8508 + add sp, 0Eh + jmp short loc_89F9 +; --------------------------------------------------------------------------- + +loc_89D9: ; CODE XREF: sub_86BB+2FEj + push [bp+arg_A] + mov ax, 1 + push ax + push [bp+var_6] + push [bp+var_8] + push word ptr [bp+var_12+2] + push word ptr [bp+var_12] + push word ptr [bp+var_16] + push [bp+var_18] + push cs + call near ptr sub_823D + add sp, 10h + +loc_89F9: ; CODE XREF: sub_86BB+2F4j + ; sub_86BB+31Cj + mov ax, word ptr [bp+var_16+2] + and ax, 3 + cmp ax, 3 + jz short loc_8A07 + jmp loc_8AA5 +; --------------------------------------------------------------------------- + +loc_8A07: ; CODE XREF: sub_86BB+347j + mov ax, word ptr [bp+var_16+2] + and ax, 48h + cmp ax, 48h ; 'H' + jnz short loc_8A16 + sub word ptr [bp+driver], 4 + +loc_8A16: ; CODE XREF: sub_86BB+355j + les bx, [bp+var_12] + test byte ptr es:[bx+3], 4 + jz short loc_8A65 + les bx, [bp+var_12] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+var_12+2], dx + mov word ptr [bp+var_12], ax + les bx, [bp+var_12] + mov ax, es:[bx+16h] + or ax, es:[bx+18h] + jz short loc_8A52 + les bx, [bp+var_12] + push word ptr es:[bx+14h] + les bx, [bp+var_12] + push word ptr es:[bx+18h] + push word ptr es:[bx+16h] + jmp short loc_8A84 +; --------------------------------------------------------------------------- + +loc_8A52: ; CODE XREF: sub_86BB+381j + test byte ptr [bp+var_16+2], 80h + jz short loc_8AA5 + push word ptr [bp+driver+2] + push word ptr [bp+driver] ; font + nop + push cs + call near ptr _registerbgifont + jmp short loc_8AA3 +; --------------------------------------------------------------------------- + +loc_8A65: ; CODE XREF: sub_86BB+363j + les bx, [bp+var_12] + mov ax, es:[bx+0Eh] + or ax, es:[bx+10h] + jz short loc_8A92 + les bx, [bp+var_12] + push word ptr es:[bx+12h] + les bx, [bp+var_12] + push word ptr es:[bx+10h] + push word ptr es:[bx+0Eh] + +loc_8A84: ; CODE XREF: sub_86BB+395j + push word ptr [bp+driver+2] + push word ptr [bp+driver] + call sub_6A74 + add sp, 0Ah + jmp short loc_8AA5 +; --------------------------------------------------------------------------- + +loc_8A92: ; CODE XREF: sub_86BB+3B5j + test byte ptr [bp+var_16+2], 80h + jz short loc_8AA5 + push word ptr [bp+driver+2] + push word ptr [bp+driver] ; driver + nop + push cs + call near ptr _registerbgidriver + +loc_8AA3: ; CODE XREF: sub_86BB+3A8j + pop cx + pop cx + +loc_8AA5: ; CODE XREF: sub_86BB+349j + ; sub_86BB+39Bj ... + mov [bp+var_6], 0 + mov [bp+var_8], 0 + mov ax, word ptr [bp+var_C] + sub word ptr [bp+var_C], 0Ah + cmp ax, word ptr [bp+arg_0] + jbe short loc_8ABE + jmp loc_88D8 +; --------------------------------------------------------------------------- + +loc_8ABE: ; CODE XREF: sub_86BB+13j sub_86BB+A3j ... + xor ax, ax + +loc_8AC0: ; CODE XREF: sub_86BB+83j + pop di + pop si + mov sp, bp + pop bp + retn +sub_86BB endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__CurrExcContext proc far + +s1 = dword ptr -6 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + sub sp, 6 + push si + push di + mov ax, [bp+arg_0] + mov [bp+var_2], ax + cmp [bp+var_2], 0FFFFh + jz short loc_8B09 + mov bx, [bp+var_2] + mov dx, ss:[bx+4] + mov ax, ss:[bx+2] + add ax, 0FFF8h + mov word ptr [bp+s1+2], dx + mov word ptr [bp+s1], ax + mov ax, 8 + push ax ; n + push ds + mov ax, 0F57h + push ax ; s2 + push word ptr [bp+s1+2] + push word ptr [bp+s1] ; s1 + nop + push cs + call near ptr _memcmp + add sp, 0Ah + or ax, ax + jz short loc_8B0E + +loc_8B09: ; CODE XREF: __CurrExcContext+12j + mov ax, 0FFFFh + jmp short loc_8B15 +; --------------------------------------------------------------------------- + +loc_8B0E: ; CODE XREF: __CurrExcContext+41j + mov bx, [bp+var_2] + mov ax, ss:[bx+arg_6] + +loc_8B15: ; CODE XREF: __CurrExcContext+46j + pop di + pop si + mov sp, bp + pop bp + retf +__CurrExcContext endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +; __ThrowFileName(void) +@__ThrowFileName$qv proc far + push si + push di + les bx, ss:16h + mov dx, es:[bx+18h] + mov ax, es:[bx+16h] + pop di + pop si + retf +@__ThrowFileName$qv endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +; __ThrowLineNumber(void) +@__ThrowLineNumber$qv proc far + push si + push di + les bx, ss:16h + mov ax, es:[bx+1Ah] + pop di + pop si + retf +@__ThrowLineNumber$qv endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +; __ThrowExceptionName(void) +@__ThrowExceptionName$qv proc far + push si + push di + les bx, ss:16h + mov dx, es:[bx+1Eh] + mov ax, es:[bx+1Ch] + pop di + pop si + retf +@__ThrowExceptionName$qv endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __fastcall __far typeinfo__typeinfo(int, int, int, __int32) +@typeinfo@0$bctr$qmx8typeinfo proc far + +src = word ptr -4 +var_2 = word ptr -2 +arg_0 = dword ptr 6 + + push bp + mov bp, sp + sub sp, 4 + push si + push di + mov ax, word ptr [bp+arg_0] + or ax, word ptr [bp+arg_0+2] + jnz short loc_8B71 + mov ax, 8 + push ax + nop + push cs + call near ptr @$bnew$qui ; operator new(uint) + pop cx + mov word ptr [bp+arg_0+2], dx + mov word ptr [bp+arg_0], ax + or ax, dx + jz short loc_8BAF + +loc_8B71: ; CODE XREF: typeinfo::typeinfo(typeinfo &)+Ej + les bx, [bp+arg_0] + mov word ptr es:[bx+2], seg seg000 + mov word ptr es:[bx], 914Dh + xor ax, ax + push ax ; int + push ax ; int + xor ax, ax + push ax ; int + xor ax, ax + push ax ; int + xor ax, ax + push ax ; int + xor ax, ax + push ax ; int + push ax ; int + xor ax, ax + push ax ; int + push ax ; int + mov [bp+var_2], 0 + mov [bp+src], 0 + lea ax, [bp+src] + push ss + push ax ; src + push cs ; int + mov ax, 912Fh + push ax ; int + push cs + call near ptr @_ThrowException$qnvt1t1t1uiuiuinuc ; _ThrowException(void *,void *,void *,void *,uint,uint,uint,uchar *) + add sp, 1Ah + +loc_8BAF: ; CODE XREF: typeinfo::typeinfo(typeinfo &)+22j + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + pop di + pop si + mov sp, bp + pop bp + retf +@typeinfo@0$bctr$qmx8typeinfo endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; typeinfo::operator=(typeinfo const &) +@typeinfo@0$basg$qmx8typeinfo proc far + +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + push si + push di + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + pop di + pop si + pop bp + retf +@typeinfo@0$basg$qmx8typeinfo endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl __far typeinfo___typeinfo(void (*driver)(void), int) +@typeinfo@0$bdtr$qv proc far + +driver = dword ptr 6 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + push si + push di + mov dx, [bp+arg_4] + mov ax, word ptr [bp+driver] + or ax, word ptr [bp+driver+2] + jz short loc_8BFA + les bx, [bp+driver] + mov word ptr es:[bx+2], seg seg000 + mov word ptr es:[bx], 914Dh + test dl, 1 + jz short loc_8BFA + push word ptr [bp+driver+2] + push word ptr [bp+driver] ; driver + nop + push cs + call near ptr _registerbgidriver + pop cx + pop cx + +loc_8BFA: ; CODE XREF: typeinfo::~typeinfo(void)+Ej + ; typeinfo::~typeinfo(void)+21j + pop di + pop si + pop bp + retf +@typeinfo@0$bdtr$qv endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; typeinfo::operator==(typeinfo const &)const +@typeinfo@0$beql$xqmx8typeinfo proc far ; CODE XREF: typeinfo::operator!=(typeinfo &)+12p + +arg_0 = dword ptr 6 +arg_4 = dword ptr 0Ah + + push bp + mov bp, sp + push si + push di + les bx, [bp+arg_4] + push word ptr es:[bx+6] + push word ptr es:[bx+4] + les bx, [bp+arg_0] + push word ptr es:[bx+6] + push word ptr es:[bx+4] + push cs + call near ptr sub_6070 + add sp, 8 + pop di + pop si + pop bp + retf +@typeinfo@0$beql$xqmx8typeinfo endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; typeinfo::operator!=(typeinfo const &)const +@typeinfo@0$bneq$xqmx8typeinfo proc far + +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + push si + push di + push [bp+arg_6] + push [bp+arg_4] + push [bp+arg_2] + push [bp+arg_0] + push cs + call near ptr @typeinfo@0$beql$xqmx8typeinfo ; typeinfo::operator==(typeinfo &) + add sp, 8 + neg ax + sbb ax, ax + inc ax + pop di + pop si + pop bp + retf +@typeinfo@0$bneq$xqmx8typeinfo endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; typeinfo::before(typeinfo const &)const +@typeinfo@0before$xqmx8typeinfo proc far + +var_8 = dword ptr -8 +var_4 = dword ptr -4 +arg_0 = dword ptr 6 +arg_4 = dword ptr 0Ah + + push bp + mov bp, sp + sub sp, 8 + push si + push di + les bx, [bp+arg_0] + mov ax, es:[bx+4] + or ax, es:[bx+6] + jnz short loc_8C5E + xor ax, ax + jmp short loc_8CB7 +; --------------------------------------------------------------------------- + +loc_8C5E: ; CODE XREF: typeinfo::before(typeinfo &)+13j + les bx, [bp+arg_4] + mov ax, es:[bx+4] + or ax, es:[bx+6] + jnz short loc_8C70 + mov ax, 1 + jmp short loc_8CB7 +; --------------------------------------------------------------------------- + +loc_8C70: ; CODE XREF: typeinfo::before(typeinfo &)+24j + les bx, [bp+arg_4] + mov dx, es:[bx+6] + mov word ptr [bp+var_4+2], dx + mov ax, es:[bx+4] + mov word ptr [bp+var_4], ax + les bx, [bp+var_4] + add ax, es:[bx+4] + push dx + push ax ; s2 + les bx, [bp+arg_0] + mov dx, es:[bx+6] + mov word ptr [bp+var_8+2], dx + mov ax, es:[bx+4] + mov word ptr [bp+var_8], ax + les bx, [bp+var_8] + add ax, es:[bx+4] + push dx + push ax ; s1 + nop + push cs + call near ptr _strcmp + add sp, 8 + or ax, ax + jge short loc_8CB5 + mov ax, 1 + jmp short loc_8CB7 +; --------------------------------------------------------------------------- + +loc_8CB5: ; CODE XREF: typeinfo::before(typeinfo &)+69j + xor ax, ax + +loc_8CB7: ; CODE XREF: typeinfo::before(typeinfo &)+17j + ; typeinfo::before(typeinfo &)+29j ... + pop di + pop si + mov sp, bp + pop bp + retf +@typeinfo@0before$xqmx8typeinfo endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; typeinfo::name(void)const +@typeinfo@0name$xqv proc far + +arg_0 = dword ptr 6 + + push bp + mov bp, sp + push si + push di + les bx, [bp+arg_0] + push word ptr es:[bx+6] + push word ptr es:[bx+4] + push cs + call near ptr sub_604B + pop cx + pop cx + pop di + pop si + pop bp + retf +@typeinfo@0name$xqv endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __fastcall __far __GetTypeInfo(int, int, int, int, int, __int32, int, int, int, int) +@__GetTypeInfo$qnvt1t1t1 proc far + +var_8 = dword ptr -8 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_C = word ptr 12h +arg_E = word ptr 14h + + push bp + mov bp, sp + sub sp, 8 + push si + push di + mov dx, [bp+arg_E] + mov ax, [bp+arg_C] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + mov ax, [bp+arg_0] + or ax, [bp+arg_2] + jnz short loc_8D19 + xor ax, ax + push ax ; int + push ax ; int + xor ax, ax + push ax ; int + xor ax, ax + push ax ; int + xor ax, ax + push ax ; int + xor ax, ax + push ax ; int + push ax ; int + xor ax, ax + push ax ; int + push ax ; int + push ds + mov ax, 1D28h + push ax ; src + push cs ; int + mov ax, 9119h + push ax ; int + push cs + call near ptr @_ThrowException$qnvt1t1t1uiuiuinuc ; _ThrowException(void *,void *,void *,void *,uint,uint,uint,uchar *) + add sp, 1Ah + +loc_8D19: ; CODE XREF: __GetTypeInfo(void *,void *,void *,void *)+1Aj + les bx, dword ptr [bp+arg_4] + mov dx, [bp+arg_4+2] + mov ax, [bp+arg_4] + sub ax, es:[bx-2] + mov [bp+arg_4+2], dx + mov [bp+arg_4], ax + les bx, dword ptr [bp+arg_4] + mov dx, es:[bx-6] + mov ax, es:[bx-8] + mov [bp+var_2], dx + mov [bp+var_4], ax + les bx, [bp+var_8] + mov dx, [bp+var_2] + mov ax, [bp+var_4] + mov es:[bx+6], dx + mov es:[bx+4], ax + mov dx, word ptr [bp+var_8+2] + mov ax, word ptr [bp+var_8] + pop di + pop si + mov sp, bp + pop bp + retf +@__GetTypeInfo$qnvt1t1t1 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_8D5A proc near ; CODE XREF: sub_8D5A+143p + ; sub_8D5A+1C4p ... + +var_20 = word ptr -20h +var_1E = word ptr -1Eh +var_1C = dword ptr -1Ch +var_18 = word ptr -18h +var_16 = word ptr -16h +var_14 = dword ptr -14h +var_10 = word ptr -10h +var_E = word ptr -0Eh +var_C = word ptr -0Ch +var_A = word ptr -0Ah +var_8 = word ptr -8 +var_6 = word ptr -6 +var_4 = dword ptr -4 +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = dword ptr 8 +arg_8 = word ptr 0Ch +arg_A = word ptr 0Eh +arg_C = word ptr 10h +arg_E = word ptr 12h +arg_10 = word ptr 14h +arg_12 = word ptr 16h +arg_14 = word ptr 18h +arg_16 = word ptr 1Ah +arg_18 = word ptr 1Ch +arg_1A = word ptr 1Eh +arg_1C = word ptr 20h +arg_1E = word ptr 22h + + push bp + mov bp, sp + sub sp, 20h + push si + push di + mov [bp+var_8], 0 + mov [bp+var_A], 0 + mov [bp+var_C], 0 + mov [bp+var_E], 0 + mov ax, [bp+arg_14] + or ax, [bp+arg_16] + jz short loc_8D95 + push word ptr [bp+arg_4+2] + push word ptr [bp+arg_4] + push [bp+arg_16] + push [bp+arg_14] + push cs + call near ptr sub_6070 + add sp, 8 + or ax, ax + jnz short loc_8D9F + +loc_8D95: ; CODE XREF: sub_8D5A+22j + les bx, [bp+arg_4] + test byte ptr es:[bx+8], 4 + jnz short loc_8DA6 + +loc_8D9F: ; CODE XREF: sub_8D5A+39j + xor dx, dx + xor ax, ax + jmp loc_8F9A +; --------------------------------------------------------------------------- + +loc_8DA6: ; CODE XREF: sub_8D5A+43j + mov [bp+var_6], 0 + les bx, [bp+arg_4] + mov dx, word ptr [bp+arg_4+2] + mov ax, word ptr [bp+arg_4] + add ax, es:[bx+0Ch] + +loc_8DB8: ; CODE XREF: sub_8D5A+21Ej + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + +loc_8DBE: ; CODE XREF: sub_8D5A+205j + les bx, [bp+var_4] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_1C+2], dx + mov word ptr [bp+var_1C], ax + mov ax, word ptr [bp+var_1C] + or ax, word ptr [bp+var_1C+2] + jnz short loc_8DD9 + jmp loc_8F62 +; --------------------------------------------------------------------------- + +loc_8DD9: ; CODE XREF: sub_8D5A+7Aj + les bx, [bp+var_4] + test byte ptr es:[bx+6], 8 + jz short loc_8DE6 + jmp loc_8F5B +; --------------------------------------------------------------------------- + +loc_8DE6: ; CODE XREF: sub_8D5A+87j + cmp [bp+arg_1A], 0 + jz short loc_8E00 + les bx, [bp+var_4] + mov ax, es:[bx+6] + and ax, 3 + cmp ax, 3 + jnz short loc_8E00 + mov ax, 1 + jmp short loc_8E02 +; --------------------------------------------------------------------------- + +loc_8E00: ; CODE XREF: sub_8D5A+90j sub_8D5A+9Fj + xor ax, ax + +loc_8E02: ; CODE XREF: sub_8D5A+A4j + mov [bp+var_10], ax + les bx, [bp+var_4] + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + add ax, es:[bx+4] + mov word ptr [bp+var_14+2], dx + mov word ptr [bp+var_14], ax + mov dx, [bp+arg_1E] + mov ax, [bp+arg_1C] + mov [bp+var_16], dx + mov [bp+var_18], ax + les bx, [bp+var_4] + test byte ptr es:[bx+6], 4 + jz short loc_8E49 + les bx, [bp+var_14] + mov ax, es:[bx] + mov dx, word ptr [bp+var_14+2] + mov word ptr [bp+var_14+2], dx + mov word ptr [bp+var_14], ax + mov dx, word ptr [bp+var_1C+2] + mov ax, word ptr [bp+var_1C] + mov [bp+var_16], dx + mov [bp+var_18], ax + +loc_8E49: ; CODE XREF: sub_8D5A+D2j + push word ptr [bp+var_1C+2] + push word ptr [bp+var_1C] + push [bp+arg_E] + push [bp+arg_C] + push cs + call near ptr sub_6070 + add sp, 8 + or ax, ax + jnz short loc_8ECB + les bx, [bp+var_1C] + test byte ptr es:[bx+8], 4 + jnz short loc_8E6D + jmp loc_8F5B +; --------------------------------------------------------------------------- + +loc_8E6D: ; CODE XREF: sub_8D5A+10Ej + push [bp+var_16] + push [bp+var_18] + push [bp+var_10] + push [bp+arg_18] + push [bp+arg_16] + push [bp+arg_14] + push [bp+arg_12] + push [bp+arg_10] + push [bp+arg_E] + push [bp+arg_C] + push [bp+arg_A] + push [bp+arg_8] + push word ptr [bp+var_1C+2] + push word ptr [bp+var_1C] + push word ptr [bp+var_14+2] + push word ptr [bp+var_14] + call sub_8D5A + add sp, 20h + mov [bp+var_1E], dx + mov [bp+var_20], ax + mov ax, [bp+var_20] + or ax, [bp+var_1E] + jnz short loc_8EB4 + jmp loc_8F5B +; --------------------------------------------------------------------------- + +loc_8EB4: ; CODE XREF: sub_8D5A+155j + mov dx, [bp+var_1E] + mov ax, [bp+var_20] + mov word ptr [bp+var_14+2], dx + mov word ptr [bp+var_14], ax + mov bx, [bp+arg_18] + mov ax, ss:[bx] + mov [bp+var_10], ax + jmp short loc_8F28 +; --------------------------------------------------------------------------- + +loc_8ECB: ; CODE XREF: sub_8D5A+104j + mov ax, [bp+arg_8] + or ax, [bp+arg_A] + jz short loc_8EEC + mov dx, [bp+arg_A] + mov ax, [bp+arg_8] + cmp dx, word ptr [bp+var_14+2] + jnz short loc_8F5B + cmp ax, word ptr [bp+var_14] + jnz short loc_8F5B + mov dx, word ptr [bp+var_14+2] + mov ax, word ptr [bp+var_14] + jmp loc_8F9A +; --------------------------------------------------------------------------- + +loc_8EEC: ; CODE XREF: sub_8D5A+177j + mov ax, [bp+arg_10] + or ax, [bp+arg_12] + jz short loc_8F28 + xor ax, ax + push ax + push ax + xor ax, ax + push ax + push [bp+arg_18] + xor ax, ax + push ax + push ax + xor ax, ax + push ax + push ax + push [bp+arg_16] + push [bp+arg_14] + push [bp+arg_12] + push [bp+arg_10] + push word ptr [bp+var_1C+2] + push word ptr [bp+var_1C] + push word ptr [bp+var_14+2] + push word ptr [bp+var_14] + call sub_8D5A + add sp, 20h + or ax, dx + jz short loc_8F5B + +loc_8F28: ; CODE XREF: sub_8D5A+16Fj + ; sub_8D5A+198j + cmp [bp+var_E], 0 + jz short loc_8F46 + mov dx, word ptr [bp+var_14+2] + mov ax, word ptr [bp+var_14] + cmp dx, [bp+var_A] + jnz short loc_8F46 + cmp ax, [bp+var_C] + jnz short loc_8F46 + mov ax, [bp+var_10] + or [bp+var_8], ax + jmp short loc_8F5B +; --------------------------------------------------------------------------- + +loc_8F46: ; CODE XREF: sub_8D5A+1D2j + ; sub_8D5A+1DDj ... + inc [bp+var_E] + mov dx, word ptr [bp+var_14+2] + mov ax, word ptr [bp+var_14] + mov [bp+var_A], dx + mov [bp+var_C], ax + mov ax, [bp+var_10] + mov [bp+var_8], ax + +loc_8F5B: ; CODE XREF: sub_8D5A+89j + ; sub_8D5A+110j ... + add word ptr [bp+var_4], 8 + jmp loc_8DBE +; --------------------------------------------------------------------------- + +loc_8F62: ; CODE XREF: sub_8D5A+7Cj + cmp [bp+var_6], 0 + jnz short loc_8F7B + inc [bp+var_6] + les bx, [bp+arg_4] + mov dx, word ptr [bp+arg_4+2] + mov ax, word ptr [bp+arg_4] + add ax, es:[bx+0Ah] + jmp loc_8DB8 +; --------------------------------------------------------------------------- + +loc_8F7B: ; CODE XREF: sub_8D5A+20Cj + mov bx, [bp+arg_18] + mov ax, [bp+var_8] + mov ss:[bx], ax + cmp [bp+var_E], 1 + jz short loc_8F94 + mov [bp+var_A], 0 + mov [bp+var_C], 0 + +loc_8F94: ; CODE XREF: sub_8D5A+22Ej + mov dx, [bp+var_A] + mov ax, [bp+var_C] + +loc_8F9A: ; CODE XREF: sub_8D5A+49j + ; sub_8D5A+18Fj + pop di + pop si + mov sp, bp + pop bp + retn +sub_8D5A endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __fastcall __far __DynamicCast(int, int, int, int, int, __int32, int, int, int, int, int) +@__DynamicCast$qnvt1t1t1i proc far + +var_16 = word ptr -16h +var_14 = word ptr -14h +var_12 = word ptr -12h +var_10 = word ptr -10h +var_E = word ptr -0Eh +var_C = word ptr -0Ch +var_A = word ptr -0Ah +var_8 = word ptr -8 +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_8 = word ptr 0Eh +arg_A = word ptr 10h +arg_C = word ptr 12h +arg_E = word ptr 14h +arg_10 = word ptr 16h + + push bp + mov bp, sp + sub sp, 16h + push si + push di + mov dx, [bp+arg_A] + mov ax, [bp+arg_8] + mov [bp+var_2], dx + mov [bp+var_4], ax + mov dx, [bp+arg_E] + mov ax, [bp+arg_C] + mov [bp+var_6], dx + mov [bp+var_8], ax + mov ax, [bp+arg_0] + or ax, [bp+arg_2] + jnz short loc_8FCB + jmp loc_90CF +; --------------------------------------------------------------------------- + +loc_8FCB: ; CODE XREF: __DynamicCast(void *,void *,void *,void *,int)+26j + les bx, dword ptr [bp+arg_4] + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + sub ax, es:[bx-4] + mov [bp+var_E], dx + mov [bp+var_10], ax + les bx, dword ptr [bp+arg_4] + mov dx, [bp+arg_4+2] + mov ax, [bp+arg_4] + sub ax, es:[bx-2] + mov [bp+arg_4+2], dx + mov [bp+arg_4], ax + les bx, dword ptr [bp+arg_4] + mov dx, es:[bx-6] + mov ax, es:[bx-8] + mov [bp+var_A], dx + mov [bp+var_C], ax + mov ax, [bp+arg_C] + or ax, [bp+arg_E] + jz short loc_9021 + push [bp+var_A] + push [bp+var_C] + push [bp+var_6] + push [bp+var_8] + push cs + call near ptr sub_6070 + add sp, 8 + or ax, ax + jz short loc_902A + +loc_9021: ; CODE XREF: __DynamicCast(void *,void *,void *,void *,int)+68j + mov dx, [bp+var_E] + mov ax, [bp+var_10] + jmp loc_90FF +; --------------------------------------------------------------------------- + +loc_902A: ; CODE XREF: __DynamicCast(void *,void *,void *,void *,int)+7Fj + push [bp+var_A] + push [bp+var_C] + push [bp+var_2] + push [bp+var_4] + push cs + call near ptr sub_6070 + add sp, 8 + or ax, ax + jnz short loc_9083 + xor ax, ax + push ax + push ax + mov ax, 1 + push ax + lea ax, [bp+var_16] + push ax + push [bp+var_2] + push [bp+var_4] + push [bp+arg_2] + push [bp+arg_0] + push [bp+var_6] + push [bp+var_8] + xor ax, ax + push ax + push ax + push [bp+var_A] + push [bp+var_C] + push [bp+var_E] + push [bp+var_10] + call sub_8D5A + add sp, 20h + mov [bp+var_12], dx + mov [bp+var_14], ax + mov ax, [bp+var_14] + or ax, [bp+var_12] + jnz short loc_90C7 + +loc_9083: ; CODE XREF: __DynamicCast(void *,void *,void *,void *,int)+9Fj + xor ax, ax + push ax + push ax + mov ax, 1 + push ax + lea ax, [bp+var_16] + push ax + xor ax, ax + push ax + push ax + xor ax, ax + push ax + push ax + push [bp+var_6] + push [bp+var_8] + xor ax, ax + push ax + push ax + push [bp+var_A] + push [bp+var_C] + push [bp+var_E] + push [bp+var_10] + call sub_8D5A + add sp, 20h + mov [bp+var_12], dx + mov [bp+var_14], ax + mov ax, [bp+var_14] + or ax, [bp+var_12] + jz short loc_90CF + cmp [bp+var_16], 0 + jz short loc_90CF + +loc_90C7: ; CODE XREF: __DynamicCast(void *,void *,void *,void *,int)+E1j + mov dx, [bp+var_12] + mov ax, [bp+var_14] + jmp short loc_90FF +; --------------------------------------------------------------------------- + +loc_90CF: ; CODE XREF: __DynamicCast(void *,void *,void *,void *,int)+28j + ; __DynamicCast(void *,void *,void *,void *,int)+11Fj ... + cmp [bp+arg_10], 0 + jz short loc_90FB + xor ax, ax + push ax ; int + push ax ; int + xor ax, ax + push ax ; int + xor ax, ax + push ax ; int + xor ax, ax + push ax ; int + xor ax, ax + push ax ; int + push ax ; int + xor ax, ax + push ax ; int + push ax ; int + push ds + mov ax, 1D29h + push ax ; src + push cs ; int + mov ax, 9105h + push ax ; int + push cs + call near ptr @_ThrowException$qnvt1t1t1uiuiuinuc ; _ThrowException(void *,void *,void *,void *,uint,uint,uint,uchar *) + add sp, 1Ah + +loc_90FB: ; CODE XREF: __DynamicCast(void *,void *,void *,void *,int)+133j + xor dx, dx + xor ax, ax + +loc_90FF: ; CODE XREF: __DynamicCast(void *,void *,void *,void *,int)+87j + ; __DynamicCast(void *,void *,void *,void *,int)+12Dj + pop di + pop si + mov sp, bp + pop bp + retf +@__DynamicCast$qnvt1t1t1i endp + +; --------------------------------------------------------------------------- + db 1, 0, 1, 0, 0Ah, 0, 2 dup(0FFh), 2 dup(0), 42h, 61h + db 64h, 5Fh, 63h, 61h, 73h, 74h, 2 dup(0), 1, 0, 1, 0 + db 0Ah, 0, 2 dup(0FFh), 2 dup(0), 42h, 61h, 64h, 5Fh, 74h + db 79h, 70h, 65h, 69h, 64h, 2 dup(0), 4, 0, 10h, 20h, 0Ah + db 0, 51h, 91h + dw seg seg000 +aTypeinfo db 'typeinfo *',0 + db 0, 51h, 91h + dw seg seg000 + db 4 dup(0), 0CAh, 8Bh + dw seg seg000 + db 8 ; Method + db 0 + db 3 ; Destructor/SafeFunction + db 0 + db 26h, 3 dup(0), 73h, 10h, 30h, 0, 34h, 0Dh dup(0), 1 + db 0, 1, 0, 0CAh, 8Bh + dw seg seg000 + db 5, 0, 38h, 0, 74h, 79h, 70h, 65h, 69h, 6Eh, 66h, 6Fh + db 0Eh dup(0) +unknown_libname_3 db 0BAh, 60h, 0Fh, 0EBh, 3, 0BAh, 65h, 0Fh, 0B9h, 5, 0 + db 0B4h, 40h, 0BBh, 2, 0, 0CDh, 21h, 0B9h, 27h, 0, 0BAh + db 6Ah, 0Fh, 0B4h, 40h, 0CDh, 21h, 0E9h, 9Bh, 8Ah + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __stdcall _DOSCMD(int, int, char *s, int, int) +__DOSCMD proc near ; CODE XREF: sub_9F6A:loc_A0D5p + +dest = dword ptr -0Eh +var_A = dword ptr -0Ah +var_6 = dword ptr -6 +var_2 = word ptr -2 +arg_0 = word ptr 4 +arg_2 = word ptr 6 +_s = dword ptr 8 +arg_8 = word ptr 0Ch +arg_A = word ptr 0Eh + + push bp + mov bp, sp + sub sp, 0Eh + push si + push di + mov [bp+var_2], 3 + mov ax, word ptr [bp+_s] + or ax, word ptr [bp+_s+2] + jz short loc_91D5 + push word ptr [bp+_s+2] + push word ptr [bp+_s] ; s + nop + push cs + call near ptr _strlen + pop cx + pop cx + add ax, [bp+var_2] + inc ax + mov [bp+var_2], ax + +loc_91D5: ; CODE XREF: __DOSCMD+13j + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + mov word ptr [bp+var_6+2], dx + mov word ptr [bp+var_6], ax + jmp short loc_91FF +; --------------------------------------------------------------------------- + +loc_91E3: ; CODE XREF: __DOSCMD+5Dj + les bx, [bp+var_6] + push word ptr es:[bx+2] + push word ptr es:[bx] ; s + nop + push cs + call near ptr _strlen + pop cx + pop cx + add ax, [bp+var_2] + inc ax + mov [bp+var_2], ax + add word ptr [bp+var_6], 4 + +loc_91FF: ; CODE XREF: __DOSCMD+35j + les bx, [bp+var_6] + mov ax, es:[bx] + or ax, es:[bx+2] + jnz short loc_91E3 + push [bp+var_2] + nop + push cs + call near ptr sub_32C1 + pop cx + mov word ptr [bp+var_A+2], dx + mov word ptr [bp+var_A], ax + or ax, dx + jnz short loc_9225 + xor dx, dx + xor ax, ax + jmp loc_92DB +; --------------------------------------------------------------------------- + +loc_9225: ; CODE XREF: __DOSCMD+70j + mov dx, word ptr [bp+var_A+2] + mov ax, word ptr [bp+var_A] + inc ax + mov word ptr [bp+dest+2], dx + mov word ptr [bp+dest], ax + les bx, [bp+dest] + mov byte ptr es:[bx], 20h ; ' ' + inc word ptr [bp+dest] + mov ax, word ptr [bp+_s] + or ax, word ptr [bp+_s+2] + jz short loc_9268 + push word ptr [bp+_s+2] + push word ptr [bp+_s] ; src + push word ptr [bp+dest+2] + push word ptr [bp+dest] ; dest + nop + push cs + call near ptr _stpcpy + add sp, 8 + mov word ptr [bp+dest+2], dx + mov word ptr [bp+dest], ax + les bx, [bp+dest] + mov byte ptr es:[bx], 20h ; ' ' + inc word ptr [bp+dest] + +loc_9268: ; CODE XREF: __DOSCMD+96j + mov ax, [bp+arg_8] + or ax, [bp+arg_A] + jz short loc_92B6 + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + mov word ptr [bp+var_6+2], dx + mov word ptr [bp+var_6], ax + jmp short loc_92AA +; --------------------------------------------------------------------------- + +loc_927E: ; CODE XREF: __DOSCMD+108j + les bx, [bp+var_6] + push word ptr es:[bx+2] + push word ptr es:[bx] ; src + push word ptr [bp+dest+2] + push word ptr [bp+dest] ; dest + nop + push cs + call near ptr _stpcpy + add sp, 8 + mov word ptr [bp+dest+2], dx + mov word ptr [bp+dest], ax + les bx, [bp+dest] + mov byte ptr es:[bx], 20h ; ' ' + inc word ptr [bp+dest] + add word ptr [bp+var_6], 4 + +loc_92AA: ; CODE XREF: __DOSCMD+D0j + les bx, [bp+var_6] + mov ax, es:[bx] + or ax, es:[bx+2] + jnz short loc_927E + +loc_92B6: ; CODE XREF: __DOSCMD+C2j + les bx, [bp+dest] + mov byte ptr es:[bx-1], 0Dh + mov byte ptr es:[bx], 0 + mov ax, word ptr [bp+dest] + xor dx, dx + sub ax, word ptr [bp+var_A] + sbb dx, 0 + add al, 0FEh ; '' + les bx, [bp+var_A] + mov es:[bx], al + mov dx, word ptr [bp+var_A+2] + mov ax, word ptr [bp+var_A] + +loc_92DB: ; CODE XREF: __DOSCMD+76j + pop di + pop si + mov sp, bp + pop bp + retn 0Ch +__DOSCMD endp + +; --------------------------------------------------------------------------- + db 8Fh dup(0) +word_9372 dw 0 ; DATA XREF: __exec+28w + db 50h dup(0) +byte_93C4 db 0 ; DATA XREF: __exec+50w +byte_93C5 db 0 ; DATA XREF: __exec+6Dw + db 1Ch dup(0), 33h, 0FFh, 8Ch, 0C8h, 8Eh, 0D8h, 8Eh, 0C0h + db 0FAh, 8Eh, 0D0h, 8Dh, 0A5h, 8Fh, 0, 0FBh, 51h, 52h + db 0B8h, 3, 4Bh, 8Dh, 9Dh, 0FBh, 0, 8Dh, 95h, 91h, 0, 0CDh + db 21h, 5Ah, 59h, 72h, 2Dh, 33h, 0FFh, 0FAh, 8Eh, 95h + db 0F1h, 0, 8Bh, 0A5h, 0F3h, 0, 0FBh, 8Bh, 0ECh, 33h, 0C0h + db 50h, 8Bh, 85h, 8Fh, 0, 8Eh, 0D8h, 8Eh, 0C0h, 26h, 89h + db 16h, 2, 0, 26h, 89h, 0Eh, 2Ch, 0, 2Eh, 8Bh, 85h, 0E1h + db 0, 2Eh, 0FFh, 2Eh, 0F7h, 0, 0B4h, 40h, 0BBh, 2, 0, 0B9h + db 0Fh, 0, 33h, 0D2h, 0CDh, 21h, 0B8h, 2, 4Ch, 0CDh, 21h +byte_9443 db 0FFh ; DATA XREF: __exec+22Dr + db 0 +word_9445 dw 0 ; DATA XREF: __exec+1D0w +word_9447 dw 0 ; DATA XREF: __exec+Ew + ; __exec:loc_9643r ... +byte_9449 db 1 ; DATA XREF: __exec+D5w __exec+1E7r ... + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__exec proc near + +var_C = word ptr -0Ch +var_A = dword ptr -0Ah +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = dword ptr 4 +arg_4 = dword ptr 8 +arg_8 = word ptr 0Ch +arg_A = word ptr 0Eh + + push bp + mov bp, sp + sub sp, 0Ch + cld + push si + push ds + push di + push es + mov ax, word_12306 + mov cs:word_9447, ax + mov ax, 3D00h + push ds + lds dx, [bp+arg_0] + int 21h ; DOS - 2+ - OPEN DISK FILE WITH HANDLE + ; DS:DX -> ASCIZ filename + ; AL = access mode + ; 0 - read + pop ds + mov [bp+var_2], ax + jnb short loc_946E + jmp loc_967C +; --------------------------------------------------------------------------- + +loc_946E: ; CODE XREF: __exec+1Fj + mov es, segx + mov cs:word_9372, es + mov ax, es:2Ch + mov [bp+var_C], ax + mov di, 80h ; '' + push ds + lds si, [bp+arg_4] + lodsb + mov dx, si + stosb + xor cx, cx + mov cl, al + inc cx + rep movsb + mov ax, 2901h + mov si, dx + mov di, 5Ch ; '\' + int 21h ; DOS - PARSE FILENAME + ; DS:SI -> string to parse + ; ES:DI -> buffer to fill with unopened FCB + ; AL = bit mask to control parsing + mov cs:byte_93C4, al + +loc_949E: ; CODE XREF: __exec+63j + mov al, [si] + cmp al, 20h ; ' ' + jz short loc_94AF + cmp al, 9 + jz short loc_94AF + cmp al, 0Dh + jz short loc_94AF + inc si + jmp short loc_949E +; --------------------------------------------------------------------------- + +loc_94AF: ; CODE XREF: __exec+58j __exec+5Cj ... + mov ax, 2901h + mov di, 6Ch ; 'l' + int 21h ; DOS - PARSE FILENAME + ; DS:SI -> string to parse + ; ES:DI -> buffer to fill with unopened FCB + ; AL = bit mask to control parsing + mov cs:byte_93C5, al + pop ds + mov ah, 4Ah ; 'J' + mov bx, 0FFFFh + int 21h ; DOS - 2+ - ADJUST MEMORY BLOCK SIZE (SETBLOCK) + ; ES = segment address of block to change + ; BX = new size in paragraphs + cmp byte ptr word_1230C, 3 + jnb short loc_94CE + sub bx, 280h + +loc_94CE: ; CODE XREF: __exec+7Ej + mov [bp+var_4], bx + mov ax, [bp+arg_8] + mov dx, [bp+arg_A] + mov bx, ax + or bx, dx + jnz short loc_94E3 + xor ax, ax + mov di, ax + jmp short loc_9500 +; --------------------------------------------------------------------------- + +loc_94E3: ; CODE XREF: __exec+91j + mov es, dx + mov di, ax + push di + mov cx, 0FFFFh + xor ax, ax + +loc_94ED: ; CODE XREF: __exec+A8j + repne scasb + cmp es:[di], al + jnz short loc_94ED + dec cx + add di, 3 + repne scasb + dec cx + mov ax, cx + neg ax + pop di + +loc_9500: ; CODE XREF: __exec+97j + mov word ptr [bp+var_A], di + mov word ptr [bp+var_A+2], es + add ax, 0Fh + mov cx, 4 + shr ax, cl + mov [bp+var_6], ax + mov si, word_12306 + dec si + mov es, si + cmp ax, es:3 + jbe short loc_9528 + dec cs:byte_9449 + inc ax + sub [bp+var_4], ax + +loc_9528: ; CODE XREF: __exec+D3j + lds si, [bp+arg_0] + push cs + pop es + assume es:seg000 + mov di, 9374h + +loc_9530: ; CODE XREF: __exec+EAj + lodsb + stosb + or al, al + jnz short loc_9530 + mov bx, [bp+var_2] + push ds + pop es + assume es:dseg + push cs + pop ds + assume ds:seg000 + mov di, 92E3h + mov ah, 3Fh ; '?' + mov cx, 18h + lea dx, [di+0E3h] + int 21h ; DOS - 2+ - READ FROM FILE WITH HANDLE + ; BX = file handle, CX = number of bytes to read + ; DS:DX -> buffer + jb short loc_9572 + cmp word ptr [di+0E3h], 5A4Dh + jz short loc_957E + mov ax, es:[si-5] + or ah, 20h + cmp ax, 632Eh + jnz short loc_956F + mov ax, es:[si-3] + or ax, 2020h + cmp ax, 6D6Fh + jnz short loc_956F + jmp short loc_95BA +; --------------------------------------------------------------------------- + +loc_956F: ; CODE XREF: __exec+115j __exec+121j + mov ax, 0Bh + +loc_9572: ; CODE XREF: __exec+101j __exec+1ADj ... + push ax + mov ah, 3Eh ; '>' + mov bx, [bp+var_2] + int 21h ; DOS - 2+ - CLOSE A FILE WITH HANDLE + ; BX = file handle + pop ax + jmp loc_967C +; --------------------------------------------------------------------------- + +loc_957E: ; CODE XREF: __exec+109j + mov ax, [di+0E7h] + xor dx, dx + mov dl, ah + mov ah, al + xor al, al + shl ax, 1 + rcl dx, 1 + add ax, [di+0E5h] + adc dx, 0 + mov cx, 4 + +loc_9598: ; CODE XREF: __exec+152j + shr dx, 1 + rcr ax, 1 + loop loc_9598 + inc ax + sub ax, [di+0EBh] + add ax, [di+0EDh] + xchg ax, bx + mov ax, [di+8Fh] + add ax, 10h + add [di+0F9h], ax + add [di+0F1h], ax + xchg ax, bx + jmp short loc_95E4 +; --------------------------------------------------------------------------- + +loc_95BA: ; CODE XREF: __exec+123j + mov ax, 4202h + xor cx, cx + xor dx, dx + int 21h ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK) + ; AL = method: offset from end of file + mov cx, 4 + +loc_95C6: ; CODE XREF: __exec+180j + shr dx, 1 + rcr ax, 1 + loop loc_95C6 + inc ax + xchg ax, bx + mov ax, [di+8Fh] + mov [di+0F9h], ax + mov word ptr [di+0F7h], 100h + mov [di+0F1h], ax + add ax, 10h + xchg ax, bx + +loc_95E4: ; CODE XREF: __exec+16Ej + mov [di+0FBh], bx + mov [di+0FDh], bx + add ax, 16h + cmp ax, [bp+var_4] + mov ax, 8 + jbe short loc_95FA + jmp loc_9572 +; --------------------------------------------------------------------------- + +loc_95FA: ; CODE XREF: __exec+1ABj + mov ah, 3Eh ; '>' + mov bx, [bp+var_2] + int 21h ; DOS - 2+ - CLOSE A FILE WITH HANDLE + ; BX = file handle + mov es, word ptr [di+8Fh] + assume es:nothing + mov ah, 4Ah ; 'J' + mov bx, [bp+var_4] + int 21h ; DOS - 2+ - ADJUST MEMORY BLOCK SIZE (SETBLOCK) + ; ES = segment address of block to change + ; BX = new size in paragraphs + jnb short loc_9611 + jmp loc_9572 +; --------------------------------------------------------------------------- + +loc_9611: ; CODE XREF: __exec+1C2j + add bx, [di+8Fh] + mov dx, bx + sub bx, 17h + mov cs:word_9445, bx + mov es, bx + mov cx, 0B0h ; '' + mov si, 92E3h + xor di, di + rep movsw + mov es, [bp+var_C] + mov cx, [bp+var_6] + cmp cs:byte_9449, 0 + jnz short loc_9643 + mov ah, 48h ; 'H' + mov bx, cx + int 21h ; DOS - 2+ - ALLOCATE MEMORY + ; BX = number of 16-byte paragraphs desired + jb short loc_967C + jmp short loc_9647 +; --------------------------------------------------------------------------- + +loc_9643: ; CODE XREF: __exec+1EDj + mov ax, cs:word_9447 + +loc_9647: ; CODE XREF: __exec+1F7j + mov es, ax + xor di, di + lds si, [bp+var_A] + assume ds:dseg + add cx, cx + add cx, cx + add cx, cx + rep movsw + push es + push dx + push ds + mov ds, cs:DGROUP@ + nop + push cs + call near ptr __cexit + pop ds + pop dx + cmp cs:byte_9449, 0 + jnz short loc_9676 + mov es, cs:word_9447 + mov ah, 49h + int 21h ; DOS - 2+ - FREE MEMORY + ; ES = segment address of area to be freed + +loc_9676: ; CODE XREF: __exec+221j + pop cx + jmp dword ptr cs:byte_9443 +; --------------------------------------------------------------------------- + +loc_967C: ; CODE XREF: __exec+21j __exec+131j ... + pop es + pop di + pop ds + pop si + push ax + call __IOERROR + mov sp, bp + pop bp + retn +__exec endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int execl(char *path, char *arg0, ...) +_execl proc far ; CODE XREF: sub_A7B5+EDP sub_A8AD+75P + +_s = dword ptr 6 +arg0 = word ptr 0Ah + + push bp + mov bp, sp + push si + push di + xor ax, ax + push ax ; int + push ax ; int + push ax ; int + push ss ; int + lea ax, [bp+arg0] + push ax ; int + push word ptr [bp+_s+2] + push word ptr [bp+_s] ; s + mov ax, 944Ah + push ax ; int + call sub_9F6A + add sp, 10h + pop di + pop si + pop bp + retf +_execl endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: thunk + +sub_96AB proc near ; CODE XREF: __VPRINTER+31Bp + jmp off_133CC +sub_96AB endp + +; --------------------------------------------------------------------------- +byte_96AF db 2 dup(0) ; DATA XREF: seg000:96BDw sub_9749+21r ... +; --------------------------------------------------------------------------- + +unknown_libname_4: ; BCC v4.x/5.x DOS runtime + pop word_13228 + pop word_1322A + pop word_1322C + mov word ptr cs:byte_96AF, ds + mov word_1322E, si + mov word_13230, di + cld + mov es, segx + mov si, 80h ; '' + xor ah, ah + lods byte ptr es:[si] + inc ax + mov bp, es + xchg dx, si + xchg ax, bx + mov si, word_12304 + inc si + inc si + mov cx, 1 + cmp byte ptr word_1230C, 3 + jb short loc_96FD + mov es, word_12306 + mov di, si + mov cl, 7Fh ; '' + xor al, al + repne scasb + jcxz short loc_9744 + xor cl, 7Fh + +loc_96FD: ; CODE XREF: seg000:96EAj + push ax + mov ax, cx + add ax, bx + inc ax + and ax, 0FFFEh + mov di, sp + sub di, ax + jb short loc_9744 + mov sp, di + push es + pop ds + push ss + pop es + push cx + dec cx + rep movsb + xor al, al + stosb + mov ds, bp + xchg si, dx + xchg bx, cx + mov ax, bx + mov dx, ax + inc bx + +loc_9724: ; CODE XREF: seg000:973Ej seg000:9742j + call sub_9749 + ja short loc_9734 + +loc_9729: ; CODE XREF: seg000:9732j + jb short loc_979B + cmp al, 0Dh + jz short loc_9740 + call sub_9749 + ja short loc_9729 + +loc_9734: ; CODE XREF: seg000:9727j + cmp al, 20h ; ' ' + jz short loc_9740 + cmp al, 0Dh + jz short loc_9740 + cmp al, 9 + jnz short loc_9724 + +loc_9740: ; CODE XREF: seg000:972Dj seg000:9736j ... + xor al, al + jmp short loc_9724 +; --------------------------------------------------------------------------- + +loc_9744: ; CODE XREF: seg000:96F8j seg000:970Aj ... + nop + nop + jmp near ptr sub_1C47 + +; =============== S U B R O U T I N E ======================================= + + +sub_9749 proc near ; CODE XREF: seg000:loc_9724p + ; seg000:972Fp + or ax, ax + jz short loc_9754 + inc dx + stosb + or al, al + jnz short loc_9754 + inc bx + +loc_9754: ; CODE XREF: sub_9749+2j sub_9749+8j + xchg ah, al + xor al, al + stc + jcxz short locret_979A + lodsb + dec cx + cmp dh, 1 + jz short loc_9780 + xor dh, dh + push ax + push bx + push cx + push dx + push ds + push es + mov ds, word ptr cs:byte_96AF + push ax + nop + push cs + call near ptr sub_3B1C + or ax, ax + pop cx + pop es + pop ds + pop dx + pop cx + pop bx + pop ax + jz short loc_9782 + +loc_9780: ; CODE XREF: sub_9749+17j + inc dh + +loc_9782: ; CODE XREF: sub_9749+35j + cmp dh, 0 + jnz short loc_9798 + sub al, 22h ; '"' + jz short locret_979A + add al, 22h ; '"' + cmp al, 5Ch ; '\' + jnz short loc_9798 + cmp byte ptr [si], 22h ; '"' + jnz short loc_9798 + lodsb + dec cx + +loc_9798: ; CODE XREF: sub_9749+3Cj sub_9749+46j ... + or si, si + +locret_979A: ; CODE XREF: sub_9749+10j sub_9749+40j + retn +sub_9749 endp + +; --------------------------------------------------------------------------- + +loc_979B: ; CODE XREF: seg000:loc_9729j + pop cx + xor dh, dh + add cx, dx + mov ds, word ptr cs:byte_96AF + mov word_13222, bx + inc bx + add bx, bx + add bx, bx + mov si, sp + mov bp, sp + sub bp, bx + jb short loc_9744 + mov sp, bp + mov word_13224, bp + mov word_13226, ss + +loc_97C0: ; CODE XREF: seg000:97D1j + jcxz short loc_97D3 + mov [bp+0], si + mov word ptr [bp+2], ss + add bp, 4 + +loc_97CB: ; CODE XREF: seg000:97CFj + lods byte ptr ss:[si] + or al, al + loopne loc_97CB + jz short loc_97C0 + +loc_97D3: ; CODE XREF: seg000:loc_97C0j + xor ax, ax + mov [bp+0], ax + mov [bp+2], ax + mov ds, word ptr cs:byte_96AF + mov si, word_1322E + mov di, word_13230 + push word_1322C + push word_1322A + mov ax, word_13222 + mov argc, ax + mov ax, word_13226 + mov word_122FE, ax + mov ax, word_13224 + mov argv, ax + jmp word_13228 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl setblock(unsigned int segx, unsigned int newsize) +_setblock proc far ; CODE XREF: sub_34A9+4Ep + +_segx = word ptr 6 +newsize = word ptr 8 + + push bp + mov bp, sp + push si + push di + mov ah, 4Ah ; 'J' + mov bx, [bp+newsize] + mov es, [bp+_segx] + int 21h ; DOS - 2+ - ADJUST MEMORY BLOCK SIZE (SETBLOCK) + ; ES = segment address of block to change + ; BX = new size in paragraphs + jb short loc_981C + mov ax, 0FFFFh + jmp short loc_9822 +; --------------------------------------------------------------------------- + +loc_981C: ; CODE XREF: _setblock+Fj + push bx + push ax + call __IOERROR + pop ax + +loc_9822: ; CODE XREF: _setblock+14j + pop di + pop si + pop bp + retf +_setblock endp + +; --------------------------------------------------------------------------- + push si + push di + mov es, word_12306 + xor di, di + push es + push word_12308 + nop + push cs + call near ptr sub_32C1 + pop bx + mov bx, ax + pop es + mov word ptr dword_13232, ax + mov word ptr dword_13232+2, dx + push ds + mov ds, dx + or ax, dx + jnz short loc_984F + nop + nop + jmp near ptr sub_1C47 +; --------------------------------------------------------------------------- + +loc_984F: ; CODE XREF: seg000:9848j + xor ax, ax + mov cx, 0FFFFh + cmp byte ptr es:[di], 0 + jz short loc_9869 + +loc_985A: ; CODE XREF: seg000:9867j + mov [bx], di + mov word ptr [bx+2], es + add bx, 4 + repne scasb + cmp es:[di], al + jnz short loc_985A + +loc_9869: ; CODE XREF: seg000:9858j + mov [bx], ax + mov [bx+2], ax + pop ds + pop di + pop si + mov ax, word ptr dword_13232+2 + mov word_12302, ax + mov ax, word ptr dword_13232 + mov envp, ax + retn +; --------------------------------------------------------------------------- + +unknown_libname_5: ; BCC v4.x/5.x DOS runtime + push si + push di + pop di + pop si + retf +; --------------------------------------------------------------------------- + dd byte_116AF + db 4 dup(0), 83h, 98h + dw seg seg000 + db 0E2h, 0FFh +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + mov ax, [bp+6] + or ax, [bp+8] + jz short loc_98D8 + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + xor ax, ax + push ax + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr @xmsg@$bdtr$qv ; xmsg::~xmsg(void) + add sp, 6 + test byte ptr [bp+0Ah], 1 + jz short loc_98D6 + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr _registerbgidriver + pop cx + pop cx + jmp short loc_98DA +; --------------------------------------------------------------------------- + +loc_98D6: ; CODE XREF: seg000:98C5j + jmp short loc_98DA +; --------------------------------------------------------------------------- + +loc_98D8: ; CODE XREF: seg000:989Cj + xor ax, ax + +loc_98DA: ; CODE XREF: seg000:98D4j + ; seg000:loc_98D6j + pop di + pop si + pop bp + retf +; --------------------------------------------------------------------------- + +unknown_libname_6: ; BCC v4.x/5.x DOS runtime + push si + push di + pop di + pop si + retf +; --------------------------------------------------------------------------- + dd byte_11857 + dd byte_11809 + db 4 dup(0), 0B2h, 1 + dw seg seg015 + db 87h, 20h, 0FCh, 0FFh, 6 dup(0), 0E3h, 98h + dw seg seg000 + db 0DEh, 0FFh, 2 dup(0), 5, 3 dup(0), 2 dup(0FFh), 6, 0 + db 5, 3 dup(0), 0EFh, 98h +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + mov ax, [bp+6] + or ax, [bp+8] + jz short loc_995A + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + xor ax, ax + push ax + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr @xmsg@$bdtr$qv ; xmsg::~xmsg(void) + add sp, 6 + test byte ptr [bp+0Ah], 1 + jz short loc_9958 + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr _registerbgidriver + pop cx + pop cx + jmp short loc_995C +; --------------------------------------------------------------------------- + +loc_9958: ; CODE XREF: seg000:9947j + jmp short loc_995C +; --------------------------------------------------------------------------- + +loc_995A: ; CODE XREF: seg000:991Ej + xor ax, ax + +loc_995C: ; CODE XREF: seg000:9956j + ; seg000:loc_9958j + pop di + pop si + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + mov ax, [bp+6] + or ax, [bp+8] + jz short loc_99A7 + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + xor ax, ax + push ax + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr @xmsg@$bdtr$qv ; xmsg::~xmsg(void) + add sp, 6 + test byte ptr [bp+0Ah], 1 + jz short loc_99A5 + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr _registerbgidriver + pop cx + pop cx + jmp short loc_99A9 +; --------------------------------------------------------------------------- + +loc_99A5: ; CODE XREF: seg000:9994j + jmp short loc_99A9 +; --------------------------------------------------------------------------- + +loc_99A7: ; CODE XREF: seg000:996Bj + xor ax, ax + +loc_99A9: ; CODE XREF: seg000:99A3j + ; seg000:loc_99A5j + pop di + pop si + pop bp + retf +; --------------------------------------------------------------------------- + +unknown_libname_7: ; BCC v4.x/5.x DOS runtime + push si + push di + pop di + pop si + retf +; --------------------------------------------------------------------------- + db 4 dup(0), 0B2h, 99h + dw seg seg000 + db 0E2h, 0FFh, 0FAh, 0Bh + dw seg seg015 + db 4 dup(0), 0C0h, 0Bh + dw seg seg015 + db 4, 0, 0FCh, 0FFh, 2 dup(0), 0FAh, 0Bh + dw seg seg015 + db 4, 0, 0F8h, 0FFh, 6 dup(0), 88h, 0Bh + dw seg seg015 + db 0, 2 dup(1), 7 dup(0), 0BCh, 99h + dw seg seg000 + db 0DAh, 0FFh, 2 dup(0), 5, 3 dup(0), 0C4h, 99h, 6, 0 + db 5, 0, 1, 0, 0DCh, 99h, 0FAh, 0Bh + dw seg seg015 + dd 0 + dd byte_12200 + db 4, 0, 0FCh, 0FFh, 2 dup(0), 0FAh, 0Bh + dw seg seg015 + db 4, 0, 0F8h, 0FFh, 6 dup(0), 88h, 0Bh + dw seg seg015 + db 0, 2 dup(1), 8 dup(0), 9Ah + dw seg seg000 + db 0DAh, 0FFh, 2 dup(0), 5, 3 dup(0), 8, 9Ah, 6, 0, 5 + db 0, 1, 0, 20h, 9Ah, 0FAh, 0Bh + dw seg seg015 + db 4 dup(0), 0C0h, 0Bh + dw seg seg015 + db 4, 0, 0FCh, 0FFh, 2 dup(0), 0FAh, 0Bh + dw seg seg015 + db 4, 0, 0F8h, 0FFh, 6 dup(0), 88h, 0Bh + dw seg seg015 + db 0, 2 dup(1), 7 dup(0), 44h, 9Ah + dw seg seg000 + db 0DAh, 0FFh, 2 dup(0), 5, 3 dup(0), 4Ch, 9Ah, 6, 0, 5 + db 0, 1, 0, 64h, 9Ah, 4 dup(0), 88h, 9Ah + dw seg seg000 + db 0E2h, 0FFh, 46h, 0Bh + dw seg seg015 + dd byte_1223A + db 4 dup(0), 92h, 9Ah + dw seg seg000 + db 0E2h, 0FFh, 4 dup(0), 0A4h, 9Ah + dw seg seg000 + db 0E2h, 0FFh, 46h, 0Bh + dw seg seg015 + dd byte_12138 + db 4 dup(0), 0AEh, 9Ah + dw seg seg000 + db 0E2h, 0FFh, 4 dup(0), 0C0h, 9Ah + dw seg seg000 + db 0E2h, 0FFh, 46h, 0Bh + dw seg seg015 + dd byte_12138 + db 4 dup(0), 0CAh, 9Ah + dw seg seg000 + db 0E2h, 0FFh +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + push word ptr [bp+0Ch] + push word ptr [bp+0Ah] + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr @xmsg@$bctr$qmx4xmsg ; xmsg::xmsg(xmsg &) + add sp, 8 + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + mov dx, [bp+8] + mov ax, [bp+6] + pop di + pop si + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + mov ax, [bp+6] + or ax, [bp+8] + jz short loc_9B58 + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + xor ax, ax + push ax + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr @xmsg@$bdtr$qv ; xmsg::~xmsg(void) + add sp, 6 + test byte ptr [bp+0Ah], 1 + jz short loc_9B56 + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr _registerbgidriver + pop cx + pop cx + jmp short loc_9B5A +; --------------------------------------------------------------------------- + +loc_9B56: ; CODE XREF: seg000:9B45j + jmp short loc_9B5A +; --------------------------------------------------------------------------- + +loc_9B58: ; CODE XREF: seg000:9B1Cj + xor ax, ax + +loc_9B5A: ; CODE XREF: seg000:9B54j + ; seg000:loc_9B56j + pop di + pop si + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + mov ax, [bp+6] + or ax, [bp+8] + jz short loc_9BA5 + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + xor ax, ax + push ax + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr @xmsg@$bdtr$qv ; xmsg::~xmsg(void) + add sp, 6 + test byte ptr [bp+0Ah], 1 + jz short loc_9BA3 + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr _registerbgidriver + pop cx + pop cx + jmp short loc_9BA7 +; --------------------------------------------------------------------------- + +loc_9BA3: ; CODE XREF: seg000:9B92j + jmp short loc_9BA7 +; --------------------------------------------------------------------------- + +loc_9BA5: ; CODE XREF: seg000:9B69j + xor ax, ax + +loc_9BA7: ; CODE XREF: seg000:9BA1j + ; seg000:loc_9BA3j + pop di + pop si + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + mov ax, [bp+6] + or ax, [bp+8] + jz short loc_9BF2 + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + xor ax, ax + push ax + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr @xmsg@$bdtr$qv ; xmsg::~xmsg(void) + add sp, 6 + test byte ptr [bp+0Ah], 1 + jz short loc_9BF0 + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr _registerbgidriver + pop cx + pop cx + jmp short loc_9BF4 +; --------------------------------------------------------------------------- + +loc_9BF0: ; CODE XREF: seg000:9BDFj + jmp short loc_9BF4 +; --------------------------------------------------------------------------- + +loc_9BF2: ; CODE XREF: seg000:9BB6j + xor ax, ax + +loc_9BF4: ; CODE XREF: seg000:9BEEj + ; seg000:loc_9BF0j + pop di + pop si + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_9BF8 proc far ; CODE XREF: sub_BC8B+9AP sub_BD3A+8EP ... + +arg_0 = word ptr 6 + + push bp + mov bp, sp + push si + push di + mov ax, [bp+arg_0] + cmp word_132A0, 2 + jnz short loc_9C0F + push ax + nop + push cs + call near ptr sub_9DC6 + jmp short loc_9C1C +; --------------------------------------------------------------------------- + +loc_9C0F: ; CODE XREF: sub_9BF8+Dj + cmp word_132A0, 1 + jnz short loc_9C1D + push ax + nop + push cs + call near ptr sub_9C7C + +loc_9C1C: ; CODE XREF: sub_9BF8+15j + pop cx + +loc_9C1D: ; CODE XREF: sub_9BF8+1Cj + pop di + pop si + pop bp + retf +sub_9BF8 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_9C21 proc near ; CODE XREF: sub_9C26+8p sub_9C26+Fp + push si + push di + pop di + pop si + retn +sub_9C21 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_9C26 proc near ; CODE XREF: seg000:loc_9C58p + ; sub_9C7C+8p ... + push si + push di + pushf + cli + mov al, 0 + out 43h, al ; Timer 8253-5 (AT: 8254.2). + call sub_9C21 + in al, 40h ; Timer 8253-5 (AT: 8254.2). + mov bl, al + call sub_9C21 + in al, 40h ; Timer 8253-5 (AT: 8254.2). + mov bh, al + not bx + popf + mov ax, bx + pop di + pop si + retn +sub_9C26 endp + +; --------------------------------------------------------------------------- + +loc_9C44: ; DATA XREF: dseg:1172o + push bp + mov bp, sp + sub sp, 2 + push si + push di + cmp word_132A0, 1 + jnz short loc_9C76 + mov word ptr [bp-2], 0 + +loc_9C58: ; CODE XREF: seg000:9C74j + call sub_9C26 + test al, 1 + jnz short loc_9C6D + mov word_1329E, 0 + mov word_1329C, 4A9h + jmp short loc_9C76 +; --------------------------------------------------------------------------- + +loc_9C6D: ; CODE XREF: seg000:9C5Dj + inc word ptr [bp-2] + cmp word ptr [bp-2], 64h ; 'd' + jl short loc_9C58 + +loc_9C76: ; CODE XREF: seg000:9C51j seg000:9C6Bj + pop di + pop si + mov sp, bp + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_9C7C proc far ; CODE XREF: sub_9BF8+21p + +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 + + push bp + mov bp, sp + sub sp, 6 + push si + push di + call sub_9C26 + mov [bp+var_6], ax + xor dx, dx + mov bx, [bp+arg_0] + xor cx, cx + push ax + push dx + mov dx, word_1329E + mov ax, word_1329C + call N_LXMUL@ + pop bx + pop cx + add cx, ax + adc bx, dx + mov [bp+var_2], bx + mov [bp+var_4], cx + jmp short loc_9CC4 +; --------------------------------------------------------------------------- + +loc_9CAB: ; CODE XREF: sub_9C7C+52j sub_9C7C+59j + cmp bx, [bp+var_6] + jnb short loc_9CC1 + cmp [bp+var_2], 1 + ja short loc_9CBE + jb short loc_9CD7 + cmp [bp+var_4], 0 + jb short loc_9CD7 + +loc_9CBE: ; CODE XREF: sub_9C7C+38j + dec [bp+var_2] + +loc_9CC1: ; CODE XREF: sub_9C7C+32j + mov [bp+var_6], bx + +loc_9CC4: ; CODE XREF: sub_9C7C+2Dj + call sub_9C26 + mov bx, ax + xor dx, dx + cmp dx, [bp+var_2] + jb short loc_9CAB + jnz short loc_9CD7 + cmp ax, [bp+var_4] + jb short loc_9CAB + +loc_9CD7: ; CODE XREF: sub_9C7C+3Aj sub_9C7C+40j ... + pop di + pop si + mov sp, bp + pop bp + retf +sub_9C7C endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_9CDD proc near ; CODE XREF: sub_9DC6+25p + +arg_0 = word ptr 4 + + push bp + mov bp, sp + push si + push di + xor ax, ax + mov es, ax + test byte ptr es:0501h, 8 + jz short loc_9D06 + mov ax, 0CD4h + test byte ptr es:loc_54B+1, 20h + jz short loc_9D1F + test byte ptr es:loc_456+3, 8 + jz short loc_9D1F + mov ax, 1388h + jmp short loc_9D1F +; --------------------------------------------------------------------------- + +loc_9D06: ; CODE XREF: sub_9CDD+Fj + mov ax, 0C4Bh + test byte ptr es:loc_54B+1, 20h + jnz short loc_9D1F + mov ax, 9B3h + test byte ptr es:loc_53C, 80h + jnz short loc_9D1F + mov ax, 627h + +loc_9D1F: ; CODE XREF: sub_9CDD+1Aj sub_9CDD+22j ... + mov dx, [bp+arg_0] + cmp dx, 1 + jb short loc_9D52 + jz short loc_9D2C + mul dx + inc dx + +loc_9D2C: ; CODE XREF: sub_9CDD+4Aj + dec dx + mov bx, 64h ; 'd' + xchg ax, cx + xchg ax, dx + xor dx, dx + div bx + xchg ax, cx + div bx + mov bx, cx + inc bx + mov cx, ax + mov dx, 60h ; '`' + mov ah, 40h ; '@' + +loc_9D43: ; CODE XREF: sub_9CDD+69j sub_9CDD+70j ... + in al, dx ; AT Keyboard controller 8042. + test al, ah + jz short loc_9D43 + +loc_9D48: ; CODE XREF: sub_9CDD+6Ej + in al, dx ; AT Keyboard controller 8042. + test al, ah + jnz short loc_9D48 + loop loc_9D43 + dec bx + jnz short loc_9D43 + +loc_9D52: ; CODE XREF: sub_9CDD+48j + pop di + pop si + pop bp + retn +sub_9CDD endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_9D56 proc near ; CODE XREF: sub_9DC6+1Fp + +arg_0 = word ptr 4 + + push bp + mov bp, sp + push si + push di + +loc_9D5B: ; CODE XREF: sub_9D56+12j + pushf + cli + in ax, 5Eh + xchg ax, cx + in ax, 5Ch + xchg ax, bx + in ax, 5Eh + popf + cmp cx, ax + jnz short loc_9D5B + mov cl, ch + xor ch, ch + xor si, si + mov di, 133h + mov ax, [bp+arg_0] + cmp ax, 1 + jb short loc_9DC2 + jz short loc_9D98 + cmp ax, 2 + jnz short loc_9D86 + shl di, 1 + jmp short loc_9D98 +; --------------------------------------------------------------------------- + +loc_9D86: ; CODE XREF: sub_9D56+2Aj + mov si, 0C00h + mul si + xchg ax, si + xchg ax, dx + xor dx, dx + mov di, 0Ah + div di + xchg ax, si + div di + xchg ax, di + +loc_9D98: ; CODE XREF: sub_9D56+25j sub_9D56+2Ej + mov dx, cx + add bx, di + adc cx, si + +loc_9D9E: ; CODE XREF: sub_9D56+55j sub_9D56+64j ... + pushf + cli + in ax, 5Eh + xchg ax, si + in ax, 5Ch + xchg ax, di + in ax, 5Eh + popf + cmp si, ax + jnz short loc_9D9E + mov al, ah + mov ah, dh + cmp al, dl + mov dl, al + adc dh, 0 + cmp dx, cx + jb short loc_9D9E + ja short loc_9DC2 + cmp di, bx + jb short loc_9D9E + +loc_9DC2: ; CODE XREF: sub_9D56+23j sub_9D56+66j + pop di + pop si + pop bp + retn +sub_9D56 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_9DC6 proc far ; CODE XREF: sub_9BF8+12p + +arg_0 = word ptr 6 + + push bp + mov bp, sp + push si + push di + mov dx, [bp+arg_0] + xor ax, ax + mov es, ax + test byte ptr es:loc_456+2, 80h + jnz short loc_9DE4 + mov es, ax + test byte ptr es:loc_45A+1, 4 + jz short loc_9DEA + +loc_9DE4: ; CODE XREF: sub_9DC6+12j + push dx + call sub_9D56 + jmp short loc_9DEE +; --------------------------------------------------------------------------- + +loc_9DEA: ; CODE XREF: sub_9DC6+1Cj + push dx + call sub_9CDD + +loc_9DEE: ; CODE XREF: sub_9DC6+22j + pop cx + pop di + pop si + pop bp + retf +sub_9DC6 endp + +; --------------------------------------------------------------------------- + +loc_9DF3: ; DATA XREF: dseg:1178o + push si + push di + cmp word_132A0, 0 + jnz short loc_9E1A + mov ah, 4 + xor cx, cx + int 1Ah ; CLOCK - READ DATE FROM REAL TIME CLOCK (AT,XT286,CONV,PS) + ; Return: DL = day in BCD + ; DH = month in BCD + ; CL = year in BCD + ; CH = century (19h or 20h) + cmp ch, 19h + jz short loc_9E14 + cmp ch, 20h ; ' ' + jz short loc_9E14 + mov word_132A0, 2 + jmp short loc_9E1A +; --------------------------------------------------------------------------- + +loc_9E14: ; CODE XREF: seg000:9E05j seg000:9E0Aj + mov word_132A0, 1 + +loc_9E1A: ; CODE XREF: seg000:9DFAj seg000:9E12j + pop di + pop si + retn + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_9E1D proc far ; CODE XREF: sub_B4E3+8AP + ; sub_C948+125P + +arg_0 = word ptr 6 + + push bp + mov bp, sp + push si + push di + mov ax, [bp+arg_0] + cmp ah, 81h ; '' + jb short loc_9E57 + cmp ah, 0A0h ; '' + jb short loc_9E39 + cmp ah, 0E0h ; '' + jb short loc_9E57 + cmp ah, 0F0h ; '' + jnb short loc_9E57 + +loc_9E39: ; CODE XREF: sub_9E1D+10j + cmp al, 40h ; '@' + jb short loc_9E57 + cmp al, 0FDh ; '' + jnb short loc_9E57 + cmp al, 7Fh ; '' + jz short loc_9E57 + cmp al, 80h ; '' + adc al, 61h ; 'a' + jb short loc_9E4D + sub al, 0A2h ; '' + +loc_9E4D: ; CODE XREF: sub_9E1D+2Cj + rcl ah, 1 + and ah, 7Fh + add ax, 1F21h + jmp short loc_9E59 +; --------------------------------------------------------------------------- + +loc_9E57: ; CODE XREF: sub_9E1D+Bj sub_9E1D+15j ... + xor ax, ax + +loc_9E59: ; CODE XREF: sub_9E1D+38j + pop di + pop si + pop bp + retf +sub_9E1D endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_9E5D proc far ; CODE XREF: sub_9F6A+3Ap + +var_8 = dword ptr -8 +var_4 = dword ptr -4 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + sub sp, 8 + push si + push di + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + jmp short loc_9ECE +; --------------------------------------------------------------------------- + +loc_9E73: ; CODE XREF: sub_9E5D+78j + les bx, [bp+var_4] + assume es:nothing + mov al, es:[bx] + push ax + nop + push cs + call near ptr sub_3B1C + pop cx + or ax, ax + jz short loc_9E92 + inc word ptr [bp+var_4] + les bx, [bp+var_4] + cmp byte ptr es:[bx], 0 + jnz short loc_9ECB + jmp short loc_9ED7 +; --------------------------------------------------------------------------- + +loc_9E92: ; CODE XREF: sub_9E5D+25j + mov dx, [bp+arg_6] + mov ax, [bp+arg_4] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + jmp short loc_9EB1 +; --------------------------------------------------------------------------- + +loc_9EA0: ; CODE XREF: sub_9E5D+5Bj + les bx, [bp+var_4] + mov al, es:[bx] + les bx, [bp+var_8] + cmp al, es:[bx] + jz short loc_9EBA + inc word ptr [bp+var_8] + +loc_9EB1: ; CODE XREF: sub_9E5D+41j + les bx, [bp+var_8] + cmp byte ptr es:[bx], 0 + jnz short loc_9EA0 + +loc_9EBA: ; CODE XREF: sub_9E5D+4Fj + les bx, [bp+var_8] + cmp byte ptr es:[bx], 0 + jz short loc_9ECB + mov dx, word ptr [bp+var_4+2] + mov ax, word ptr [bp+var_4] + jmp short loc_9EDB +; --------------------------------------------------------------------------- + +loc_9ECB: ; CODE XREF: sub_9E5D+31j sub_9E5D+64j + inc word ptr [bp+var_4] + +loc_9ECE: ; CODE XREF: sub_9E5D+14j + les bx, [bp+var_4] + cmp byte ptr es:[bx], 0 + jnz short loc_9E73 + +loc_9ED7: ; CODE XREF: sub_9E5D+33j + xor dx, dx + xor ax, ax + +loc_9EDB: ; CODE XREF: sub_9E5D+6Cj + pop di + pop si + mov sp, bp + pop bp + retf +sub_9E5D endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +; int __cdecl __far sub_9EE1(int, int, char *pathname, char *src, int) +sub_9EE1 proc far ; CODE XREF: sub_9F6A+7Fp sub_9F6A+BDp ... + +dest = byte ptr -50h +arg_0 = word ptr 6 +arg_2 = word ptr 8 +pathname = dword ptr 0Ah +src = dword ptr 0Eh +arg_C = word ptr 12h + + push bp + mov bp, sp + sub sp, 50h + push si + push di + push [bp+arg_2] + push [bp+arg_0] ; src + push ss + lea ax, [bp+dest] + push ax ; dest + nop + push cs + call near ptr _strcpy + push word ptr [bp+src+2] + push word ptr [bp+src] ; src + push ss + lea ax, [bp+dest] + push ax ; dest + nop + push cs + call near ptr _strcat + add sp, 10h + cmp [bp+arg_C], 0 + jz short loc_9F35 + push word ptr [bp+pathname+2] + push word ptr [bp+pathname] ; pathname + push ds + mov ax, 1114h + push ax ; varname + push ss + lea ax, [bp+dest] + push ax ; file + nop + push cs + call near ptr __searchenv + add sp, 0Ch + les bx, [bp+pathname] + cmp byte ptr es:[bx], 0 + jz short loc_9F62 + jmp short loc_9F5D +; --------------------------------------------------------------------------- + +loc_9F35: ; CODE XREF: sub_9EE1+2Fj + push ss + lea ax, [bp+dest] + push ax ; src + push word ptr [bp+pathname+2] + push word ptr [bp+pathname] ; dest + nop + push cs + call near ptr _strcpy + add sp, 8 + mov ax, 4 + push ax ; char + push ss + lea ax, [bp+dest] + push ax ; pathname + nop + push cs + call near ptr __access + add sp, 6 + or ax, ax + jnz short loc_9F62 + +loc_9F5D: ; CODE XREF: sub_9EE1+52j + mov ax, 1 + jmp short loc_9F64 +; --------------------------------------------------------------------------- + +loc_9F62: ; CODE XREF: sub_9EE1+50j sub_9EE1+7Aj + xor ax, ax + +loc_9F64: ; CODE XREF: sub_9EE1+7Fj + pop di + pop si + mov sp, bp + pop bp + retf +sub_9EE1 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +; int __cdecl sub_9F6A(int, char *s, int, int, int, int, int) +sub_9F6A proc near ; CODE XREF: _execl+19p + +pathname = word ptr -9Ch +var_1A = word ptr -1Ah +var_18 = word ptr -18h +var_16 = word ptr -16h +var_14 = dword ptr -14h +s1 = dword ptr -10h +var_C = word ptr -0Ch +var_A = word ptr -0Ah +var_8 = word ptr -8 +var_6 = word ptr -6 +src = dword ptr -4 +_s = dword ptr 6 +arg_6 = word ptr 0Ah +arg_8 = word ptr 0Ch +arg_A = word ptr 0Eh +arg_C = word ptr 10h +arg_E = word ptr 12h + + push bp + mov bp, sp + sub sp, 9Ch + push si + push di + les bx, [bp+_s] + mov al, es:[bx] + cbw + mov dx, ax + cmp ax, 61h ; 'a' + jb short loc_9F84 + sub dx, 20h ; ' ' + +loc_9F84: ; CODE XREF: sub_9F6A+15j + cmp dx, 41h ; 'A' + jb short loc_9F98 + cmp dx, 5Ah ; 'Z' + ja short loc_9F98 + les bx, [bp+_s] + cmp byte ptr es:[bx+1], 3Ah ; ':' + jz short loc_9FAE + +loc_9F98: ; CODE XREF: sub_9F6A+1Dj sub_9F6A+22j + push ds + mov ax, 1119h + push ax + push word ptr [bp+_s+2] + push word ptr [bp+_s] + push cs + call near ptr sub_9E5D + add sp, 8 + or ax, dx + jz short loc_9FB3 + +loc_9FAE: ; CODE XREF: sub_9F6A+2Cj + mov [bp+arg_E], 0 + +loc_9FB3: ; CODE XREF: sub_9F6A+42j + mov [bp+var_1A], 0 + mov ax, 2Eh ; '.' + push ax ; char + push word ptr [bp+_s+2] + push word ptr [bp+_s] ; s + nop + push cs + call near ptr sub_57F4 + add sp, 6 + mov word ptr [bp+s1+2], dx + mov word ptr [bp+s1], ax + or ax, dx + jz short loc_A012 + push [bp+arg_E] ; int + push ds + mov ax, 111Ch + push ax ; src + push ss + lea ax, [bp+pathname] + push ax ; pathname + push word ptr [bp+_s+2] ; int + push word ptr [bp+_s] ; int + push cs + call near ptr sub_9EE1 + add sp, 0Eh + mov [bp+var_18], ax + or ax, ax + jnz short loc_9FF9 + jmp loc_A07D +; --------------------------------------------------------------------------- + +loc_9FF9: ; CODE XREF: sub_9F6A+8Aj + push ds + mov ax, 111Dh + push ax ; s2 + push word ptr [bp+s1+2] + push word ptr [bp+s1] ; s1 + nop + push cs + call near ptr _stricmp + add sp, 8 + or ax, ax + jnz short loc_A07D + jmp short loc_A078 +; --------------------------------------------------------------------------- + +loc_A012: ; CODE XREF: sub_9F6A+68j + push [bp+arg_E] ; int + push ds + mov ax, 1122h + push ax ; src + push ss + lea ax, [bp+pathname] + push ax ; pathname + push word ptr [bp+_s+2] ; int + push word ptr [bp+_s] ; int + push cs + call near ptr sub_9EE1 + add sp, 0Eh + mov [bp+var_18], ax + or ax, ax + jnz short loc_A07D + push [bp+arg_E] ; int + push ds + mov ax, 1127h + push ax ; src + push ss + lea ax, [bp+pathname] + push ax ; pathname + push word ptr [bp+_s+2] ; int + push word ptr [bp+_s] ; int + push cs + call near ptr sub_9EE1 + add sp, 0Eh + mov [bp+var_18], ax + or ax, ax + jnz short loc_A07D + push [bp+arg_E] ; int + push ds + mov ax, 112Ch + push ax ; src + push ss + lea ax, [bp+pathname] + push ax ; pathname + push word ptr [bp+_s+2] ; int + push word ptr [bp+_s] ; int + push cs + call near ptr sub_9EE1 + add sp, 0Eh + mov [bp+var_18], ax + or ax, ax + jz short loc_A07D + +loc_A078: ; CODE XREF: sub_9F6A+A6j + mov [bp+var_1A], 1 + +loc_A07D: ; CODE XREF: sub_9F6A+8Cj sub_9F6A+A4j ... + cmp [bp+var_18], 0 + jz short loc_A09F + cmp [bp+var_1A], 0 + jz short loc_A0A8 + push ds + mov ax, 1131h + push ax ; name + nop + push cs + call near ptr _getenv + pop cx + pop cx + mov word ptr [bp+src+2], dx + mov word ptr [bp+src], ax + or ax, dx + jnz short loc_A0A8 + +loc_A09F: ; CODE XREF: sub_9F6A+117j + mov word_1230E, 2 + jmp loc_A16E +; --------------------------------------------------------------------------- + +loc_A0A8: ; CODE XREF: sub_9F6A+11Dj + ; sub_9F6A+133j + cmp [bp+var_1A], 0 + jz short loc_A0C1 + push word ptr [bp+src+2] + push word ptr [bp+src] + push ds + mov ax, 1139h + push ax + push [bp+arg_8] + push [bp+arg_6] + jmp short loc_A0D5 +; --------------------------------------------------------------------------- + +loc_A0C1: ; CODE XREF: sub_9F6A+142j + push ss ; int + lea ax, [bp+pathname] + push ax ; int + xor ax, ax + push ax + push ax ; s + mov ax, [bp+arg_6] + add ax, 4 + push [bp+arg_8] ; int + push ax ; int + +loc_A0D5: ; CODE XREF: sub_9F6A+155j + call __DOSCMD + mov [bp+var_6], dx + mov [bp+var_8], ax + mov ax, [bp+var_8] + or ax, [bp+var_6] + jnz short loc_A0EF + mov word_1230E, 8 + jmp loc_A16E +; --------------------------------------------------------------------------- + +loc_A0EF: ; CODE XREF: sub_9F6A+17Aj + mov ax, [bp+var_8] + inc ax + push [bp+var_6] + push ax ; s + nop + push cs + call near ptr _strlen + pop cx + pop cx + cmp ax, 80h ; '' + jb short loc_A118 + mov word_1230E, 14h + push [bp+var_6] + push [bp+var_8] + nop + push cs + call near ptr sub_318E + pop cx + pop cx + jmp short loc_A16E +; --------------------------------------------------------------------------- + +loc_A118: ; CODE XREF: sub_9F6A+197j + mov ax, [bp+arg_A] + or ax, [bp+arg_C] + jnz short loc_A12D + mov dx, word ptr dword_13232+2 + mov ax, word ptr dword_13232 + mov [bp+arg_C], dx + mov [bp+arg_A], ax + +loc_A12D: ; CODE XREF: sub_9F6A+1B4j + push [bp+arg_C] ; int + push [bp+arg_A] ; int + cmp [bp+var_1A], 0 + jz short loc_A141 + mov dx, word ptr [bp+src+2] + mov ax, word ptr [bp+src] + jmp short loc_A147 +; --------------------------------------------------------------------------- + +loc_A141: ; CODE XREF: sub_9F6A+1CDj + mov dx, ss + lea ax, [bp+pathname] + +loc_A147: ; CODE XREF: sub_9F6A+1D5j + push dx + push ax ; src + push ss + lea ax, [bp+var_14] + push ax ; __int32 + call __DOSENV + mov [bp+var_A], dx + mov [bp+var_C], ax + or ax, dx + jnz short loc_A173 + mov word_1230E, 8 + push [bp+var_6] + push [bp+var_8] + nop + push cs + call near ptr sub_318E + pop cx + pop cx + +loc_A16E: ; CODE XREF: sub_9F6A+13Bj + ; sub_9F6A+182j ... + mov ax, 0FFFFh + jmp short loc_A1BE +; --------------------------------------------------------------------------- + +loc_A173: ; CODE XREF: sub_9F6A+1EFj + call off_12C7E + push [bp+var_A] + push [bp+var_C] + push [bp+var_6] + push [bp+var_8] + cmp [bp+var_1A], 0 + jz short loc_A191 + mov dx, word ptr [bp+src+2] + mov ax, word ptr [bp+src] + jmp short loc_A197 +; --------------------------------------------------------------------------- + +loc_A191: ; CODE XREF: sub_9F6A+21Dj + mov dx, ss + lea ax, [bp+pathname] + +loc_A197: ; CODE XREF: sub_9F6A+225j + push dx + push ax + ; Hack + db 0ffh + db 056h + db 004h + add sp, 0Ch + mov [bp+var_16], ax + push word ptr [bp+var_14+2] + push word ptr [bp+var_14] + nop + push cs + call near ptr sub_318E + push [bp+var_6] + push [bp+var_8] + nop + push cs + call near ptr sub_318E + add sp, 8 + mov ax, [bp+var_16] + +loc_A1BE: ; CODE XREF: sub_9F6A+207j + pop di + pop si + mov sp, bp + pop bp + retn +sub_9F6A endp + +seg000 ends + +; --------------------------------------------------------------------------- +; =========================================================================== + +; Segment type: Pure code +seg001 segment byte public 'CODE' use16 + assume cs:seg001 + ;org 4 + assume es:nothing, ss:nothing, ds:dseg, fs:nothing, gs:nothing + enter 2, 0 + push si + push di + xor si, si + jmp short loc_A1E5 +; --------------------------------------------------------------------------- + +loc_A1CE: ; CODE XREF: seg001:0028j + push 190h + call sub_2621 + pop cx + mov bx, si + shl bx, 2 + mov [bx+118Eh], dx + mov [bx+118Ch], ax + inc si + +loc_A1E5: ; CODE XREF: seg001:000Cj + cmp si, 50h ; 'P' + jl short loc_A1CE + push 4 + call sub_B9C0 + push 1 + call sub_B943 + add sp, 4 + xor si, si + jmp short loc_A22A +; --------------------------------------------------------------------------- + +loc_A1FF: ; CODE XREF: seg001:006Dj + xor di, di + mov [bp-2], si + jmp short loc_A223 +; --------------------------------------------------------------------------- + +loc_A206: ; CODE XREF: seg001:0067j + les bx, dword_13672 + add bx, [bp-2] + mov al, es:[bx] + mov bx, si + shl bx, 2 + les bx, [bx+118Ch] + add bx, di + mov es:[bx], al + inc di + add word ptr [bp-2], 50h ; 'P' + +loc_A223: ; CODE XREF: seg001:0044j + cmp di, 190h + jl short loc_A206 + inc si + +loc_A22A: ; CODE XREF: seg001:003Dj + cmp si, 50h ; 'P' + jl short loc_A1FF + call sub_BA0A + push 0 + call sub_B943 + pop cx + pop di + pop si + leave + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A240 proc far ; CODE XREF: _main+E6p + +_ptr = byte ptr -12h +var_B = byte ptr -0Bh +var_A = byte ptr -0Ah +var_9 = byte ptr -9 +var_8 = byte ptr -8 +stream = dword ptr -6 +var_1 = byte ptr -1 + + enter 12h, 0 + mov [bp+var_1], 0 + push ds + push offset mode ; "rb" + push ds + push offset path ; "reiiden.cfg" + call _fopen + add sp, 8 + mov word ptr [bp+stream+2], dx + mov word ptr [bp+stream], ax + or ax, dx + jnz short loc_A266 + +loc_A262: ; CODE XREF: sub_A240+66j + mov [bp+var_1], 1 + +loc_A266: ; CODE XREF: sub_A240+20j + cmp [bp+var_1], 0 + jnz short loc_A2CE + push large [bp+stream] ; stream + push large 0B0001h ; size + push ss + lea ax, [bp+_ptr] + push ax ; ptr + call _fread + add sp, 0Ch + push 7 ; n + push ds + push offset s ; "REIIDEN" + push ss + lea ax, [bp+_ptr] + push ax ; s1 + call _memcmp + add sp, 0Ah + or ax, ax + jz short loc_A2A8 + push large [bp+stream] ; stream + call _fclose + add sp, 4 + jmp short loc_A262 +; --------------------------------------------------------------------------- + +loc_A2A8: ; CODE XREF: sub_A240+58j + mov al, [bp+var_B] + mov byte ptr word_12320, al + mov al, [bp+var_A] + mov byte ptr word_12320+1, al + mov al, [bp+var_9] + mov byte ptr word_12322, al + mov al, [bp+var_8] + mov byte ptr word_12322+1, al + push large [bp+stream] ; stream + call _fclose + add sp, 4 + leave + retf +; --------------------------------------------------------------------------- + +loc_A2CE: ; CODE XREF: sub_A240+2Aj + mov byte ptr word_12320, 1 + mov byte ptr word_12320+1, 1 + mov byte ptr word_12322, 1 + mov byte ptr word_12322+1, 2 + leave + retf +sub_A240 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A2E4 proc far ; CODE XREF: sub_A7B5+5p sub_A8AD+4p ... + +stream = dword ptr -6 +var_1 = byte ptr -1 + + enter 6, 0 + mov [bp+var_1], 0 + push ds + push offset aWb ; "wb" + push ds + push offset path ; "reiiden.cfg" + call _fopen + add sp, 8 + mov word ptr [bp+stream+2], dx + mov word ptr [bp+stream], ax + or ax, dx + jnz short loc_A30A + mov [bp+var_1], 1 + +loc_A30A: ; CODE XREF: sub_A2E4+20j + cmp [bp+var_1], 0 + jnz short locret_A361 + push large [bp+stream] ; stream + push ds + push offset s ; "REIIDEN" + call _fputs + push large [bp+stream] ; stream + mov al, byte ptr word_12320 + cbw + push ax ; c + call _fputc + push large [bp+stream] ; stream + mov al, byte ptr word_12320+1 + cbw + push ax ; c + call _fputc + push large [bp+stream] ; stream + mov al, byte ptr word_12322 + cbw + push ax ; c + call _fputc + push large [bp+stream] ; stream + mov al, byte ptr word_12322+1 + cbw + push ax ; c + call _fputc + push large [bp+stream] ; stream + call _fclose + add sp, 24h + +locret_A361: ; CODE XREF: sub_A2E4+2Aj + leave + retf +sub_A2E4 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A363 proc far ; CODE XREF: _main+15Ap + +var_30 = byte ptr -30h +var_2F = byte ptr -2Fh +outregs = REGS ptr -20h +inregs = REGS ptr -10h + + enter 30h, 0 + mov byte ptr [bp+inregs+1], 4 + mov byte ptr [bp+inregs], 7 + push ss + lea ax, [bp+outregs] + push ax ; outregs + push ss + lea ax, [bp+inregs] + push ax ; inregs + push 18h ; intno + call _int86 + mov byte ptr [bp+inregs+1], 4 + mov byte ptr [bp+inregs], 8 + push ss + lea ax, [bp+var_30] + push ax ; outregs + push ss + lea ax, [bp+inregs] + push ax ; inregs + push 18h ; intno + call _int86 + add sp, 14h + test byte ptr [bp+outregs+1], 4 + jnz short loc_A3A8 + test [bp+var_2F], 8 + jz short loc_A3C9 + +loc_A3A8: ; CODE XREF: sub_A363+3Dj + cmp word_12334, 0 + jnz short loc_A3CF + mov al, byte_12325 + dec al + mov byte_12325, al + cbw + or ax, ax + jge short loc_A3C1 + mov byte_12325, 3 + +loc_A3C1: ; CODE XREF: sub_A363+57j + mov word_12334, 1 + jmp short loc_A3CF +; --------------------------------------------------------------------------- + +loc_A3C9: ; CODE XREF: sub_A363+43j + mov word_12334, 0 + +loc_A3CF: ; CODE XREF: sub_A363+4Aj sub_A363+64j + mov byte ptr [bp+inregs+1], 4 + mov byte ptr [bp+inregs], 9 + push ss + lea ax, [bp+var_30] + push ax ; outregs + push ss + lea ax, [bp+inregs] + push ax ; inregs + push 18h ; intno + call _int86 + add sp, 0Ah + test byte ptr [bp+outregs+1], 20h + jnz short loc_A3F7 + test [bp+var_2F], 8 + jz short loc_A419 + +loc_A3F7: ; CODE XREF: sub_A363+8Cj + cmp word_12336, 0 + jnz short loc_A41F + mov al, byte_12325 + inc al + mov byte_12325, al + cbw + cmp ax, 3 + jle short loc_A411 + mov byte_12325, 0 + +loc_A411: ; CODE XREF: sub_A363+A7j + mov word_12336, 1 + jmp short loc_A41F +; --------------------------------------------------------------------------- + +loc_A419: ; CODE XREF: sub_A363+92j + mov word_12336, 0 + +loc_A41F: ; CODE XREF: sub_A363+99j sub_A363+B4j + mov byte ptr [bp+inregs+1], 4 + mov byte ptr [bp+inregs], 3 + push ss + lea ax, [bp+outregs] + push ax ; outregs + push ss + lea ax, [bp+inregs] + push ax ; inregs + push 18h ; intno + call _int86 + add sp, 0Ah + test byte ptr [bp+outregs+1], 10h + jz short loc_A448 + mov byte_12327, 1 + jmp short loc_A44D +; --------------------------------------------------------------------------- + +loc_A448: ; CODE XREF: sub_A363+DCj + mov byte_12327, 0 + +loc_A44D: ; CODE XREF: sub_A363+E3j + mov byte ptr [bp+inregs+1], 4 + mov byte ptr [bp+inregs], 5 + push ss + lea ax, [bp+outregs] + push ax ; outregs + push ss + lea ax, [bp+inregs] + push ax ; inregs + push 18h ; intno + call _int86 + add sp, 0Ah + test byte ptr [bp+outregs+1], 2 + jz short loc_A476 + mov byte_12328, 1 + jmp short loc_A47B +; --------------------------------------------------------------------------- + +loc_A476: ; CODE XREF: sub_A363+10Aj + mov byte_12328, 0 + +loc_A47B: ; CODE XREF: sub_A363+111j + mov byte ptr [bp+inregs+1], 4 + mov byte ptr [bp+inregs], 0 + push ss + lea ax, [bp+outregs] + push ax ; outregs + push ss + lea ax, [bp+inregs] + push ax ; inregs + push 18h ; intno + call _int86 + add sp, 0Ah + test byte ptr [bp+outregs+1], 1 + jz short loc_A4A4 + mov byte_12329, 1 + leave + retf +; --------------------------------------------------------------------------- + +loc_A4A4: ; CODE XREF: sub_A363+138j + mov byte_12329, 0 + leave + retf +sub_A363 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A4AB proc far ; CODE XREF: _main+16Ep _main+181p + +var_30 = byte ptr -30h +var_2F = byte ptr -2Fh +outregs = REGS ptr -20h +inregs = REGS ptr -10h + + enter 30h, 0 + mov byte ptr [bp+inregs+1], 4 + mov byte ptr [bp+inregs], 7 + push ss + lea ax, [bp+outregs] + push ax ; outregs + push ss + lea ax, [bp+inregs] + push ax ; inregs + push 18h ; intno + call _int86 + mov byte ptr [bp+inregs+1], 4 + mov byte ptr [bp+inregs], 8 + push ss + lea ax, [bp+var_30] + push ax ; outregs + push ss + lea ax, [bp+inregs] + push ax ; inregs + push 18h ; intno + call _int86 + add sp, 14h + test byte ptr [bp+outregs+1], 4 + jnz short loc_A4F0 + test [bp+var_2F], 8 + jz short loc_A512 + +loc_A4F0: ; CODE XREF: sub_A4AB+3Dj + cmp word_12339, 0 + jnz short loc_A518 + mov al, byte_12325 + dec al + mov byte_12325, al + cbw + or ax, ax + jge short loc_A50A + mov al, byte_12338 + mov byte_12325, al + +loc_A50A: ; CODE XREF: sub_A4AB+57j + mov word_12339, 1 + jmp short loc_A518 +; --------------------------------------------------------------------------- + +loc_A512: ; CODE XREF: sub_A4AB+43j + mov word_12339, 0 + +loc_A518: ; CODE XREF: sub_A4AB+4Aj sub_A4AB+65j + test byte ptr [bp+outregs+1], 8 + jnz short loc_A524 + test [bp+var_2F], 40h + jz short loc_A52B + +loc_A524: ; CODE XREF: sub_A4AB+71j + mov byte_12326, 1 + jmp short loc_A530 +; --------------------------------------------------------------------------- + +loc_A52B: ; CODE XREF: sub_A4AB+77j + mov byte_12326, 0 + +loc_A530: ; CODE XREF: sub_A4AB+7Ej + mov byte ptr [bp+inregs+1], 4 + mov byte ptr [bp+inregs], 9 + push ss + lea ax, [bp+var_30] + push ax ; outregs + push ss + lea ax, [bp+inregs] + push ax ; inregs + push 18h ; intno + call _int86 + add sp, 0Ah + test byte ptr [bp+outregs+1], 20h + jnz short loc_A558 + test [bp+var_2F], 8 + jz short loc_A57F + +loc_A558: ; CODE XREF: sub_A4AB+A5j + cmp word_1233B, 0 + jnz short loc_A585 + mov al, byte_12325 + inc al + mov byte_12325, al + cbw + mov dl, byte_12338 + mov dh, 0 + cmp ax, dx + jle short loc_A577 + mov byte_12325, 0 + +loc_A577: ; CODE XREF: sub_A4AB+C5j + mov word_1233B, 1 + jmp short loc_A585 +; --------------------------------------------------------------------------- + +loc_A57F: ; CODE XREF: sub_A4AB+ABj + mov word_1233B, 0 + +loc_A585: ; CODE XREF: sub_A4AB+B2j sub_A4AB+D2j + test byte ptr [bp+outregs+1], 10h + jnz short loc_A591 + test [bp+var_2F], 1 + jz short loc_A598 + +loc_A591: ; CODE XREF: sub_A4AB+DEj + mov byte_1232B, 1 + jmp short loc_A59D +; --------------------------------------------------------------------------- + +loc_A598: ; CODE XREF: sub_A4AB+E4j + mov byte_1232B, 0 + +loc_A59D: ; CODE XREF: sub_A4AB+EBj + mov byte ptr [bp+inregs+1], 4 + mov byte ptr [bp+inregs], 3 + push ss + lea ax, [bp+outregs] + push ax ; outregs + push ss + lea ax, [bp+inregs] + push ax ; inregs + push 18h ; intno + call _int86 + add sp, 0Ah + test byte ptr [bp+outregs+1], 10h + jz short loc_A5C6 + mov byte_12327, 1 + jmp short loc_A5CB +; --------------------------------------------------------------------------- + +loc_A5C6: ; CODE XREF: sub_A4AB+112j + mov byte_12327, 0 + +loc_A5CB: ; CODE XREF: sub_A4AB+119j + mov byte ptr [bp+inregs+1], 4 + mov byte ptr [bp+inregs], 5 + push ss + lea ax, [bp+outregs] + push ax ; outregs + push ss + lea ax, [bp+inregs] + push ax ; inregs + push 18h ; intno + call _int86 + add sp, 0Ah + test byte ptr [bp+outregs+1], 2 + jz short loc_A5F4 + mov byte_12328, 1 + jmp short loc_A5F9 +; --------------------------------------------------------------------------- + +loc_A5F4: ; CODE XREF: sub_A4AB+140j + mov byte_12328, 0 + +loc_A5F9: ; CODE XREF: sub_A4AB+147j + mov byte ptr [bp+inregs+1], 4 + mov byte ptr [bp+inregs], 0 + push ss + lea ax, [bp+outregs] + push ax ; outregs + push ss + lea ax, [bp+inregs] + push ax ; inregs + push 18h ; intno + call _int86 + add sp, 0Ah + test byte ptr [bp+outregs+1], 1 + jz short loc_A622 + mov byte_12329, 1 + leave + retf +; --------------------------------------------------------------------------- + +loc_A622: ; CODE XREF: sub_A4AB+16Ej + mov byte_12329, 0 + leave + retf +sub_A4AB endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A629 proc far ; CODE XREF: sub_A66A+79p sub_A66A+7Fp + +arg_0 = word ptr 6 + + push bp + mov bp, sp + push si + push di + mov ax, [bp+arg_0] + shl ax, 6 + mov dx, [bp+arg_0] + shl dx, 4 + add ax, dx + mov si, ax + push 0Fh + call sub_B976 + pop cx + xor di, di + jmp short loc_A65C +; --------------------------------------------------------------------------- + +loc_A64A: ; CODE XREF: sub_A629+36j + les bx, dword_13672 + add bx, si + mov dword ptr es:[bx], 0FFFFFFFFh + inc di + add si, 4 + +loc_A65C: ; CODE XREF: sub_A629+1Fj + cmp di, 14h + jl short loc_A64A + call sub_BA0A + pop di + pop si + pop bp + retf +sub_A629 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A66A proc far ; CODE XREF: sub_A719+54p + +var_192 = byte ptr -192h +var_2 = word ptr -2 + + enter 192h, 0 + push si + push di + mov [bp+var_2], 0 + xor si, si + xor di, di + lea ax, [bp+var_192] + push ss + push ax + push ds + push offset unk_1233D + mov cx, 190h + call SCOPY@ + jmp short loc_A6F5 +; --------------------------------------------------------------------------- + +loc_A68D: ; CODE XREF: sub_A66A+94j + push large 10280h + push si + push 0 + call sub_D338 + add sp, 8 + push large 10280h + push di + push 0 + call sub_D338 + add sp, 8 + +loc_A6AF: ; CODE XREF: sub_A66A+57j + call sub_1338 + mov bx, 190h + cwd + idiv bx + mov si, dx + cmp [bp+si+var_192], 0 + jnz short loc_A6AF + mov [bp+si+var_192], 1 + +loc_A6C8: ; CODE XREF: sub_A66A+70j + call sub_1338 + mov bx, 190h + cwd + idiv bx + mov di, dx + cmp [bp+di+var_192], 0 + jnz short loc_A6C8 + mov [bp+di+var_192], 1 + push si + push cs + call near ptr sub_A629 + pop cx + push di + push cs + call near ptr sub_A629 + pop cx + push 1 + call sub_B269 + pop cx + +loc_A6F5: ; CODE XREF: sub_A66A+21j + mov ax, [bp+var_2] + inc [bp+var_2] + cmp ax, 64h ; 'd' + jb short loc_A68D + push 1 + call sub_B943 + pop cx + call sub_BB85 + push 0 + call sub_B943 + pop cx + pop di + pop si + leave + retf +sub_A66A endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A719 proc far ; CODE XREF: _main+10Dp + push bp + mov bp, sp + push ds + push offset aReimu_mdt ; "reimu.mdt" + call sub_E4D9 + add sp, 4 + call sub_E4F9 + push 1 + call sub_B943 + pop cx + push ds + push offset aReiiden2_grp ; "REIIDEN2.grp" + call sub_DAEC + add sp, 4 + call sub_BC6D + call sub_BB85 + push ds + push offset aReiiden3_grp ; "REIIDEN3.grp" + call sub_DB6F + add sp, 4 + push 0 + call sub_B943 + pop cx + call sub_BC8B + push 64h ; 'd' + call sub_B269 + pop cx + push cs + call near ptr sub_A66A + pop bp + retf +sub_A719 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A772 proc far ; CODE XREF: _main+144p + push bp + mov bp, sp + push 1 + call sub_B943 + pop cx + call sub_BB85 + push 0 + call sub_B943 + pop cx + push ds + push offset aOp_win_grp ; "op_win.grp" + call sub_DBAF + add sp, 4 + call sub_BB85 + pop bp + retf +sub_A772 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A79D proc far ; CODE XREF: sub_A7B5+26p sub_A8AD+35p ... + push bp + mov bp, sp + mov al, byte_1232F + cbw + cmp ax, 1 + jnz short loc_A7AE + call sub_E3C5 + +loc_A7AE: ; CODE XREF: sub_A79D+Aj + call sub_1204 + pop bp + retf +sub_A79D endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A7B5 proc far ; CODE XREF: sub_AB97+BAp + push bp + mov bp, sp + push si + push cs + call near ptr sub_A2E4 + push large [dword_13418] + push word_12322+1 + push word_12322 + push word_12320+1 + push word_12320 + call sub_E27C + add sp, 0Ch + push cs + call near ptr sub_A79D + call sub_E519 + call sub_B757 + mov al, byte_12324 + cbw + cmp ax, 2 + jnz short loc_A7FC + les bx, dword_13EE6 + mov byte ptr es:[bx+18h], 1 + jmp short loc_A820 +; --------------------------------------------------------------------------- + +loc_A7FC: ; CODE XREF: sub_A7B5+3Aj + mov al, byte_12324 + cbw + cmp ax, 3 + jnz short loc_A810 + les bx, dword_13EE6 + mov byte ptr es:[bx+18h], 3 + jmp short loc_A820 +; --------------------------------------------------------------------------- + +loc_A810: ; CODE XREF: sub_A7B5+4Ej + cmp byte_12324, 0 + jnz short loc_A820 + les bx, dword_13EE6 + mov byte ptr es:[bx+18h], 0 + +loc_A820: ; CODE XREF: sub_A7B5+45j sub_A7B5+59j ... + les bx, dword_13EE6 + mov byte ptr es:[bx+14h], 0 + mov word ptr es:[bx+3Fh], 0 + mov al, byte ptr word_12322+1 + add al, 2 + mov es:[bx+15h], al + mov word ptr es:[bx+49h], 0 + xor si, si + jmp short loc_A867 +; --------------------------------------------------------------------------- + +loc_A842: ; CODE XREF: sub_A7B5+B5j + mov ax, si + add ax, ax + les bx, dword_13EE6 + add bx, ax + mov word ptr es:[bx+27h], 0 + mov ax, si + shl ax, 2 + mov bx, word ptr dword_13EE6 + add bx, ax + mov dword ptr es:[bx+2Fh], 0 + inc si + +loc_A867: ; CODE XREF: sub_A7B5+8Bj + cmp si, 4 + jl short loc_A842 + les bx, dword_13EE6 + mov dword ptr es:[bx+45h], 0 + mov dword ptr es:[bx+23h], 0 + mov byte ptr es:[bx+12h], 0 + mov byte ptr es:[bx+13h], 0 + mov byte ptr es:[bx+16h], 1 + mov word ptr es:[bx+19h], 0FFFCh + push large 0 + push ds + push offset aReiiden_0 ; "reiiden" + push ds + push offset aReiiden_0 ; "reiiden" + call _execl + add sp, 0Ch + pop si + pop bp + retf +sub_A7B5 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A8AD proc far ; CODE XREF: sub_AB97+C0p + push bp + mov bp, sp + push cs + call near ptr sub_A2E4 + push large [dword_13418] + push word_12322+1 + push word_12322 + push word_12320+1 + push word_12320 + call sub_E27C + add sp, 0Ch + les bx, dword_13EE6 + cmp word ptr es:[bx+3Fh], 0 + jnz short loc_A8E1 + mov ax, seg seg001 + mov es, ax + assume es:seg001 + +loc_A8E1: ; CODE XREF: sub_A8AD+2Dj + push cs + call near ptr sub_A79D + call sub_E519 + call sub_B757 + les bx, dword_13EE6 + assume es:nothing + mov byte ptr es:[bx+18h], 0 + mov byte ptr es:[bx+16h], 1 + mov al, byte ptr word_12322+1 + add al, 2 + mov es:[bx+15h], al + mov byte ptr es:[bx+13h], 0 + mov word ptr es:[bx+19h], 0FFFCh + mov word ptr es:[bx+49h], 0 + push large 0 + push ds + push offset s ; "REIIDEN" + push ds + push offset s ; "REIIDEN" + call _execl + add sp, 0Ch + pop bp + retf +sub_A8AD endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A92C proc far ; CODE XREF: _main+135p + +arg_0 = word ptr 6 + + push bp + mov bp, sp + mov ax, [bp+arg_0] + mov bx, 46h ; 'F' + cwd + idiv bx + cmp dx, 32h ; '2' + jge short loc_A954 + push ds + push offset aVgvhvsb@vjvdvx ; " ghs@jdx" + push large 2F0132h + push 0F4h ; '' + call sub_C948 + add sp, 0Ah + pop bp + retf +; --------------------------------------------------------------------------- + +loc_A954: ; CODE XREF: sub_A92C+Fj + push large 100080h + push large 13200F4h + call sub_D338 + add sp, 8 + pop bp + retf +sub_A92C endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A96A proc far ; CODE XREF: sub_AB97+25p sub_AB97+32p ... + +var_14 = byte ptr -14h +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + enter 14h, 0 + push si + mov si, [bp+arg_0] + lea ax, [bp+var_14] + push ss + push ax + push ds + push offset off_124CD + mov cx, 10h + call SCOPY@ + mov [bp+var_2], 0F4h ; '' + mov ax, si + imul ax, 14h + add ax, 114h + mov [bp+var_4], ax + mov bx, si + shl bx, 2 + lea ax, [bp+var_14] + add bx, ax + push large dword ptr ss:[bx] + mov ax, [bp+arg_2] + or ax, 30h + push ax + push [bp+var_4] + push [bp+var_2] + call sub_C948 + add sp, 0Ah + pop si + leave + retf +sub_A96A endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A9B9 proc far ; CODE XREF: sub_AC84+3Bp sub_AC84+48p ... + +var_42 = byte ptr -42h +var_2E = byte ptr -2Eh +var_1E = byte ptr -1Eh +var_A = word ptr -0Ah +var_8 = byte ptr -8 +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + enter 42h, 0 + push si + push di + mov si, [bp+arg_0] + lea ax, [bp+var_1E] + push ss + push ax + push ds + push offset off_124DD + mov cx, 14h + call SCOPY@ + lea ax, [bp+var_2E] + push ss + push ax + push ds + push offset off_124F1 + mov cx, 10h + call SCOPY@ + lea ax, [bp+var_8] + push ss + push ax + push ds + push offset off_12501 + mov cx, 8 + call SCOPY@ + lea ax, [bp+var_42] + push ss + push ax + push ds + push offset off_12509 + mov cx, 14h + call SCOPY@ + mov di, 0E4h ; '' + mov ax, si + imul ax, 14h + add ax, 10Ah + mov [bp+var_A], ax + push large 1000B0h + push ax + push di + call sub_D338 + add sp, 8 + or si, si + jnz short loc_AA34 + mov al, byte ptr word_12320 + cbw + shl ax, 2 + lea dx, [bp+var_2E] + jmp short loc_AA54 +; --------------------------------------------------------------------------- + +loc_AA34: ; CODE XREF: sub_A9B9+6Dj + cmp si, 1 + jnz short loc_AA45 + mov al, byte ptr word_12320+1 + cbw + shl ax, 2 + lea dx, [bp+var_8] + jmp short loc_AA54 +; --------------------------------------------------------------------------- + +loc_AA45: ; CODE XREF: sub_A9B9+7Ej + cmp si, 2 + jnz short loc_AA83 + mov al, byte ptr word_12322+1 + cbw + shl ax, 2 + lea dx, [bp+var_42] + +loc_AA54: ; CODE XREF: sub_A9B9+79j sub_A9B9+8Aj + add ax, dx + mov bx, ax + push large dword ptr ss:[bx] + mov bx, si + shl bx, 2 + lea ax, [bp+var_1E] + add bx, ax + push large dword ptr ss:[bx] ; arglist + push ds + push offset aSS ; "%s%s" + mov ax, [bp+arg_2] + or ax, 30h + push ax ; int + push [bp+var_A] ; int + push di ; int + call sub_D5F8 + add sp, 12h + jmp short loc_AAB2 +; --------------------------------------------------------------------------- + +loc_AA83: ; CODE XREF: sub_A9B9+8Fj + cmp si, 3 + jz short loc_AA8D + cmp si, 4 + jnz short loc_AAB2 + +loc_AA8D: ; CODE XREF: sub_A9B9+CDj + mov bx, si + shl bx, 2 + lea ax, [bp+var_1E] + add bx, ax + push large dword ptr ss:[bx] ; arglist + push ds + push (offset aSS+2) ; format + mov ax, [bp+arg_2] + or ax, 30h + push ax ; int + push [bp+var_A] ; int + push di ; int + call sub_D5F8 + add sp, 0Eh + +loc_AAB2: ; CODE XREF: sub_A9B9+C8j sub_A9B9+D2j + pop di + pop si + leave + retf +sub_A9B9 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_AAB6 proc far ; CODE XREF: sub_AEA8+45p sub_AEA8+52p ... + +var_46 = byte ptr -46h +var_A = word ptr -0Ah +var_8 = byte ptr -8 +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + enter 46h, 0 + push si + push di + mov si, [bp+arg_0] + lea ax, [bp+var_8] + push ss + push ax + push ds + push offset off_1251E + mov cx, 8 + call SCOPY@ + lea ax, [bp+var_46] + push ss + push ax + push ds + push offset off_12526 + mov cx, 3Ch ; '<' + call SCOPY@ + mov di, 0E4h ; '' + mov ax, si + imul ax, 28h + add ax, 11Eh + mov [bp+var_A], ax + push large 1000B0h + push ax + push di + call sub_D338 + add sp, 8 + or si, si + jnz short loc_AB69 + push large 1000C0h + mov ax, [bp+var_A] + add ax, 14h + push ax + push di + call sub_D338 + add sp, 8 + mov al, byte_1251D + cbw + push ax + mov bx, si + shl bx, 2 + lea ax, [bp+var_8] + add bx, ax + push large dword ptr ss:[bx] ; arglist + push ds + push offset aS_2d ; "%s%.2d" + mov ax, [bp+arg_2] + or ax, 30h + push ax ; int + push [bp+var_A] ; int + push di ; int + call sub_D5F8 + add sp, 10h + mov al, byte_1251D + cbw + shl ax, 2 + lea dx, [bp+var_46] + add ax, dx + mov bx, ax + push large dword ptr ss:[bx] + push ds + push (offset aSS+2) + mov ax, [bp+arg_2] + or ax, 30h + push ax + mov ax, [bp+var_A] + add ax, 14h + push ax + jmp short loc_AB8A +; --------------------------------------------------------------------------- + +loc_AB69: ; CODE XREF: sub_AAB6+4Bj + cmp si, 1 + jnz short loc_AB93 + mov bx, si + shl bx, 2 + lea ax, [bp+var_8] + add bx, ax + push large dword ptr ss:[bx] ; arglist + push ds + push (offset aSS+2) ; format + mov ax, [bp+arg_2] + or ax, 30h + push ax ; int + push [bp+var_A] ; int + +loc_AB8A: ; CODE XREF: sub_AAB6+B1j + push di ; int + call sub_D5F8 + add sp, 0Eh + +loc_AB93: ; CODE XREF: sub_AAB6+B6j + pop di + pop si + leave + retf +sub_AAB6 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_AB97 proc far ; CODE XREF: _main+15Ep + push bp + mov bp, sp + cmp word_12564, 0 + jnz short loc_AC04 + push large 6400B0h + push large 10A00DCh + call sub_D338 + add sp, 8 + push large 50000h + push cs + call near ptr sub_A96A + add sp, 4 + push large 50001h + push cs + call near ptr sub_A96A + add sp, 4 + push large 50002h + push cs + call near ptr sub_A96A + add sp, 4 + push large 50003h + push cs + call near ptr sub_A96A + add sp, 4 + push 0Fh + mov al, byte_12325 + cbw + push ax + push cs + call near ptr sub_A96A + add sp, 4 + mov word_12564, 1 + mov al, byte_12325 + cbw + mov word_12562, ax + +loc_AC04: ; CODE XREF: sub_AB97+8j + mov al, byte_12325 + cbw + cmp ax, word_12562 + jz short loc_AC30 + push 5 + push word_12562 + push cs + call near ptr sub_A96A + add sp, 4 + push 0Fh + mov al, byte_12325 + cbw + push ax + push cs + call near ptr sub_A96A + add sp, 4 + mov al, byte_12325 + cbw + mov word_12562, ax + +loc_AC30: ; CODE XREF: sub_AB97+75j + cmp byte_12327, 0 + jnz short loc_AC3E + cmp byte_12328, 0 + jz short loc_AC6E + +loc_AC3E: ; CODE XREF: sub_AB97+9Ej + mov al, byte_12325 + cbw + mov bx, ax + cmp bx, 3 + ja short loc_AC6E + add bx, bx + jmp cs:off_AC7C[bx] + +loc_AC50: ; DATA XREF: seg001:off_AC7Co + push cs + call near ptr sub_A7B5 + jmp short loc_AC6E +; --------------------------------------------------------------------------- + +loc_AC56: ; CODE XREF: sub_AB97+B4j + ; DATA XREF: seg001:0ABEo + push cs + call near ptr sub_A8AD + jmp short loc_AC6E +; --------------------------------------------------------------------------- + +loc_AC5C: ; CODE XREF: sub_AB97+B4j + ; DATA XREF: seg001:0AC0o + mov byte_1232A, 1 + mov word_12564, 0 + jmp short loc_AC6E +; --------------------------------------------------------------------------- + +loc_AC69: ; CODE XREF: sub_AB97+B4j + ; DATA XREF: seg001:0AC2o + mov byte_1232C, 1 + +loc_AC6E: ; CODE XREF: sub_AB97+A5j sub_AB97+B0j ... + cmp byte_12329, 0 + jz short loc_AC7A + mov byte_1232C, 1 + +loc_AC7A: ; CODE XREF: sub_AB97+DCj + pop bp + retf +sub_AB97 endp + +; --------------------------------------------------------------------------- +off_AC7C dw offset loc_AC50 ; DATA XREF: sub_AB97+B4r + dw offset loc_AC56 + dw offset loc_AC5C + dw offset loc_AC69 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_AC84 proc far ; CODE XREF: _main+172p + push bp + mov bp, sp + cmp word_12566, 0 + jnz short loc_ACF9 + mov byte_12325, 0 + mov word_12568, 0 + mov word_12566, 1 + mov byte_12338, 4 + push large 5000B0h + push large 11400DCh + call sub_D338 + add sp, 8 + push large 0F0000h + push cs + call near ptr sub_A9B9 + add sp, 4 + push large 50001h + push cs + call near ptr sub_A9B9 + add sp, 4 + push large 50002h + push cs + call near ptr sub_A9B9 + add sp, 4 + push large 50003h + push cs + call near ptr sub_A9B9 + add sp, 4 + push large 50004h + push cs + call near ptr sub_A9B9 + add sp, 4 + +loc_ACF9: ; CODE XREF: sub_AC84+8j + mov al, byte_12325 + cbw + cmp ax, word_12568 + jz short loc_AD25 + push 5 + push word_12568 + push cs + call near ptr sub_A9B9 + add sp, 4 + push 0Fh + mov al, byte_12325 + cbw + push ax + push cs + call near ptr sub_A9B9 + add sp, 4 + mov al, byte_12325 + cbw + mov word_12568, ax + +loc_AD25: ; CODE XREF: sub_AC84+7Dj + mov al, byte_12326 + cbw + cmp ax, 1 + jnz short loc_AD96 + cmp word_1256A, 0 + jnz short loc_AD9C + mov al, byte_12325 + cbw + or ax, ax + jz short loc_AD49 + cmp ax, 1 + jz short loc_AD5C + cmp ax, 2 + jz short loc_AD6F + jmp short loc_AD80 +; --------------------------------------------------------------------------- + +loc_AD49: ; CODE XREF: sub_AC84+B7j + dec byte ptr word_12320 + mov al, byte ptr word_12320 + cbw + or ax, ax + jge short loc_AD80 + mov byte ptr word_12320, 3 + jmp short loc_AD80 +; --------------------------------------------------------------------------- + +loc_AD5C: ; CODE XREF: sub_AC84+BCj + dec byte ptr word_12320+1 + mov al, byte ptr word_12320+1 + cbw + or ax, ax + jge short loc_AD80 + mov byte ptr word_12320+1, 1 + jmp short loc_AD80 +; --------------------------------------------------------------------------- + +loc_AD6F: ; CODE XREF: sub_AC84+C1j + dec byte ptr word_12322+1 + mov al, byte ptr word_12322+1 + cbw + or ax, ax + jge short loc_AD80 + mov byte ptr word_12322+1, 4 + +loc_AD80: ; CODE XREF: sub_AC84+C3j sub_AC84+CFj ... + push 0Fh + mov al, byte_12325 + cbw + push ax + push cs + call near ptr sub_A9B9 + add sp, 4 + mov word_1256A, 1 + jmp short loc_AD9C +; --------------------------------------------------------------------------- + +loc_AD96: ; CODE XREF: sub_AC84+A8j + mov word_1256A, 0 + +loc_AD9C: ; CODE XREF: sub_AC84+AFj + ; sub_AC84+110j + mov al, byte_1232B + cbw + cmp ax, 1 + jnz short loc_AE10 + cmp word_1256C, 0 + jnz short loc_AE16 + mov al, byte_12325 + cbw + or ax, ax + jz short loc_ADC0 + cmp ax, 1 + jz short loc_ADD4 + cmp ax, 2 + jz short loc_ADE8 + jmp short loc_ADFA +; --------------------------------------------------------------------------- + +loc_ADC0: ; CODE XREF: sub_AC84+12Ej + inc byte ptr word_12320 + mov al, byte ptr word_12320 + cbw + cmp ax, 3 + jle short loc_ADFA + mov byte ptr word_12320, 0 + jmp short loc_ADFA +; --------------------------------------------------------------------------- + +loc_ADD4: ; CODE XREF: sub_AC84+133j + inc byte ptr word_12320+1 + mov al, byte ptr word_12320+1 + cbw + cmp ax, 1 + jle short loc_ADFA + mov byte ptr word_12320+1, 0 + jmp short loc_ADFA +; --------------------------------------------------------------------------- + +loc_ADE8: ; CODE XREF: sub_AC84+138j + inc byte ptr word_12322+1 + mov al, byte ptr word_12322+1 + cbw + cmp ax, 4 + jle short loc_ADFA + mov byte ptr word_12322+1, 0 + +loc_ADFA: ; CODE XREF: sub_AC84+13Aj + ; sub_AC84+147j ... + push 0Fh + mov al, byte_12325 + cbw + push ax + push cs + call near ptr sub_A9B9 + add sp, 4 + mov word_1256C, 1 + jmp short loc_AE16 +; --------------------------------------------------------------------------- + +loc_AE10: ; CODE XREF: sub_AC84+11Fj + mov word_1256C, 0 + +loc_AE16: ; CODE XREF: sub_AC84+126j + ; sub_AC84+18Aj + cmp byte_12327, 0 + jnz short loc_AE24 + cmp byte_12328, 0 + jz short loc_AE2D + +loc_AE24: ; CODE XREF: sub_AC84+197j + mov al, byte_12325 + cbw + cmp ax, 4 + jz short loc_AE34 + +loc_AE2D: ; CODE XREF: sub_AC84+19Ej + cmp byte_12329, 0 + jz short loc_AE44 + +loc_AE34: ; CODE XREF: sub_AC84+1A7j + mov byte_1232A, 3 + mov word_12566, 0 + mov byte_12325, 2 + +loc_AE44: ; CODE XREF: sub_AC84+1AEj + cmp byte_12327, 0 + jnz short loc_AE52 + cmp byte_12328, 0 + jz short loc_AE6B + +loc_AE52: ; CODE XREF: sub_AC84+1C5j + mov al, byte_12325 + cbw + cmp ax, 3 + jnz short loc_AE6B + mov byte_1232A, 2 + mov word_12566, 0 + mov byte_12325, 0 + +loc_AE6B: ; CODE XREF: sub_AC84+1CCj + ; sub_AC84+1D5j + pop bp + retf +sub_AC84 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_AE6D proc far ; CODE XREF: sub_AEA8+14Ep + +var_3C = byte ptr -3Ch + + enter 3Ch, 0 + lea ax, [bp+var_3C] + push ss + push ax + push ds + push offset off_1256E + mov cx, 3Ch ; '<' + call SCOPY@ + call sub_E509 + mov al, byte_1251D + cbw + shl ax, 2 + lea dx, [bp+var_3C] + add ax, dx + mov bx, ax + push large dword ptr ss:[bx] ; path + call sub_E4D9 + add sp, 4 + call sub_E4F9 + leave + retf +sub_AE6D endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_AEA8 proc far ; CODE XREF: _main+185p + push bp + mov bp, sp + cmp word_125AA, 0 + jnz short loc_AF00 + mov byte_12325, 0 + mov word_125AC, 0 + mov word_125AA, 1 + mov byte_12327, 0 + mov byte_12328, 0 + mov byte_12338, 1 + push large 6400B0h + push large 10A00DCh + call sub_D338 + add sp, 8 + push large 0F0000h + push cs + call near ptr sub_AAB6 + add sp, 4 + push large 50001h + push cs + call near ptr sub_AAB6 + add sp, 4 + +loc_AF00: ; CODE XREF: sub_AEA8+8j + mov al, byte_12325 + cbw + cmp ax, word_125AC + jz short loc_AF2C + push 5 + push word_125AC + push cs + call near ptr sub_AAB6 + add sp, 4 + push 0Fh + mov al, byte_12325 + cbw + push ax + push cs + call near ptr sub_AAB6 + add sp, 4 + mov al, byte_12325 + cbw + mov word_125AC, ax + +loc_AF2C: ; CODE XREF: sub_AEA8+60j + mov al, byte_12326 + cbw + cmp ax, 1 + jnz short loc_AF69 + cmp word_125AE, 0 + jnz short loc_AF6F + cmp byte_12325, 0 + jnz short loc_AF53 + dec byte_1251D + cmp byte_1251D, 0 + jge short loc_AF53 + mov byte_1251D, 0Eh + +loc_AF53: ; CODE XREF: sub_AEA8+99j sub_AEA8+A4j + push 0Fh + mov al, byte_12325 + cbw + push ax + push cs + call near ptr sub_AAB6 + add sp, 4 + mov word_125AE, 1 + jmp short loc_AF6F +; --------------------------------------------------------------------------- + +loc_AF69: ; CODE XREF: sub_AEA8+8Bj + mov word_125AE, 0 + +loc_AF6F: ; CODE XREF: sub_AEA8+92j sub_AEA8+BFj + mov al, byte_1232B + cbw + cmp ax, 1 + jnz short loc_AFAC + cmp word_125B0, 0 + jnz short loc_AFB2 + cmp byte_12325, 0 + jnz short loc_AF96 + inc byte_1251D + cmp byte_1251D, 0Fh + jl short loc_AF96 + mov byte_1251D, 0 + +loc_AF96: ; CODE XREF: sub_AEA8+DCj sub_AEA8+E7j + push 0Fh + mov al, byte_12325 + cbw + push ax + push cs + call near ptr sub_AAB6 + add sp, 4 + mov word_125B0, 1 + jmp short loc_AFB2 +; --------------------------------------------------------------------------- + +loc_AFAC: ; CODE XREF: sub_AEA8+CEj + mov word_125B0, 0 + +loc_AFB2: ; CODE XREF: sub_AEA8+D5j + ; sub_AEA8+102j + cmp byte_12327, 0 + jnz short loc_AFC0 + cmp byte_12328, 0 + jz short loc_AFC9 + +loc_AFC0: ; CODE XREF: sub_AEA8+10Fj + mov al, byte_12325 + cbw + cmp ax, 1 + jz short loc_AFD0 + +loc_AFC9: ; CODE XREF: sub_AEA8+116j + cmp byte_12329, 0 + jz short loc_AFE0 + +loc_AFD0: ; CODE XREF: sub_AEA8+11Fj + mov byte_1232A, 4 + mov word_125AA, 0 + mov byte_12325, 3 + +loc_AFE0: ; CODE XREF: sub_AEA8+126j + cmp byte_12327, 0 + jnz short loc_AFEE + cmp byte_12328, 0 + jz short loc_AFF9 + +loc_AFEE: ; CODE XREF: sub_AEA8+13Dj + cmp byte_12325, 0 + jnz short loc_AFF9 + push cs + call near ptr sub_AE6D + +loc_AFF9: ; CODE XREF: sub_AEA8+144j + ; sub_AEA8+14Bj + pop bp + retf +sub_AEA8 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +; int __cdecl main(int argc, const char **argv, const char **envp) +_main proc near ; CODE XREF: start+13BP + +outregs = REGS ptr -2Ch +inregs = REGS ptr -1Ch +var_C = word ptr -0Ch +var_9 = byte ptr -9 +var_8 = dword ptr -8 +var_4 = dword ptr -4 +_argc = word ptr 4 +_argv = dword ptr 6 +_envp = dword ptr 0Ah + + enter 2Ch, 0 + push si + push di + xor si, si + xor di, di + call sub_E3E5 + or ax, ax + jnz short loc_B015 + push ds + push offset aGogbgGtg@gcglv ; "ob`t@CNĂ" + jmp loc_B25D +; --------------------------------------------------------------------------- + +loc_B015: ; CODE XREF: _main+11j + mov byte_1232D, 0 + mov dword_12330, 0 + mov byte_1232E, 0 + cmp word ptr [bp+_argv], 1 + jle loc_B0D6 + les bx, [bp+_argv+2] + les bx, es:[bx+4] + mov al, es:[bx] + cbw + cmp ax, 73h ; 's' + jnz short loc_B045 + mov byte_12324, 1 + +loc_B045: ; CODE XREF: _main+43j + les bx, [bp+_argv+2] + les bx, es:[bx+4] + mov al, es:[bx] + cbw + cmp ax, 74h ; 't' + jnz short loc_B05A + mov byte_12324, 2 + +loc_B05A: ; CODE XREF: _main+58j + les bx, [bp+_argv+2] + les bx, es:[bx+4] + mov al, es:[bx] + cbw + cmp ax, 64h ; 'd' + jnz short loc_B06F + mov byte_12324, 3 + +loc_B06F: ; CODE XREF: _main+6Dj + push 3 ; n + push ds + push offset aCon ; "CON" + les bx, [bp+_argv+2] + push large dword ptr es:[bx+4] ; s1 + call _memcmp + add sp, 0Ah + or ax, ax + jnz short loc_B0D6 + les bx, [bp+_argv+2] + mov eax, es:[bx+8] + mov [bp+var_4], eax + push large [bp+var_4] + call sub_3BA3 + add sp, 4 + mov byte_1232D, al + les bx, [bp+_argv+2] + push large dword ptr es:[bx+0Ch] + call sub_3BA3 + add sp, 4 + mov word ptr dword_12330+2, dx + mov word ptr dword_12330, ax + les bx, [bp+_argv+2] + mov eax, es:[bx+10h] + mov [bp+var_8], eax + push large [bp+var_8] + call sub_3BA3 + add sp, 4 + mov byte_1232E, al + +loc_B0D6: ; CODE XREF: _main+31j _main+8Cj + call sub_E549 + call sub_B6E9 + push cs + call near ptr sub_A240 + mov al, byte ptr word_12320+1 + cbw + mov si, ax + mov byte ptr [bp+inregs+1], 3 + push ss + lea ax, [bp+outregs] + push ax ; outregs + push ss + lea ax, [bp+inregs] + push ax ; inregs + push 18h ; intno + call _int86 + add sp, 0Ah + call sub_1196 + push cs + call near ptr sub_A719 + xor ax, ax + mov es, ax + mov al, es:0500h + or al, 20h + mov [bp+var_9], al + xor ax, ax + mov dl, [bp+var_9] + mov es, ax + mov es:0500h, dl + jmp short loc_B135 +; --------------------------------------------------------------------------- + +loc_B126: ; CODE XREF: _main+141j + push 1 + call sub_B269 + pop cx + push di + push cs + call near ptr sub_A92C + pop cx + inc di + +loc_B135: ; CODE XREF: _main+129j + call sub_12B0 + or ax, ax + jz short loc_B126 + push cs + call near ptr sub_A772 + mov eax, dword_13418 + mov dword_12AFC, eax + jmp loc_B21A +; --------------------------------------------------------------------------- + +loc_B14D: ; CODE XREF: _main+224j + cmp byte_1232A, 0 + jnz short loc_B15F + push cs + call near ptr sub_A363 + push cs + call near ptr sub_AB97 + jmp loc_B1EE +; --------------------------------------------------------------------------- + +loc_B15F: ; CODE XREF: _main+157j + mov al, byte_1232A + cbw + cmp ax, 1 + jnz short loc_B172 + push cs + call near ptr sub_A4AB + push cs + call near ptr sub_AC84 + jmp short loc_B1EE +; --------------------------------------------------------------------------- + +loc_B172: ; CODE XREF: _main+16Bj + mov al, byte_1232A + cbw + cmp ax, 2 + jnz short loc_B185 + push cs + call near ptr sub_A4AB + push cs + call near ptr sub_AEA8 + jmp short loc_B1EE +; --------------------------------------------------------------------------- + +loc_B185: ; CODE XREF: _main+17Ej + mov al, byte_1232A + cbw + cmp ax, 3 + jnz short loc_B1D8 + mov al, byte ptr word_12320+1 + cbw + cmp ax, si + jz short loc_B1C9 + cmp byte ptr word_12320+1, 0 + jnz short loc_B1A4 + call sub_E509 + jmp short loc_B1C3 +; --------------------------------------------------------------------------- + +loc_B1A4: ; CODE XREF: _main+1A0j + mov al, byte ptr word_12320+1 + cbw + cmp ax, 1 + jnz short loc_B1C3 + call sub_E509 + push ds + push offset aReimu_mdt ; "reimu.mdt" + call sub_E4D9 + add sp, 4 + call sub_E4F9 + +loc_B1C3: ; CODE XREF: _main+1A7j _main+1B0j + mov al, byte ptr word_12320+1 + cbw + mov si, ax + +loc_B1C9: ; CODE XREF: _main+199j + push 0Fh + call sub_B269 + pop cx + mov byte_1232A, 0 + jmp short loc_B1EE +; --------------------------------------------------------------------------- + +loc_B1D8: ; CODE XREF: _main+191j + mov al, byte_1232A + cbw + cmp ax, 4 + jnz short loc_B1EE + push 0Fh + call sub_B269 + pop cx + mov byte_1232A, 1 + +loc_B1EE: ; CODE XREF: _main+161j _main+175j ... + xor ax, ax + mov es, ax + mov ax, word ptr es:loc_524 + mov [bp+var_C], ax + xor ax, ax + mov dx, [bp+var_C] + mov es, ax + mov word ptr es:loc_524+2, dx + mov es, ax + mov byte ptr es:loc_528, 0 + inc dword_13418 + push 1 + call sub_B269 + pop cx + +loc_B21A: ; CODE XREF: _main+14Fj + cmp byte_1232C, 0 + jz loc_B14D + push cs + call near ptr sub_A2E4 + mov byte_1232F, 1 + call sub_E509 + push cs + call near ptr sub_A79D + push 1 + call sub_B943 + pop cx + call sub_BB12 + push 0 + call sub_B943 + pop cx + call sub_BB12 + call sub_B73C + call sub_E509 + push ds + push offset format ; "‚ꂳ܂łII\n" + +loc_B25D: ; CODE XREF: _main+17j + call _printf +_main endp ; sp-analysis failed + + add sp, 4 + pop di + pop si + leave + retf +seg001 ends + +; =========================================================================== + +; Segment type: Pure code +seg002 segment byte public 'CODE' use16 + assume cs:seg002 + ;org 9 + assume es:nothing, ss:nothing, ds:dseg, fs:nothing, gs:nothing + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B269 proc far ; CODE XREF: sub_A66A+85P sub_A719+4DP ... + +arg_0 = word ptr 6 + + push bp + mov bp, sp + +loc_B26C: ; CODE XREF: sub_B269+9j + mov ax, word_1355C + cmp ax, [bp+arg_0] + jb short loc_B26C + mov word_1355C, 0 + pop bp + retf +sub_B269 endp + +seg002 ends + +; =========================================================================== + +; Segment type: Pure code +seg003 segment byte public 'CODE' use16 + assume cs:seg003 + ;org 0Ch + assume es:nothing, ss:nothing, ds:dseg, fs:nothing, gs:nothing + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +; void __interrupt isr() +isr proc far ; DATA XREF: sub_B2C3+22o + +var_4 = word ptr -4 +var_2 = word ptr -2 + + push ax + push bx + push cx + push dx + push es + push ds + push si + push di + push bp + mov bp, seg dseg + mov ds, bp + mov bp, sp + sub sp, 4 + mov ax, word_1290D + mov [bp+var_2], ax + mov ax, word_1290F + mov [bp+var_4], ax + inc word_1355C + inc word_1355E + cmp word_12903, 0 + jz short loc_B2AE + call dword_13564 + +loc_B2AE: ; CODE XREF: isr+2Cj + xor dx, dx + mov al, 20h ; ' ' + out dx, al + mov dx, 64h ; 'd' + mov al, 0 + out dx, al ; AT Keyboard controller 8042. + leave + pop di + pop si + pop ds + pop es + pop dx + pop cx + pop bx + pop ax + iret +isr endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B2C3 proc far ; CODE XREF: sub_B6E9+2EP + push bp + mov bp, sp + cmp byte_12902, 0 + jnz short loc_B303 + mov byte_12902, 1 + cli + push 0Ah ; interruptno + call _getvect + pop cx + mov word_13562, dx + mov off_13560, ax + push seg seg003 + push offset isr ; isr + push 0Ah ; interruptno + call _setvect + add sp, 6 + mov dx, 2 + in al, dx ; DMA controller, 8237A-5. + ; channel 1 current address + and al, 0FBh + mov dx, 2 + out dx, al ; DMA controller, 8237A-5. + ; channel 1 base address + ; (also sets current address) + mov dx, 64h ; 'd' + mov al, 0 + out dx, al ; AT Keyboard controller 8042. + sti + +loc_B303: ; CODE XREF: sub_B2C3+8j + pop bp + retf +sub_B2C3 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B305 proc far ; CODE XREF: sub_B784+15P + push bp + mov bp, sp + cmp byte_12902, 1 + jnz short loc_B332 + mov byte_12902, 0 + cli + mov dx, 2 + in al, dx ; DMA controller, 8237A-5. + ; channel 1 current address + or al, 4 + mov dx, 2 + out dx, al ; DMA controller, 8237A-5. + ; channel 1 base address + ; (also sets current address) + push word_13562 + push off_13560 ; isr + push 0Ah ; interruptno + call _setvect + add sp, 6 + sti + +loc_B332: ; CODE XREF: sub_B305+8j + pop bp + retf +sub_B305 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B334 proc far ; CODE XREF: sub_BC8B:loc_BCACP + ; sub_BD3A:loc_BD5AP ... + push bp + mov bp, sp + +loc_B337: ; CODE XREF: sub_B334+9j + mov dx, 60h ; '`' + in al, dx ; AT Keyboard controller 8042. + test al, 20h + jnz short loc_B337 + +loc_B33F: ; CODE XREF: sub_B334+11j + mov dx, 60h ; '`' + in al, dx ; AT Keyboard controller 8042. + test al, 20h + jz short loc_B33F + pop bp + retf +sub_B334 endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + mov word_12903, 0 + mov dx, [bp+8] + mov ax, [bp+6] + mov word ptr dword_13564+2, dx + mov word ptr dword_13564, ax + mov word_12903, 1 + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + mov word_12903, 0 + pop bp + retf +seg003 ends + +; =========================================================================== + +; Segment type: Pure code +seg004 segment byte public 'CODE' use16 + assume cs:seg004 + ;org 2 + assume es:nothing, ss:nothing, ds:dseg, fs:nothing, gs:nothing + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B372 proc far ; CODE XREF: sub_B6E9+33P + +inregs = REGS ptr -10h + + enter 10h, 0 + mov byte ptr [bp+inregs+1], 0Eh + mov word ptr [bp+inregs+6], 0 + push ss + lea ax, [bp+inregs] + push ax ; outregs + push ss + lea ax, [bp+inregs] + push ax ; inregs + push 18h ; intno + call _int86 + nop + push cs + call near ptr sub_B3D1 + nop + push cs + call near ptr sub_B404 + push 0 + nop + push cs + call near ptr sub_B462 + add sp, 0Ch + nop + push cs + call near ptr sub_B415 + nop + push cs + call near ptr sub_B426 + leave + retf +sub_B372 endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + nop + push cs + call near ptr sub_B3D1 + nop + push cs + call near ptr sub_B3F3 + push 1 + nop + push cs + call near ptr sub_B462 + pop cx + nop + push cs + call near ptr sub_B415 + nop + push cs + call near ptr sub_B426 + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B3D1 proc far ; CODE XREF: sub_B372+20p seg004:0045p ... + push bp + mov bp, sp + push ds + push offset a3l ; "\x1B[>3l" + nop + push cs + call near ptr sub_B683 + add sp, 4 + pop bp + retf +sub_B3D1 endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push ds + push offset a3h ; "\x1B[>3h" + nop + push cs + call near ptr sub_B683 + add sp, 4 + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B3F3 proc far ; CODE XREF: seg004:004Ap + push bp + mov bp, sp + push ds + push offset a1l ; "\x1B[>1l" + nop + push cs + call near ptr sub_B683 + add sp, 4 + pop bp + retf +sub_B3F3 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B404 proc far ; CODE XREF: sub_B372+25p + push bp + mov bp, sp + push ds + push offset a1h ; "\x1B[>1h" + nop + push cs + call near ptr sub_B683 + add sp, 4 + pop bp + retf +sub_B404 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B415 proc far ; CODE XREF: sub_B372+34p seg004:0057p ... + push bp + mov bp, sp + push ds + push offset a2j ; "\x1B[2J" + nop + push cs + call near ptr sub_B683 + add sp, 4 + pop bp + retf +sub_B415 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B426 proc far ; CODE XREF: sub_B372+39p seg004:005Cp ... + +inregs = REGS ptr -10h + + enter 10h, 0 + mov byte ptr [bp+inregs+1], 0Ch + push ss + lea ax, [bp+inregs] + push ax ; outregs + push ss + lea ax, [bp+inregs] + push ax ; inregs + push 18h ; intno + call _int86 + add sp, 0Ah + leave + retf +sub_B426 endp + +; --------------------------------------------------------------------------- + enter 10h, 0 + mov byte ptr [bp-0Fh], 0Dh + push ss + lea ax, [bp-10h] + push ax + push ss + lea ax, [bp-10h] + push ax + push 18h + call _int86 + add sp, 0Ah + leave + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B462 proc far ; CODE XREF: sub_B372+2Cp seg004:0051p ... + +arg_0 = word ptr 6 + + push bp + mov bp, sp + xor ax, ax + mov es, ax + assume es:seg000 + mov al, byte ptr es:loc_538+3 + cbw + mov bx, ax + mov dx, 62h ; 'b' + mov al, 4Bh ; 'K' + out dx, al ; PC/XT PPI port C. Bits: + ; 0-3: values of DIP switches + ; 5: 1=Timer 2 channel out + ; 6: 1=I/O channel check + ; 7: 1=RAM parity check error occurred. + mov al, bl + or al, 80h + mov dx, 60h ; '`' + out dx, al ; AT Keyboard controller 8042. + mov ax, [bp+arg_0] + or ax, ax + jz short loc_B491 + cmp ax, 1 + jz short loc_B498 + cmp ax, 2 + jz short loc_B49F + jmp short loc_B4A7 +; --------------------------------------------------------------------------- + +loc_B491: ; CODE XREF: sub_B462+21j + mov dx, 60h ; '`' + mov al, 9Fh ; '' + jmp short loc_B4A6 +; --------------------------------------------------------------------------- + +loc_B498: ; CODE XREF: sub_B462+26j + mov dx, 60h ; '`' + mov al, 80h ; '' + jmp short loc_B4A6 +; --------------------------------------------------------------------------- + +loc_B49F: ; CODE XREF: sub_B462+2Bj + mov al, bl + add al, 7Dh ; '}' + mov dx, 60h ; '`' + +loc_B4A6: ; CODE XREF: sub_B462+34j sub_B462+3Bj + out dx, al ; AT Keyboard controller 8042. + +loc_B4A7: ; CODE XREF: sub_B462+2Dj + mov al, bl + shl al, 3 + add al, 2 + mov dx, 60h ; '`' + out dx, al ; AT Keyboard controller 8042. + pop bp + retf +sub_B462 endp + +; --------------------------------------------------------------------------- + enter 10h, 0 + mov byte ptr [bp-0Ch], 10h + mov byte ptr [bp-0Fh], 3 + mov al, [bp+8] + mov [bp-9], al + mov al, [bp+6] + mov [bp-0Ah], al + push ss + lea ax, [bp-10h] + push ax + push ss + lea ax, [bp-10h] + push ax + push 0DCh ; '' + call _int86 + add sp, 0Ah + leave + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B4E3 proc far ; CODE XREF: seg004:030Bp + +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = byte ptr 0Ah +arg_5 = byte ptr 0Bh +arg_6 = dword ptr 0Ch + + enter 2, 0 + push si + push di + mov ax, [bp+arg_2] + imul ax, 50h + add ax, [bp+arg_0] + add ax, ax + mov si, ax + mov di, 1 + test [bp+arg_4], 1 + jz short loc_B502 + add di, 20h ; ' ' + +loc_B502: ; CODE XREF: sub_B4E3+1Aj + test [bp+arg_4], 4 + jz short loc_B50B + add di, 40h ; '@' + +loc_B50B: ; CODE XREF: sub_B4E3+23j + test [bp+arg_4], 2 + jz short loc_B515 + add di, 80h ; '' + +loc_B515: ; CODE XREF: sub_B4E3+2Cj + test [bp+arg_5], 8 + jz short loc_B51E + add di, 10h + +loc_B51E: ; CODE XREF: sub_B4E3+36j + test [bp+arg_5], 4 + jz short loc_B527 + add di, 8 + +loc_B527: ; CODE XREF: sub_B4E3+3Fj + test [bp+arg_5], 2 + jz short loc_B530 + add di, 4 + +loc_B530: ; CODE XREF: sub_B4E3+48j + test [bp+arg_5], 1 + jz short loc_B539 + add di, 2 + +loc_B539: ; CODE XREF: sub_B4E3+51j + mov ax, di + shl ax, 8 + add di, ax + jmp loc_B637 +; --------------------------------------------------------------------------- + +loc_B543: ; CODE XREF: sub_B4E3+15Dj + les bx, [bp+arg_6] + assume es:nothing + mov al, es:[bx] + mov ah, 0 + mov bx, ax + test byte ptr [bx+1013h], 4 + jnz short loc_B557 + jmp loc_B60E +; --------------------------------------------------------------------------- + +loc_B557: ; CODE XREF: sub_B4E3+6Fj + les bx, [bp+arg_6] + mov al, es:[bx] + cbw + shl ax, 8 + les bx, [bp+arg_6] + mov dl, es:[bx+1] + mov dh, 0 + add ax, dx + push ax + call sub_9E1D + pop cx + mov [bp+var_2], ax + add word ptr [bp+arg_6], 2 + cmp [bp+var_2], 2921h + jb short loc_B5A8 + cmp [bp+var_2], 2B7Eh + ja short loc_B5A8 + mov ax, [bp+var_2] + shr ax, 8 + add al, 0E0h ; '' + or al, 80h + mov dx, 0A000h + mov es, dx + assume es:nothing + mov es:[si], al + mov ax, 0A000h + mov dl, byte ptr [bp+var_2] + mov es, ax + mov es:[si+1], dl + jmp short loc_B621 +; --------------------------------------------------------------------------- + +loc_B5A8: ; CODE XREF: sub_B4E3+9Cj sub_B4E3+A3j + cmp [bp+arg_0], 4Fh ; 'O' + jnz short loc_B5BA + mov ax, 0A000h + mov es, ax + mov word ptr es:[si], 20h ; ' ' + jmp short loc_B621 +; --------------------------------------------------------------------------- + +loc_B5BA: ; CODE XREF: sub_B4E3+C9j + mov ax, [bp+var_2] + shr ax, 8 + add al, 0E0h ; '' + mov dx, 0A000h + mov es, dx + mov es:[si], al + mov ax, 0A000h + mov dl, byte ptr [bp+var_2] + mov es, ax + mov es:[si+1], dl + mov ax, [bp+var_2] + shr ax, 8 + add al, 0E0h ; '' + or al, 80h + mov dx, 0A000h + mov es, dx + mov es:[si+2], al + mov ax, 0A000h + mov dl, byte ptr [bp+var_2] + mov es, ax + mov es:[si+3], dl + mov ax, 0A200h + mov es, ax + assume es:nothing + mov es:[si], di + mov ax, 0A200h + mov es, ax + mov es:[si+2], di + add si, 2 + inc [bp+arg_0] + jmp short loc_B629 +; --------------------------------------------------------------------------- + +loc_B60E: ; CODE XREF: sub_B4E3+71j + les bx, [bp+arg_6] + assume es:nothing + mov al, es:[bx] + mov ah, 0 + mov dx, 0A000h + mov es, dx + assume es:nothing + mov es:[si], ax + inc word ptr [bp+arg_6] + +loc_B621: ; CODE XREF: sub_B4E3+C3j sub_B4E3+D5j + mov ax, 0A200h + mov es, ax + assume es:nothing + mov es:[si], di + +loc_B629: ; CODE XREF: sub_B4E3+129j + add si, 2 + inc [bp+arg_0] + mov ax, [bp+arg_0] + cmp ax, 50h ; 'P' + jge short loc_B643 + +loc_B637: ; CODE XREF: sub_B4E3+5Dj + les bx, [bp+arg_6] + assume es:nothing + cmp byte ptr es:[bx], 0 + jz short loc_B643 + jmp loc_B543 +; --------------------------------------------------------------------------- + +loc_B643: ; CODE XREF: sub_B4E3+152j + ; sub_B4E3+15Bj + pop di + pop si + leave + retf +sub_B4E3 endp + +; --------------------------------------------------------------------------- + enter 104h, 0 + lea ax, [bp+10h] + mov word ptr [bp-2], ss + mov [bp-4], ax + push word ptr [bp-2] + push word ptr [bp-4] + push word ptr [bp+0Eh] + push word ptr [bp+0Ch] + push ss + lea ax, [bp-104h] + push ax + call _vsprintf + push ss + lea ax, [bp-104h] + push ax + push word ptr [bp+0Ah] + push word ptr [bp+8] + push word ptr [bp+6] + push cs + call near ptr sub_B4E3 + add sp, 16h + leave + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B683 proc far ; CODE XREF: sub_B3D1+9p seg004:007Bp ... + +inregs = REGS ptr -10h +arg_0 = dword ptr 6 + + enter 10h, 0 + mov byte ptr [bp+inregs+4], 10h + mov byte ptr [bp+inregs+1], 0 + jmp short loc_B6B2 +; --------------------------------------------------------------------------- + +loc_B691: ; CODE XREF: sub_B683+36j + les bx, [bp+arg_0] + mov al, es:[bx] + mov byte ptr [bp+inregs+6], al + inc word ptr [bp+arg_0] + push ss + lea ax, [bp+inregs] + push ax ; outregs + push ss + lea ax, [bp+inregs] + push ax ; inregs + push 0DCh ; '' ; intno + call _int86 + add sp, 0Ah + +loc_B6B2: ; CODE XREF: sub_B683+Cj + les bx, [bp+arg_0] + cmp byte ptr es:[bx], 0 + jnz short loc_B691 + mov dx, 64h ; 'd' + mov al, 0 + out dx, al ; AT Keyboard controller 8042. + leave + retf +sub_B683 endp + +seg004 ends + +; =========================================================================== + +; Segment type: Pure code +seg005 segment byte public 'CODE' use16 + assume cs:seg005 + ;org 3 + assume es:nothing, ss:nothing, ds:dseg, fs:nothing, gs:nothing + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +; void __interrupt sub_B6C3() +sub_B6C3 proc far ; DATA XREF: sub_B784+Bo + push eax + push ebx + push ecx + push edx + push es + push ds + push esi + push edi + push bp + mov bp, seg dseg + mov ds, bp + mov bp, sp + pop bp + pop edi + pop esi + pop ds + pop es + pop edx + pop ecx + pop ebx + pop eax + iret +sub_B6C3 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B6E9 proc far ; CODE XREF: _main+E0P + push bp + mov bp, sp + cmp byte_12978, 0 + jnz short loc_B73A + mov byte_12978, 1 + push 6 ; interruptno + call _getvect + pop cx + mov word_1366A, dx + mov word_13667+1, ax + push seg seg005 + push offset sub_B7C3 ; isr + push 6 ; interruptno + call _setvect + add sp, 6 + call sub_B2C3 + call sub_B372 + call sub_130C + call sub_CE2 + call sub_E82 + call sub_D1C0 + call sub_D2DB + +loc_B73A: ; CODE XREF: sub_B6E9+8j + pop bp + retf +sub_B6E9 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B73C proc far ; CODE XREF: _main+254P sub_B7C3+17p ... + push bp + mov bp, sp + cmp byte_12978, 1 + jnz short loc_B755 + mov byte_12978, 0 + nop + push cs + call near ptr sub_B784 + call sub_EF6 + +loc_B755: ; CODE XREF: sub_B73C+8j + pop bp + retf +sub_B73C endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B757 proc far ; CODE XREF: sub_A7B5+2EP sub_A8AD+3DP + push bp + mov bp, sp + cmp byte_12978, 1 + jnz short loc_B782 + nop + push cs + call near ptr sub_B784 + call sub_B3D1 + push 0 + call sub_B462 + pop cx + call sub_B415 + call sub_B426 + mov byte_12978, 0 + +loc_B782: ; CODE XREF: sub_B757+8j + pop bp + retf +sub_B757 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B784 proc far ; CODE XREF: sub_B73C+11p sub_B757+Cp + push bp + mov bp, sp + mov byte_12978, 0 + push seg seg005 + push offset sub_B6C3 ; isr + push 6 ; interruptno + call _setvect + call sub_B305 + call sub_B415 + call sub_BD3A + call sub_B8D0 + call sub_130C + push large [dword ptr word_13667+1] ; isr + push 6 ; interruptno + call _setvect + add sp, 0Ch + pop bp + retf +sub_B784 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: noreturn bp-based frame + +; void __interrupt sub_B7C3() +sub_B7C3 proc near ; DATA XREF: sub_B6E9+21o + push eax + push ebx + push ecx + push edx + push es + push ds + push esi + push edi + push bp + mov bp, seg dseg + mov ds, bp + mov bp, sp + push cs + call near ptr sub_B73C + push 0 ; status + call _exit +sub_B7C3 endp + +; --------------------------------------------------------------------------- + pop cx + pop bp + pop edi + pop esi + pop ds + pop es + pop edx + pop ecx + pop ebx + pop eax + iret +; --------------------------------------------------------------------------- + enter 104h, 0 + lea ax, [bp+0Ah] + mov word ptr [bp-2], ss + mov [bp-4], ax + push word ptr [bp-2] + push ax + push large dword ptr [bp+6] + push ss + lea ax, [bp-104h] + push ax + call _vsprintf + push cs + call near ptr sub_B73C + push ss + lea ax, [bp-104h] + push ax + call sub_B683 + push 1 + call _exit +; --------------------------------------------------------------------------- + add sp, 12h + leave + retf +seg005 ends + +; --------------------------------------------------------------------------- +; =========================================================================== + +; Segment type: Pure code +seg006 segment byte public 'CODE' use16 + assume cs:seg006 + assume es:nothing, ss:nothing, ds:dseg, fs:nothing, gs:nothing + enter 10h, 0 + nop + push cs + call near ptr sub_B91C + mov byte ptr [bp-0Fh], 42h ; 'B' + mov byte ptr [bp-0Bh], 0C0h ; '' + push ss + lea ax, [bp-10h] + push ax + push ss + push ax + push 18h + call _int86 + mov dx, 6Ah ; 'j' + mov al, 1 + out dx, al ; PC-98 GDC (6a): + ; + push ds + push offset unk_1297A + nop + push cs + call near ptr sub_BA15 + push 0 + nop + push cs + call near ptr sub_B943 + push 0 + nop + push cs + call near ptr sub_B937 + add sp, 12h + nop + push cs + call near ptr sub_BB3C + mov dx, 68h ; 'h' + mov al, 0Ah + out dx, al + mov dx, 7Ch ; '|' + mov al, 0 + out dx, al + nop + push cs + call near ptr sub_B901 + leave + retf +; --------------------------------------------------------------------------- + enter 10h, 0 + nop + push cs + call near ptr sub_B91C + mov byte ptr [bp-0Fh], 42h ; 'B' + mov byte ptr [bp-0Bh], 0C0h ; '' + push ss + lea ax, [bp-10h] + push ax + push ss + push ax + push 18h + call _int86 + mov dx, 6Ah ; 'j' + mov al, 1 + out dx, al ; PC-98 GDC (6a): + ; + push 0 + nop + push cs + call near ptr sub_B943 + push 0 + nop + push cs + call near ptr sub_B937 + add sp, 0Eh + mov dx, 68h ; 'h' + mov al, 0Ah + out dx, al + mov dx, 7Ch ; '|' + mov al, 0 + out dx, al + nop + push cs + call near ptr sub_B901 + leave + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B8D0 proc far ; CODE XREF: sub_B784+24P + push bp + mov bp, sp + nop + push cs + call near ptr sub_BC6D + nop + push cs + call near ptr sub_BB3C + push 0 + nop + push cs + call near ptr sub_B943 + push 0 + nop + push cs + call near ptr sub_B937 + add sp, 4 + nop + push cs + call near ptr sub_B901 + mov dx, 68h ; 'h' + mov al, 0Ah + out dx, al + mov dx, 7Ch ; '|' + mov al, 0 + out dx, al + pop bp + retf +sub_B8D0 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B901 proc far ; CODE XREF: seg006:0052p seg006:009Bp ... + +inregs = REGS ptr -10h + + enter 10h, 0 + mov byte ptr [bp+inregs+1], 40h ; '@' + push ss + lea ax, [bp+inregs] + push ax ; outregs + push ss + push ax ; inregs + push 18h ; intno + call _int86 + add sp, 0Ah + leave + retf +sub_B901 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B91C proc far ; CODE XREF: seg006:0006p seg006:005Dp + +inregs = REGS ptr -10h + + enter 10h, 0 + mov byte ptr [bp+inregs+1], 41h ; 'A' + push ss + lea ax, [bp+inregs] + push ax ; outregs + push ss + push ax ; inregs + push 18h ; intno + call _int86 + add sp, 0Ah + leave + retf +sub_B91C endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B937 proc far ; CODE XREF: seg006:0039p seg006:0087p ... + +arg_0 = byte ptr 6 + + push bp + mov bp, sp + mov dx, 0A4h ; '' + mov al, [bp+arg_0] + out dx, al ; Interrupt Controller #2, 8259A + pop bp + retf +sub_B937 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B943 proc far ; CODE XREF: seg001:0033P seg001:0076P ... + +arg_0 = word ptr 6 + + push bp + mov bp, sp + mov bx, [bp+arg_0] + mov byte_13671, bl + mov dx, 0A6h ; '' + mov al, bl + out dx, al ; Interrupt Controller #2, 8259A + pop bp + retf +sub_B943 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B955 proc far ; CODE XREF: sub_BA5E+ABp sub_BC6D+Fp ... + +arg_0 = byte ptr 6 +arg_2 = byte ptr 8 +arg_4 = byte ptr 0Ah +arg_6 = byte ptr 0Ch + + push bp + mov bp, sp + mov dx, 0A8h ; '' + mov al, [bp+arg_0] + out dx, al ; Interrupt Controller #2, 8259A + mov dx, 0AAh ; '' + mov al, [bp+arg_4] + out dx, al ; Interrupt Controller #2, 8259A + mov dx, 0ACh ; '' + mov al, [bp+arg_2] + out dx, al ; Interrupt Controller #2, 8259A + mov dx, 0AEh ; '' + mov al, [bp+arg_6] + out dx, al ; Interrupt Controller #2, 8259A + pop bp + retf +sub_B955 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B976 proc far ; CODE XREF: sub_A629+17P sub_BB12+Fp ... + +arg_0 = word ptr 6 + + push bp + mov bp, sp + mov bx, [bp+arg_0] + mov dx, 7Ch ; '|' + mov al, 0C0h ; '' + out dx, al + test bl, 1 + jz short loc_B98B + mov al, 0FFh + jmp short loc_B98D +; --------------------------------------------------------------------------- + +loc_B98B: ; CODE XREF: sub_B976+Fj + mov al, 0 + +loc_B98D: ; CODE XREF: sub_B976+13j + mov dx, 7Eh ; '~' + out dx, al + test bl, 2 + jz short loc_B99A + mov al, 0FFh + jmp short loc_B99C +; --------------------------------------------------------------------------- + +loc_B99A: ; CODE XREF: sub_B976+1Ej + mov al, 0 + +loc_B99C: ; CODE XREF: sub_B976+22j + mov dx, 7Eh ; '~' + out dx, al + test bl, 4 + jz short loc_B9A9 + mov al, 0FFh + jmp short loc_B9AB +; --------------------------------------------------------------------------- + +loc_B9A9: ; CODE XREF: sub_B976+2Dj + mov al, 0 + +loc_B9AB: ; CODE XREF: sub_B976+31j + mov dx, 7Eh ; '~' + out dx, al + test bl, 8 + jz short loc_B9B8 + mov al, 0FFh + jmp short loc_B9BA +; --------------------------------------------------------------------------- + +loc_B9B8: ; CODE XREF: sub_B976+3Cj + mov al, 0 + +loc_B9BA: ; CODE XREF: sub_B976+40j + mov dx, 7Eh ; '~' + out dx, al + pop bp + retf +sub_B976 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B9C0 proc far ; CODE XREF: seg001:002CP + +arg_0 = word ptr 6 + + push bp + mov bp, sp + mov bx, [bp+arg_0] + mov dx, 7Ch ; '|' + mov al, 80h ; '' + out dx, al + test bl, 1 + jz short loc_B9D5 + mov al, 0FFh + jmp short loc_B9D7 +; --------------------------------------------------------------------------- + +loc_B9D5: ; CODE XREF: sub_B9C0+Fj + mov al, 0 + +loc_B9D7: ; CODE XREF: sub_B9C0+13j + mov dx, 7Eh ; '~' + out dx, al + test bl, 2 + jz short loc_B9E4 + mov al, 0FFh + jmp short loc_B9E6 +; --------------------------------------------------------------------------- + +loc_B9E4: ; CODE XREF: sub_B9C0+1Ej + mov al, 0 + +loc_B9E6: ; CODE XREF: sub_B9C0+22j + mov dx, 7Eh ; '~' + out dx, al + test bl, 4 + jz short loc_B9F3 + mov al, 0FFh + jmp short loc_B9F5 +; --------------------------------------------------------------------------- + +loc_B9F3: ; CODE XREF: sub_B9C0+2Dj + mov al, 0 + +loc_B9F5: ; CODE XREF: sub_B9C0+31j + mov dx, 7Eh ; '~' + out dx, al + test bl, 8 + jz short loc_BA02 + mov al, 0FFh + jmp short loc_BA04 +; --------------------------------------------------------------------------- + +loc_BA02: ; CODE XREF: sub_B9C0+3Cj + mov al, 0 + +loc_BA04: ; CODE XREF: sub_B9C0+40j + mov dx, 7Eh ; '~' + out dx, al + pop bp + retf +sub_B9C0 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_BA0A proc far ; CODE XREF: seg001:006FP sub_A629+38P ... + push bp + mov bp, sp + mov dx, 7Ch ; '|' + mov al, 0 + out dx, al + pop bp + retf +sub_BA0A endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_BA15 proc far ; CODE XREF: seg006:002Bp sub_D631+8EP ... + +arg_0 = dword ptr 6 + + push bp + mov bp, sp + push si + xor si, si + jmp short loc_BA56 +; --------------------------------------------------------------------------- + +loc_BA1D: ; CODE XREF: sub_BA15+44j + mov ax, si + imul ax, 3 + les bx, [bp+arg_0] + add bx, ax + mov al, es:[bx+2] + cbw + push ax + mov ax, si + imul ax, 3 + mov bx, word ptr [bp+arg_0] + add bx, ax + mov al, es:[bx+1] + cbw + push ax + mov ax, si + imul ax, 3 + mov bx, word ptr [bp+arg_0] + add bx, ax + mov al, es:[bx] + cbw + push ax + push si + nop + push cs + call near ptr sub_BA5E + add sp, 8 + inc si + +loc_BA56: ; CODE XREF: sub_BA15+6j + cmp si, 10h + jl short loc_BA1D + pop si + pop bp + retf +sub_BA15 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_BA5E proc far ; CODE XREF: sub_BA15+3Ap seg006:1975p + +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + push si + mov si, [bp+arg_0] + cmp [bp+arg_2], 0Fh + jge short loc_BA70 + mov ax, [bp+arg_2] + jmp short loc_BA73 +; --------------------------------------------------------------------------- + +loc_BA70: ; CODE XREF: sub_BA5E+Bj + mov ax, 0Fh + +loc_BA73: ; CODE XREF: sub_BA5E+10j + or ax, ax + jle short loc_BA87 + cmp [bp+arg_2], 0Fh + jge short loc_BA82 + mov ax, [bp+arg_2] + jmp short loc_BA85 +; --------------------------------------------------------------------------- + +loc_BA82: ; CODE XREF: sub_BA5E+1Dj + mov ax, 0Fh + +loc_BA85: ; CODE XREF: sub_BA5E+22j + jmp short loc_BA89 +; --------------------------------------------------------------------------- + +loc_BA87: ; CODE XREF: sub_BA5E+17j + xor ax, ax + +loc_BA89: ; CODE XREF: sub_BA5E:loc_BA85j + mov [bp+arg_2], ax + cmp [bp+arg_4], 0Fh + jge short loc_BA97 + mov ax, [bp+arg_4] + jmp short loc_BA9A +; --------------------------------------------------------------------------- + +loc_BA97: ; CODE XREF: sub_BA5E+32j + mov ax, 0Fh + +loc_BA9A: ; CODE XREF: sub_BA5E+37j + or ax, ax + jle short loc_BAAE + cmp [bp+arg_4], 0Fh + jge short loc_BAA9 + mov ax, [bp+arg_4] + jmp short loc_BAAC +; --------------------------------------------------------------------------- + +loc_BAA9: ; CODE XREF: sub_BA5E+44j + mov ax, 0Fh + +loc_BAAC: ; CODE XREF: sub_BA5E+49j + jmp short loc_BAB0 +; --------------------------------------------------------------------------- + +loc_BAAE: ; CODE XREF: sub_BA5E+3Ej + xor ax, ax + +loc_BAB0: ; CODE XREF: sub_BA5E:loc_BAACj + mov [bp+arg_4], ax + cmp [bp+arg_6], 0Fh + jge short loc_BABE + mov ax, [bp+arg_6] + jmp short loc_BAC1 +; --------------------------------------------------------------------------- + +loc_BABE: ; CODE XREF: sub_BA5E+59j + mov ax, 0Fh + +loc_BAC1: ; CODE XREF: sub_BA5E+5Ej + or ax, ax + jle short loc_BAD5 + cmp [bp+arg_6], 0Fh + jge short loc_BAD0 + mov ax, [bp+arg_6] + jmp short loc_BAD3 +; --------------------------------------------------------------------------- + +loc_BAD0: ; CODE XREF: sub_BA5E+6Bj + mov ax, 0Fh + +loc_BAD3: ; CODE XREF: sub_BA5E+70j + jmp short loc_BAD7 +; --------------------------------------------------------------------------- + +loc_BAD5: ; CODE XREF: sub_BA5E+65j + xor ax, ax + +loc_BAD7: ; CODE XREF: sub_BA5E:loc_BAD3j + mov [bp+arg_6], ax + mov bx, si + imul bx, 3 + mov al, byte ptr [bp+arg_2] + mov [bx+6EAh], al + mov bx, si + imul bx, 3 + mov al, byte ptr [bp+arg_4] + mov [bx+6EBh], al + mov bx, si + imul bx, 3 + mov al, byte ptr [bp+arg_6] + mov [bx+6ECh], al + push [bp+arg_6] + push [bp+arg_4] + push [bp+arg_2] + push si + push cs + call near ptr sub_B955 + add sp, 8 + pop si + pop bp + retf +sub_BA5E endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_BB12 proc far ; CODE XREF: _main+242P _main+24FP ... + +_s = dword ptr -4 + + enter 4, 0 + mov [bp+_s], 0A8000000h + push 0 + push cs + call near ptr sub_B976 + push large 7D0000FFh ; c + push large [bp+_s] ; s + call far ptr _memset + add sp, 0Ah + push cs + call near ptr sub_BA0A + leave + retf +sub_BB12 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_BB3C proc far ; CODE XREF: seg006:0041p sub_B8D0+Ap + push bp + mov bp, sp + push 2 + push cs + call near ptr sub_B943 + push cs + call near ptr sub_BB12 + push 2 + push cs + call near ptr sub_B943 + add sp, 4 + push cs + call near ptr sub_BB12 + pop bp + retf +sub_BB3C endp + +; --------------------------------------------------------------------------- + enter 4, 0 + mov dword ptr [bp-4], 0A8000000h + mov al, [bp+6] + cbw + push ax + push cs + call near ptr sub_B976 + push large 7D0000FFh + push large dword ptr [bp-4] + call far ptr _memset + add sp, 0Ah + push cs + call near ptr sub_BA0A + leave + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_BB85 proc far ; CODE XREF: sub_A66A+9EP sub_A719+2DP ... + +var_152 = byte ptr -152h +var_102 = byte ptr -102h +var_B2 = byte ptr -0B2h +dest = byte ptr -62h +var_11 = byte ptr -11h +var_10 = dword ptr -10h +var_C = dword ptr -0Ch +var_8 = dword ptr -8 +src = dword ptr -4 + + enter 152h, 0 + push si + mov [bp+src], 0A8000000h + mov [bp+var_8], 0B0000000h + mov [bp+var_C], 0B8000000h + mov [bp+var_10], 0E0000000h + mov al, byte_13671 + xor al, 1 + mov [bp+var_11], al + xor si, si + jmp loc_BC62 +; --------------------------------------------------------------------------- + +loc_BBB7: ; CODE XREF: sub_BB85+E1j + push 50h ; 'P' ; n + push large [bp+src] ; src + push ss + lea ax, [bp+dest] + push ax ; dest + call _memcpy + push 50h ; 'P' ; n + push large [bp+var_8] ; src + push ss + lea ax, [bp+var_B2] + push ax ; dest + call _memcpy + push 50h ; 'P' ; n + push large [bp+var_C] ; src + push ss + lea ax, [bp+var_102] + push ax ; dest + call _memcpy + push 50h ; 'P' ; n + push large [bp+var_10] ; src + push ss + lea ax, [bp+var_152] + push ax ; dest + call _memcpy + mov dx, 0A6h ; '' + mov al, [bp+var_11] + out dx, al ; Interrupt Controller #2, 8259A + push 50h ; 'P' ; n + push ss + lea ax, [bp+dest] + push ax ; src + push large [bp+src] ; dest + call _memcpy + add sp, 32h + push 50h ; 'P' ; n + push ss + lea ax, [bp+var_B2] + push ax ; src + push large [bp+var_8] ; dest + call _memcpy + push 50h ; 'P' ; n + push ss + lea ax, [bp+var_102] + push ax ; src + push large [bp+var_C] ; dest + call _memcpy + push 50h ; 'P' ; n + push ss + lea ax, [bp+var_152] + push ax ; src + push large [bp+var_10] ; dest + call _memcpy + add sp, 1Eh + mov dx, 0A6h ; '' + mov al, byte_13671 + out dx, al ; Interrupt Controller #2, 8259A + add word ptr [bp+src], 50h ; 'P' + add word ptr [bp+var_8], 50h ; 'P' + add word ptr [bp+var_C], 50h ; 'P' + add word ptr [bp+var_10], 50h ; 'P' + inc si + +loc_BC62: ; CODE XREF: sub_BB85+2Fj + cmp si, 190h + jl loc_BBB7 + pop si + leave + retf +sub_BB85 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_BC6D proc far ; CODE XREF: sub_A719+28P sub_B8D0+5p + push bp + mov bp, sp + push si + xor si, si + jmp short loc_BC83 +; --------------------------------------------------------------------------- + +loc_BC75: ; CODE XREF: sub_BC6D+19j + push large 0 + push 0 + push si + push cs + call near ptr sub_B955 + add sp, 8 + inc si + +loc_BC83: ; CODE XREF: sub_BC6D+6j + cmp si, 10h + jl short loc_BC75 + pop si + pop bp + retf +sub_BC6D endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_BC8B proc far ; CODE XREF: sub_A719+46P + +_s = byte ptr -32h +var_31 = byte ptr -31h +var_30 = byte ptr -30h +var_2 = word ptr -2 + + enter 32h, 0 + push si + push di + push large 300000h ; c + push ss + lea ax, [bp+_s] + push ax ; s + call far ptr _memset + add sp, 8 + mov [bp+var_2], 0 + jmp loc_BD2E +; --------------------------------------------------------------------------- + +loc_BCAC: ; CODE XREF: sub_BC8B+A7j + call sub_B334 + xor si, si + jmp short loc_BD1E +; --------------------------------------------------------------------------- + +loc_BCB5: ; CODE XREF: sub_BC8B+96j + xor di, di + jmp short loc_BCE3 +; --------------------------------------------------------------------------- + +loc_BCB9: ; CODE XREF: sub_BC8B+5Bj + mov bx, si + imul bx, 3 + add bx, di + lea ax, [bp+_s] + add bx, ax + mov al, ss:[bx] + mov bx, si + imul bx, 3 + cmp al, [bx+di+6EAh] + jge short loc_BCE2 + mov bx, si + imul bx, 3 + add bx, di + lea ax, [bp+_s] + add bx, ax + inc byte ptr ss:[bx] + +loc_BCE2: ; CODE XREF: sub_BC8B+46j + inc di + +loc_BCE3: ; CODE XREF: sub_BC8B+2Cj + cmp di, 3 + jl short loc_BCB9 + mov bx, si + imul bx, 3 + lea ax, [bp+var_30] + add bx, ax + mov al, ss:[bx] + cbw + push ax + mov bx, si + imul bx, 3 + lea ax, [bp+var_31] + add bx, ax + mov al, ss:[bx] + cbw + push ax + mov bx, si + imul bx, 3 + lea ax, [bp+_s] + add bx, ax + mov al, ss:[bx] + cbw + push ax + push si + push cs + call near ptr sub_B955 + add sp, 8 + inc si + +loc_BD1E: ; CODE XREF: sub_BC8B+28j + cmp si, 10h + jl short loc_BCB5 + push 0Ah + call sub_9BF8 + pop cx + inc [bp+var_2] + +loc_BD2E: ; CODE XREF: sub_BC8B+1Ej + cmp [bp+var_2], 10h + jl loc_BCAC + pop di + pop si + leave + retf +sub_BC8B endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_BD3A proc far ; CODE XREF: sub_B784+1FP + +dest = byte ptr -32h +var_31 = byte ptr -31h +var_30 = byte ptr -30h +var_2 = word ptr -2 + + enter 32h, 0 + push si + push di + push 30h ; '0' ; n + push ds + push offset unk_1297A ; src + push ss + lea ax, [bp+dest] + push ax ; dest + call _memcpy + add sp, 0Ah + mov [bp+var_2], 0 + jmp short loc_BDD1 +; --------------------------------------------------------------------------- + +loc_BD5A: ; CODE XREF: sub_BD3A+9Bj + call sub_B334 + xor si, si + jmp short loc_BDC1 +; --------------------------------------------------------------------------- + +loc_BD63: ; CODE XREF: sub_BD3A+8Aj + xor di, di + jmp short loc_BD86 +; --------------------------------------------------------------------------- + +loc_BD67: ; CODE XREF: sub_BD3A+4Fj + mov bx, si + imul bx, 3 + add bx, di + lea ax, [bp+dest] + add bx, ax + cmp byte ptr ss:[bx], 0 + jle short loc_BD85 + mov bx, si + imul bx, 3 + add bx, di + add bx, ax + dec byte ptr ss:[bx] + +loc_BD85: ; CODE XREF: sub_BD3A+3Dj + inc di + +loc_BD86: ; CODE XREF: sub_BD3A+2Bj + cmp di, 3 + jl short loc_BD67 + mov bx, si + imul bx, 3 + lea ax, [bp+var_30] + add bx, ax + mov al, ss:[bx] + cbw + push ax + mov bx, si + imul bx, 3 + lea ax, [bp+var_31] + add bx, ax + mov al, ss:[bx] + cbw + push ax + mov bx, si + imul bx, 3 + lea ax, [bp+dest] + add bx, ax + mov al, ss:[bx] + cbw + push ax + push si + push cs + call near ptr sub_B955 + add sp, 8 + inc si + +loc_BDC1: ; CODE XREF: sub_BD3A+27j + cmp si, 10h + jl short loc_BD63 + push 0Ah + call sub_9BF8 + pop cx + inc [bp+var_2] + +loc_BDD1: ; CODE XREF: sub_BD3A+1Ej + cmp [bp+var_2], 10h + jl short loc_BD5A + pop di + pop si + leave + retf +sub_BD3A endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + xor si, si + jmp short loc_BDF4 +; --------------------------------------------------------------------------- + +loc_BDE3: ; CODE XREF: seg006:05C7j + push large 0F000Fh + push 0Fh + push si + push cs + call near ptr sub_B955 + add sp, 8 + inc si + +loc_BDF4: ; CODE XREF: seg006:05B1j + cmp si, 10h + jl short loc_BDE3 + pop si + pop bp + retf +; --------------------------------------------------------------------------- + enter 32h, 0 + push si + push di + push large 30000Fh + push ss + lea ax, [bp-32h] + push ax + call far ptr _memset + add sp, 8 + mov word ptr [bp-2], 0 + jmp loc_BE9F +; --------------------------------------------------------------------------- + +loc_BE1D: ; CODE XREF: seg006:0673j + call sub_B334 + xor si, si + jmp short loc_BE8F +; --------------------------------------------------------------------------- + +loc_BE26: ; CODE XREF: seg006:0662j + xor di, di + jmp short loc_BE54 +; --------------------------------------------------------------------------- + +loc_BE2A: ; CODE XREF: seg006:0627j + mov bx, si + imul bx, 3 + add bx, di + lea ax, [bp-32h] + add bx, ax + mov al, ss:[bx] + mov bx, si + imul bx, 3 + cmp al, [bx+di+6EAh] + jle short loc_BE53 + mov bx, si + imul bx, 3 + add bx, di + lea ax, [bp-32h] + add bx, ax + dec byte ptr ss:[bx] + +loc_BE53: ; CODE XREF: seg006:0612j + inc di + +loc_BE54: ; CODE XREF: seg006:05F8j + cmp di, 3 + jl short loc_BE2A + mov bx, si + imul bx, 3 + lea ax, [bp-30h] + add bx, ax + mov al, ss:[bx] + cbw + push ax + mov bx, si + imul bx, 3 + lea ax, [bp-31h] + add bx, ax + mov al, ss:[bx] + cbw + push ax + mov bx, si + imul bx, 3 + lea ax, [bp-32h] + add bx, ax + mov al, ss:[bx] + cbw + push ax + push si + push cs + call near ptr sub_B955 + add sp, 8 + inc si + +loc_BE8F: ; CODE XREF: seg006:05F4j + cmp si, 10h + jl short loc_BE26 + push 0Ah + call sub_9BF8 + pop cx + inc word ptr [bp-2] + +loc_BE9F: ; CODE XREF: seg006:05EAj + cmp word ptr [bp-2], 10h + jl loc_BE1D + pop di + pop si + leave + retf +; --------------------------------------------------------------------------- + enter 32h, 0 + push si + push di + push 30h ; '0' + push ds + push offset unk_1297A + push ss + lea ax, [bp-32h] + push ax + call _memcpy + add sp, 0Ah + mov word ptr [bp-2], 0 + jmp short loc_BF42 +; --------------------------------------------------------------------------- + +loc_BECB: ; CODE XREF: seg006:0716j + call sub_B334 + xor si, si + jmp short loc_BF32 +; --------------------------------------------------------------------------- + +loc_BED4: ; CODE XREF: seg006:0705j + xor di, di + jmp short loc_BEF7 +; --------------------------------------------------------------------------- + +loc_BED8: ; CODE XREF: seg006:06CAj + mov bx, si + imul bx, 3 + add bx, di + lea ax, [bp-32h] + add bx, ax + cmp byte ptr ss:[bx], 0Fh + jge short loc_BEF6 + mov bx, si + imul bx, 3 + add bx, di + add bx, ax + inc byte ptr ss:[bx] + +loc_BEF6: ; CODE XREF: seg006:06B8j + inc di + +loc_BEF7: ; CODE XREF: seg006:06A6j + cmp di, 3 + jl short loc_BED8 + mov bx, si + imul bx, 3 + lea ax, [bp-30h] + add bx, ax + mov al, ss:[bx] + cbw + push ax + mov bx, si + imul bx, 3 + lea ax, [bp-31h] + add bx, ax + mov al, ss:[bx] + cbw + push ax + mov bx, si + imul bx, 3 + lea ax, [bp-32h] + add bx, ax + mov al, ss:[bx] + cbw + push ax + push si + push cs + call near ptr sub_B955 + add sp, 8 + inc si + +loc_BF32: ; CODE XREF: seg006:06A2j + cmp si, 10h + jl short loc_BED4 + push 0Ah + call sub_9BF8 + pop cx + inc word ptr [bp-2] + +loc_BF42: ; CODE XREF: seg006:0699j + cmp word ptr [bp-2], 10h + jl short loc_BECB + pop di + pop si + leave + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + xor si, si + jmp short loc_BF7E +; --------------------------------------------------------------------------- + +loc_BF54: ; CODE XREF: seg006:0751j + mov bx, si + imul bx, 3 + mov al, [bx+6ECh] + cbw + push ax + mov bx, si + imul bx, 3 + mov al, [bx+6EBh] + cbw + push ax + mov bx, si + imul bx, 3 + mov al, [bx+6EAh] + cbw + push ax + push si + push cs + call near ptr sub_B955 + add sp, 8 + inc si + +loc_BF7E: ; CODE XREF: seg006:0722j + cmp si, 10h + jl short loc_BF54 + pop si + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push word ptr [bp+0Ah] + push cs + call near ptr sub_B976 + pop cx + mov bx, [bp+8] + imul bx, 50h + mov ax, [bp+6] + sar ax, 3 + add bx, ax + mov ax, 0A800h + mov cl, [bp+6] + and cl, 7 + mov dx, 80h ; '' + sar dx, cl + mov es, ax + assume es:nothing + mov es:[bx], dl + push cs + call near ptr sub_BA0A + pop bp + retf +; --------------------------------------------------------------------------- + enter 2, 0 + push si + push di + mov ax, [bp+8] + imul ax, 50h + mov dx, [bp+6] + sar dx, 3 + add ax, dx + mov di, ax + mov cl, [bp+6] + and cl, 7 + mov ax, 80h ; '' + sar ax, cl + mov [bp-2], ax + xor si, si + mov ax, 0A800h + mov es, ax + mov al, es:[di] + cbw + test [bp-2], ax + jz short loc_BFEF + or si, 1 + +loc_BFEF: ; CODE XREF: seg006:07BAj + mov ax, 0B000h + mov es, ax + assume es:nothing + mov al, es:[di] + cbw + test [bp-2], ax + jz short loc_C000 + or si, 2 + +loc_C000: ; CODE XREF: seg006:07CBj + mov ax, 0B800h + mov es, ax + assume es:nothing + mov al, es:[di] + cbw + test [bp-2], ax + jz short loc_C011 + or si, 4 + +loc_C011: ; CODE XREF: seg006:07DCj + mov ax, 0E000h + mov es, ax + assume es:nothing + mov al, es:[di] + cbw + test [bp-2], ax + jz short loc_C022 + or si, 8 + +loc_C022: ; CODE XREF: seg006:07EDj + mov ax, si + pop di + pop si + leave + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_C028 proc far ; CODE XREF: sub_C247+3Dp seg006:1075p ... + +var_A = dword ptr -0Ah +var_6 = byte ptr -6 +var_5 = byte ptr -5 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch + + enter 0Ah, 0 + push si + push di + mov di, [bp+arg_4] + mov ax, [bp+arg_0] + cmp ax, [bp+arg_2] + jle short loc_C048 + mov [bp+var_4], ax + mov ax, [bp+arg_2] + mov [bp+arg_0], ax + mov ax, [bp+var_4] + mov [bp+arg_2], ax + +loc_C048: ; CODE XREF: sub_C028+Fj + cmp [bp+arg_0], 0 + jge short loc_C05B + cmp [bp+arg_2], 0 + jl loc_C137 + mov [bp+arg_0], 0 + +loc_C05B: ; CODE XREF: sub_C028+24j + cmp [bp+arg_2], 27Fh + jle short loc_C070 + cmp [bp+arg_0], 27Fh + jg loc_C137 + mov [bp+arg_2], 27Fh + +loc_C070: ; CODE XREF: sub_C028+38j + mov ax, [bp+arg_2] + mov word_1366C, ax + mov word_1366E, di + mov ax, di + imul ax, 50h + push ax + mov ax, [bp+arg_0] + mov bx, 8 + cwd + idiv bx + pop dx + add dx, ax + mov word ptr [bp+var_A+2], 0A800h + mov word ptr [bp+var_A], dx + mov ax, [bp+arg_2] + cwd + idiv bx + push ax + mov ax, [bp+arg_0] + cwd + idiv bx + pop dx + sub dx, ax + mov [bp+var_2], dx + mov cl, byte ptr [bp+arg_0] + and cl, 7 + mov ax, 0FFh + sar ax, cl + mov [bp+var_5], al + mov al, byte ptr [bp+arg_2] + and al, 7 + mov cl, 7 + sub cl, al + mov al, 0FFh + shl al, cl + mov [bp+var_6], al + cmp byte_129AA, 0 + jnz short loc_C0D4 + push [bp+arg_6] + push cs + call near ptr sub_B976 + pop cx + +loc_C0D4: ; CODE XREF: sub_C028+A2j + cmp byte_129AA, 0 + jz short loc_C0F2 + push 1 + mov ax, 280h + sub ax, [bp+arg_0] + push ax + push di + push [bp+arg_0] + call sub_D338 + add sp, 8 + jmp short loc_C12C +; --------------------------------------------------------------------------- + +loc_C0F2: ; CODE XREF: sub_C028+B1j + cmp [bp+var_2], 0 + jnz short loc_C103 + mov al, [bp+var_5] + and al, [bp+var_6] + les bx, [bp+var_A] + assume es:nothing + jmp short loc_C129 +; --------------------------------------------------------------------------- + +loc_C103: ; CODE XREF: sub_C028+CEj + les bx, [bp+var_A] + mov al, [bp+var_5] + mov es:[bx], al + mov si, 1 + jmp short loc_C11B +; --------------------------------------------------------------------------- + +loc_C111: ; CODE XREF: sub_C028+F6j + les bx, [bp+var_A] + add bx, si + mov byte ptr es:[bx], 0FFh + inc si + +loc_C11B: ; CODE XREF: sub_C028+E7j + cmp si, [bp+var_2] + jl short loc_C111 + les bx, [bp+var_A] + add bx, [bp+var_2] + mov al, [bp+var_6] + +loc_C129: ; CODE XREF: sub_C028+D9j + mov es:[bx], al + +loc_C12C: ; CODE XREF: sub_C028+C8j + cmp byte_129AA, 0 + jnz short loc_C137 + push cs + call near ptr sub_BA0A + +loc_C137: ; CODE XREF: sub_C028+2Aj sub_C028+3Fj ... + pop di + pop si + leave + retf +sub_C028 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_C13B proc far ; CODE XREF: sub_C247+21p seg006:1081p ... + +var_8 = word ptr -8 +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch + + enter 8, 0 + push si + push di + mov si, [bp+arg_2] + mov di, [bp+arg_4] + cmp si, di + jle short loc_C153 + mov [bp+var_4], si + mov si, di + mov di, [bp+var_4] + +loc_C153: ; CODE XREF: sub_C13B+Ej + or si, si + jge short loc_C15F + or di, di + jl loc_C1F6 + xor si, si + +loc_C15F: ; CODE XREF: sub_C13B+1Aj + cmp di, 18Fh + jle short loc_C170 + cmp si, 18Fh + jg loc_C1F6 + mov di, 18Fh + +loc_C170: ; CODE XREF: sub_C13B+28j + mov ax, [bp+arg_0] + mov word_1366C, ax + mov word_1366E, di + cmp byte_129AA, 0 + jz short loc_C196 + mov ax, di + sub ax, si + push ax + push 10h + push si + push [bp+arg_0] + call sub_D338 + add sp, 8 + jmp short loc_C1F6 +; --------------------------------------------------------------------------- + +loc_C196: ; CODE XREF: sub_C13B+44j + mov ax, [bp+arg_0] + sar ax, 3 + mov dx, si + shl dx, 6 + add ax, dx + mov dx, si + shl dx, 4 + add ax, dx + mov [bp+var_8], ax + mov cl, byte ptr [bp+arg_0] + and cl, 7 + mov ax, word_129AB + shr ax, cl + mov [bp+var_6], ax + mov al, byte ptr [bp+arg_0] + and al, 7 + mov cl, 10h + sub cl, al + mov ax, word_129AB + shl ax, cl + or [bp+var_6], ax + push [bp+arg_6] + push cs + call near ptr sub_B976 + pop cx + mov [bp+var_2], si + jmp short loc_C1ED +; --------------------------------------------------------------------------- + +loc_C1D9: ; CODE XREF: sub_C13B+B5j + les bx, dword_13672 + add bx, [bp+var_8] + mov ax, [bp+var_6] + mov es:[bx], ax + add [bp+var_8], 50h ; 'P' + inc [bp+var_2] + +loc_C1ED: ; CODE XREF: sub_C13B+9Cj + cmp [bp+var_2], di + jle short loc_C1D9 + push cs + call near ptr sub_BA0A + +loc_C1F6: ; CODE XREF: sub_C13B+1Ej sub_C13B+2Ej ... + pop di + pop si + leave + retf +sub_C13B endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + mov byte_129AA, 1 + push 7 + push word ptr [bp+0Ch] + push word ptr [bp+0Ah] + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr sub_C247 + add sp, 0Ah + mov byte_129AA, 0 + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + mov ax, [bp+10h] + mov word_129AB, ax + push word ptr [bp+0Eh] + push word ptr [bp+0Ch] + push word ptr [bp+0Ah] + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr sub_C247 + add sp, 0Ah + mov word_129AB, 80h ; '' + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_C247 proc far ; CODE XREF: seg006:09E2p seg006:0A09p + +var_28 = dword ptr -28h +var_24 = dword ptr -24h +var_20 = dword ptr -20h +var_1C = dword ptr -1Ch +var_18 = word ptr -18h +var_16 = word ptr -16h +var_14 = word ptr -14h +var_12 = word ptr -12h +var_10 = word ptr -10h +var_E = word ptr -0Eh +var_C = word ptr -0Ch +var_A = word ptr -0Ah +var_8 = word ptr -8 +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch +arg_8 = word ptr 0Eh + + enter 28h, 0 + push si + push di + mov di, [bp+arg_2] + cmp byte_129AA, 0 + jnz short loc_C26D + mov ax, [bp+arg_0] + cmp ax, [bp+arg_4] + jnz short loc_C26D + push [bp+arg_8] + push [bp+arg_6] + push di + push ax + push cs + call near ptr sub_C13B + jmp short loc_C287 +; --------------------------------------------------------------------------- + +loc_C26D: ; CODE XREF: sub_C247+Ej sub_C247+16j + cmp byte_129AA, 0 + jnz short loc_C28D + cmp di, [bp+arg_6] + jnz short loc_C28D + push [bp+arg_8] + push di + push [bp+arg_4] + push [bp+arg_0] + push cs + call near ptr sub_C028 + +loc_C287: ; CODE XREF: sub_C247+24j + add sp, 8 + jmp loc_C772 +; --------------------------------------------------------------------------- + +loc_C28D: ; CODE XREF: sub_C247+2Bj sub_C247+30j + mov ax, [bp+arg_0] + cmp ax, [bp+arg_4] + jle short loc_C2B0 + mov [bp+var_10], ax + mov ax, [bp+arg_4] + mov [bp+arg_0], ax + mov ax, [bp+var_10] + mov [bp+arg_4], ax + mov [bp+var_10], di + mov di, [bp+arg_6] + mov ax, [bp+var_10] + mov [bp+arg_6], ax + +loc_C2B0: ; CODE XREF: sub_C247+4Cj + cmp [bp+arg_0], 0 + jge short loc_C2EE + cmp [bp+arg_4], 0 + jl loc_C772 + mov ax, [bp+arg_6] + sub ax, di + mov bx, [bp+arg_4] + sub bx, [bp+arg_0] + cwd + idiv bx + mov [bp+var_18], ax + ; Hack (fild [bp+var_18]) + db 0cdh + db 03bh + db 046h + db 0e8h + xor ax, ax + sub ax, [bp+arg_0] + mov [bp+var_18], ax + ; Hack (fild [bp+var_18]) + db 0cdh + db 03bh + db 046h + db 0e8h + ; Hack (fmulp st(1), st) + db 0cdh + db 03ah + db 0c9h + call sub_1C1B + add di, ax + mov [bp+arg_0], 0 + +loc_C2EE: ; CODE XREF: sub_C247+6Dj + cmp [bp+arg_4], 27Fh + jle short loc_C330 + cmp [bp+arg_0], 27Fh + jg loc_C772 + mov ax, [bp+arg_6] + sub ax, di + mov bx, [bp+arg_4] + sub bx, [bp+arg_0] + cwd + idiv bx + mov [bp+var_18], ax + ; Hack (fild [bp+var_18]) + db 0cdh + db 03bh + db 046h + db 0e8h + mov ax, [bp+arg_4] + add ax, 0FD81h + mov [bp+var_18], ax + ; Hack (fild [bp+var_18]) + db 0cdh + db 03bh + db 046h + db 0e8h + ; Hack (fmulp st(1), st) + db 0cdh + db 03ah + db 0c9h + call sub_1C1B + sub [bp+arg_6], ax + mov [bp+arg_4], 27Fh + +loc_C330: ; CODE XREF: sub_C247+ACj + or di, di + jge short loc_C369 + cmp [bp+arg_6], 0 + jl loc_C772 + mov ax, [bp+arg_4] + sub ax, [bp+arg_0] + mov bx, [bp+arg_6] + sub bx, di + cwd + idiv bx + mov [bp+var_18], ax + ; Hack (fild [bp+var_18]) + db 0cdh + db 03bh + db 046h + db 0e8h + xor ax, ax + sub ax, di + mov [bp+var_18], ax + ; Hack (fild [bp+var_18]) + db 0cdh + db 03bh + db 046h + db 0e8h + ; Hack (fmulp st(1), st) + db 0cdh + db 03ah + db 0c9h + call sub_1C1B + add [bp+arg_0], ax + xor di, di + +loc_C369: ; CODE XREF: sub_C247+EBj + cmp [bp+arg_6], 18Fh + jle short loc_C3AA + cmp di, 18Fh + jg loc_C772 + mov ax, [bp+arg_4] + sub ax, [bp+arg_0] + mov bx, [bp+arg_6] + sub bx, di + cwd + idiv bx + mov [bp+var_18], ax + ; Hack (fild [bp+var_18]) + db 0cdh + db 03bh + db 046h + db 0e8h + mov ax, [bp+arg_6] + add ax, 0FE71h + mov [bp+var_18], ax + ; Hack (fild [bp+var_18]) + db 0cdh + db 03bh + db 046h + db 0e8h + ; Hack (fmulp st(1), st) + db 0cdh + db 03ah + db 0c9h + call sub_1C1B + sub [bp+arg_4], ax + mov [bp+arg_6], 18Fh + +loc_C3AA: ; CODE XREF: sub_C247+127j + cmp [bp+arg_6], 0 + jge short loc_C3E1 + mov ax, [bp+arg_4] + sub ax, [bp+arg_0] + mov bx, [bp+arg_6] + sub bx, di + cwd + idiv bx + mov [bp+var_18], ax + ; Hack (fild [bp+var_18]) + db 0cdh + db 03bh + db 046h + db 0e8h + xor ax, ax + sub ax, [bp+arg_6] + mov [bp+var_18], ax + ; Hack (fild [bp+var_18]) + db 0cdh + db 03bh + db 046h + db 0e8h + ; Hack (fmulp st(1), st) + db 0cdh + db 03ah + db 0c9h + call sub_1C1B + add [bp+arg_4], ax + mov [bp+arg_6], 0 + +loc_C3E1: ; CODE XREF: sub_C247+167j + cmp di, 18Fh + jle short loc_C415 + mov ax, [bp+arg_4] + sub ax, [bp+arg_0] + mov bx, [bp+arg_6] + sub bx, di + cwd + idiv bx + mov [bp+var_18], ax + ; Hack (fild [bp+var_18]) + db 0cdh + db 03bh + db 046h + db 0e8h + lea ax, [di-18Fh] + mov [bp+var_18], ax + ; Hack (fild [bp+var_18]) + db 0cdh + db 03bh + db 046h + db 0e8h + ; Hack (fmulp st(1), st) + db 0cdh + db 03ah + db 0c9h + call sub_1C1B + sub [bp+arg_0], ax + mov di, 18Fh + +loc_C415: ; CODE XREF: sub_C247+19Ej + mov ax, [bp+arg_4] + mov word_1366C, ax + mov ax, [bp+arg_6] + mov word_1366E, ax + mov ax, [bp+arg_0] + mov [bp+var_4], ax + mov [bp+var_6], di + cmp di, [bp+arg_6] + jge short loc_C434 + mov ax, 1 + jmp short loc_C437 +; --------------------------------------------------------------------------- + +loc_C434: ; CODE XREF: sub_C247+1E6j + mov ax, 0FFFFh + +loc_C437: ; CODE XREF: sub_C247+1EBj + mov [bp+var_E], ax + mov ax, [bp+arg_4] + sub ax, [bp+arg_0] + mov [bp+var_8], ax + mov ax, [bp+arg_6] + sub ax, di + imul [bp+var_E] + mov [bp+var_A], ax + mov [bp+var_16], 0 + mov ax, [bp+var_4] + sar ax, 3 + mov [bp+var_12], ax + mov ax, [bp+var_6] + mov [bp+var_14], ax + cmp byte_129AA, 0 + jnz short loc_C471 + push [bp+arg_8] + push cs + call near ptr sub_B976 + pop cx + +loc_C471: ; CODE XREF: sub_C247+220j + mov ax, [bp+var_8] + cmp ax, [bp+var_A] + jle loc_C5A5 + sar ax, 1 + mov [bp+var_C], ax + mov [bp+var_2], 0 + jmp loc_C58F +; --------------------------------------------------------------------------- + +loc_C488: ; CODE XREF: sub_C247+34Ej + mov ax, [bp+var_4] + sar ax, 3 + cmp ax, [bp+var_12] + jnz short loc_C49D + mov ax, [bp+var_14] + cmp ax, [bp+var_6] + jz loc_C552 + +loc_C49D: ; CODE XREF: sub_C247+24Aj + mov ax, [bp+var_14] + imul ax, 50h + add ax, [bp+var_12] + mov si, ax + cmp byte_129AA, 0 + jnz short loc_C4C3 + les bx, dword_13672 + add bx, si + mov ax, [bp+var_16] + mov es:[bx], ax + mov [bp+var_16], 0 + jmp loc_C543 +; --------------------------------------------------------------------------- + +loc_C4C3: ; CODE XREF: sub_C247+266j + dec si + push 1 + push cs + call near ptr sub_B943 + les bx, dword_13672 + add bx, si + mov eax, es:[bx] + mov [bp+var_28], eax + les bx, dword_13676 + add bx, si + mov eax, es:[bx] + mov [bp+var_24], eax + les bx, dword_1367A + add bx, si + mov eax, es:[bx] + mov [bp+var_20], eax + les bx, dword_1367E + add bx, si + mov eax, es:[bx] + mov [bp+var_1C], eax + push 0 + push cs + call near ptr sub_B943 + add sp, 4 + les bx, dword_13672 + add bx, si + mov eax, [bp+var_28] + mov es:[bx], eax + les bx, dword_13676 + add bx, si + mov eax, [bp+var_24] + mov es:[bx], eax + les bx, dword_1367A + add bx, si + mov eax, [bp+var_20] + mov es:[bx], eax + les bx, dword_1367E + add bx, si + mov eax, [bp+var_1C] + mov es:[bx], eax + +loc_C543: ; CODE XREF: sub_C247+279j + mov ax, [bp+var_6] + mov [bp+var_14], ax + mov ax, [bp+var_4] + sar ax, 3 + mov [bp+var_12], ax + +loc_C552: ; CODE XREF: sub_C247+252j + mov cl, byte ptr [bp+var_4] + and cl, 7 + mov ax, word_129AB + shr ax, cl + or [bp+var_16], ax + mov al, byte ptr [bp+var_4] + and al, 7 + mov cl, 10h + sub cl, al + mov ax, word_129AB + shl ax, cl + or [bp+var_16], ax + mov ax, [bp+var_A] + sub [bp+var_C], ax + inc [bp+var_4] + cmp [bp+var_C], 0 + jge short loc_C58C + mov ax, [bp+var_8] + add [bp+var_C], ax + mov ax, [bp+var_E] + add [bp+var_6], ax + +loc_C58C: ; CODE XREF: sub_C247+337j + inc [bp+var_2] + +loc_C58F: ; CODE XREF: sub_C247+23Ej + mov ax, [bp+var_2] + cmp ax, [bp+var_8] + jle loc_C488 + cmp byte_129AA, 0 + jz loc_C767 + jmp loc_C6CF +; --------------------------------------------------------------------------- + +loc_C5A5: ; CODE XREF: sub_C247+230j + mov ax, [bp+var_A] + sar ax, 1 + mov [bp+var_C], ax + mov [bp+var_2], 0 + jmp loc_C6BC +; --------------------------------------------------------------------------- + +loc_C5B5: ; CODE XREF: sub_C247+47Bj + mov ax, [bp+var_4] + sar ax, 3 + cmp ax, [bp+var_12] + jnz short loc_C5CA + mov ax, [bp+var_14] + cmp ax, [bp+var_6] + jz loc_C67F + +loc_C5CA: ; CODE XREF: sub_C247+377j + mov ax, [bp+var_14] + imul ax, 50h + add ax, [bp+var_12] + mov si, ax + cmp byte_129AA, 0 + jnz short loc_C5F0 + les bx, dword_13672 + add bx, si + mov ax, [bp+var_16] + mov es:[bx], ax + mov [bp+var_16], 0 + jmp loc_C670 +; --------------------------------------------------------------------------- + +loc_C5F0: ; CODE XREF: sub_C247+393j + dec si + push 1 + push cs + call near ptr sub_B943 + les bx, dword_13672 + add bx, si + mov eax, es:[bx] + mov [bp+var_28], eax + les bx, dword_13676 + add bx, si + mov eax, es:[bx] + mov [bp+var_24], eax + les bx, dword_1367A + add bx, si + mov eax, es:[bx] + mov [bp+var_20], eax + les bx, dword_1367E + add bx, si + mov eax, es:[bx] + mov [bp+var_1C], eax + push 0 + push cs + call near ptr sub_B943 + add sp, 4 + les bx, dword_13672 + add bx, si + mov eax, [bp+var_28] + mov es:[bx], eax + les bx, dword_13676 + add bx, si + mov eax, [bp+var_24] + mov es:[bx], eax + les bx, dword_1367A + add bx, si + mov eax, [bp+var_20] + mov es:[bx], eax + les bx, dword_1367E + add bx, si + mov eax, [bp+var_1C] + mov es:[bx], eax + +loc_C670: ; CODE XREF: sub_C247+3A6j + mov ax, [bp+var_6] + mov [bp+var_14], ax + mov ax, [bp+var_4] + sar ax, 3 + mov [bp+var_12], ax + +loc_C67F: ; CODE XREF: sub_C247+37Fj + mov cl, byte ptr [bp+var_4] + and cl, 7 + mov ax, word_129AB + shr ax, cl + or [bp+var_16], ax + mov al, byte ptr [bp+var_4] + and al, 7 + mov cl, 10h + sub cl, al + mov ax, word_129AB + shl ax, cl + or [bp+var_16], ax + mov ax, [bp+var_8] + sub [bp+var_C], ax + mov ax, [bp+var_E] + add [bp+var_6], ax + cmp [bp+var_C], 0 + jge short loc_C6B9 + mov ax, [bp+var_A] + add [bp+var_C], ax + inc [bp+var_4] + +loc_C6B9: ; CODE XREF: sub_C247+467j + inc [bp+var_2] + +loc_C6BC: ; CODE XREF: sub_C247+36Bj + mov ax, [bp+var_2] + cmp ax, [bp+var_A] + jle loc_C5B5 + cmp byte_129AA, 0 + jz loc_C767 + +loc_C6CF: ; CODE XREF: sub_C247+35Bj + mov ax, [bp+var_4] + sar ax, 3 + mov dx, [bp+var_6] + shl dx, 6 + add ax, dx + mov dx, [bp+var_6] + shl dx, 4 + add ax, dx + dec ax + mov si, ax + push 1 + push cs + call near ptr sub_B943 + les bx, dword_13672 + add bx, si + mov eax, es:[bx] + mov [bp+var_28], eax + les bx, dword_13676 + add bx, si + mov eax, es:[bx] + mov [bp+var_24], eax + les bx, dword_1367A + add bx, si + mov eax, es:[bx] + mov [bp+var_20], eax + les bx, dword_1367E + add bx, si + mov eax, es:[bx] + mov [bp+var_1C], eax + push 0 + push cs + call near ptr sub_B943 + add sp, 4 + les bx, dword_13672 + add bx, si + mov eax, [bp+var_28] + mov es:[bx], eax + les bx, dword_13676 + add bx, si + mov eax, [bp+var_24] + mov es:[bx], eax + les bx, dword_1367A + add bx, si + mov eax, [bp+var_20] + mov es:[bx], eax + les bx, dword_1367E + add bx, si + mov eax, [bp+var_1C] + mov es:[bx], eax + +loc_C767: ; CODE XREF: sub_C247+357j + ; sub_C247+484j + cmp byte_129AA, 0 + jnz short loc_C772 + push cs + call near ptr sub_BA0A + +loc_C772: ; CODE XREF: sub_C247+43j sub_C247+73j ... + pop di + pop si + leave + retf +sub_C247 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_C776 proc far ; CODE XREF: sub_C948+7Ap sub_C948+97p + +var_E = dword ptr -0Eh +var_A = byte ptr -0Ah +var_9 = byte ptr -9 +var_8 = word ptr -8 +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch +arg_8 = word ptr 0Eh + + enter 0Eh, 0 + push si + push di + mov si, [bp+arg_2] + mov di, [bp+arg_6] + mov ax, [bp+arg_0] + cmp ax, [bp+arg_4] + jle short loc_C799 + mov [bp+var_8], ax + mov ax, [bp+arg_4] + mov [bp+arg_0], ax + mov ax, [bp+var_8] + mov [bp+arg_4], ax + +loc_C799: ; CODE XREF: sub_C776+12j + cmp si, di + jle short loc_C7A5 + mov [bp+var_8], si + mov si, di + mov di, [bp+var_8] + +loc_C7A5: ; CODE XREF: sub_C776+25j + cmp [bp+arg_0], 0 + jge short loc_C7B8 + cmp [bp+arg_4], 0 + jl loc_C88D + mov [bp+arg_0], 0 + +loc_C7B8: ; CODE XREF: sub_C776+33j + cmp [bp+arg_4], 27Fh + jle short loc_C7CD + cmp [bp+arg_0], 27Fh + jg loc_C88D + mov [bp+arg_4], 27Fh + +loc_C7CD: ; CODE XREF: sub_C776+47j + or si, si + jge short loc_C7D9 + or di, di + jl loc_C88D + xor si, si + +loc_C7D9: ; CODE XREF: sub_C776+59j + cmp di, 18Fh + jle short loc_C7EA + cmp si, 18Fh + jg loc_C88D + mov di, 18Fh + +loc_C7EA: ; CODE XREF: sub_C776+67j + push [bp+arg_8] + push cs + call near ptr sub_B976 + pop cx + mov ax, si + imul ax, 50h + mov dx, [bp+arg_0] + sar dx, 3 + add ax, dx + mov word ptr [bp+var_E+2], 0A800h + mov word ptr [bp+var_E], ax + mov [bp+var_4], si + jmp short loc_C884 +; --------------------------------------------------------------------------- + +loc_C80C: ; CODE XREF: sub_C776+111j + mov ax, [bp+arg_4] + sar ax, 3 + mov dx, [bp+arg_0] + sar dx, 3 + sub ax, dx + mov [bp+var_6], ax + mov cl, byte ptr [bp+arg_0] + and cl, 7 + mov ax, 0FFh + sar ax, cl + mov [bp+var_9], al + mov al, byte ptr [bp+arg_4] + and al, 7 + mov cl, 7 + sub cl, al + mov al, 0FFh + shl al, cl + mov [bp+var_A], al + cmp [bp+var_6], 0 + jnz short loc_C84C + mov al, [bp+var_9] + and al, [bp+var_A] + les bx, [bp+var_E] + jmp short loc_C87A +; --------------------------------------------------------------------------- + +loc_C84C: ; CODE XREF: sub_C776+C9j + les bx, [bp+var_E] + mov al, [bp+var_9] + mov es:[bx], al + mov [bp+var_2], 1 + jmp short loc_C869 +; --------------------------------------------------------------------------- + +loc_C85C: ; CODE XREF: sub_C776+F9j + les bx, [bp+var_E] + add bx, [bp+var_2] + mov byte ptr es:[bx], 0FFh + inc [bp+var_2] + +loc_C869: ; CODE XREF: sub_C776+E4j + mov ax, [bp+var_2] + cmp ax, [bp+var_6] + jl short loc_C85C + les bx, [bp+var_E] + add bx, [bp+var_6] + mov al, [bp+var_A] + +loc_C87A: ; CODE XREF: sub_C776+D4j + mov es:[bx], al + add word ptr [bp+var_E], 50h ; 'P' + inc [bp+var_4] + +loc_C884: ; CODE XREF: sub_C776+94j + cmp [bp+var_4], di + jle short loc_C80C + push cs + call near ptr sub_BA0A + +loc_C88D: ; CODE XREF: sub_C776+39j sub_C776+4Ej ... + pop di + pop si + leave + retf +sub_C776 endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + mov di, [bp+6] + mov si, [bp+0Eh] + push si + push word ptr [bp+8] + push word ptr [bp+0Ah] + push di + push cs + call near ptr sub_C028 + push si + push word ptr [bp+0Ch] + push word ptr [bp+8] + push di + push cs + call near ptr sub_C13B + push si + push word ptr [bp+0Ch] + push word ptr [bp+8] + push word ptr [bp+0Ah] + push cs + call near ptr sub_C13B + push si + push word ptr [bp+0Ch] + push word ptr [bp+0Ah] + push di + push cs + call near ptr sub_C028 + add sp, 20h + pop di + pop si + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_C8D5 proc far ; CODE XREF: sub_C948+56p sub_C948+ADp + +arg_0 = word ptr 6 +arg_2 = dword ptr 8 + + push bp + mov bp, sp + push si + push di + xor cx, cx + mov ax, [bp+arg_0] + mov bx, 40h ; '@' + cwd + idiv bx + mov bx, 8 + cwd + idiv bx + mov si, dx + jmp short loc_C937 +; --------------------------------------------------------------------------- + +loc_C8EF: ; CODE XREF: sub_C8D5+69j + les bx, [bp+arg_2] + mov al, es:[bx] + mov ah, 0 + mov bx, ax + test byte ptr [bx+1013h], 4 + jz short loc_C92F + mov bx, word ptr [bp+arg_2] + mov al, es:[bx] + cbw + shl ax, 8 + mov dl, es:[bx] + mov dh, 0 + add ax, dx + mov di, ax + inc word ptr [bp+arg_2] + inc word ptr [bp+arg_2] + cmp di, 8540h + jb short loc_C925 + cmp di, 869Eh + jbe short loc_C92A + +loc_C925: ; CODE XREF: sub_C8D5+48j + add cx, 10h + jmp short loc_C935 +; --------------------------------------------------------------------------- + +loc_C92A: ; CODE XREF: sub_C8D5+4Ej + add cx, 8 + jmp short loc_C935 +; --------------------------------------------------------------------------- + +loc_C92F: ; CODE XREF: sub_C8D5+29j + add cx, 8 + inc word ptr [bp+arg_2] + +loc_C935: ; CODE XREF: sub_C8D5+53j sub_C8D5+58j + add cx, si + +loc_C937: ; CODE XREF: sub_C8D5+18j + les bx, [bp+arg_2] + cmp byte ptr es:[bx], 0 + jnz short loc_C8EF + mov ax, cx + sub ax, si + pop di + pop si + pop bp + retf +sub_C8D5 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_C948 proc far ; CODE XREF: sub_A92C+1EP sub_A96A+44P ... + +var_3A = byte ptr -3Ah +var_1A = word ptr -1Ah +var_18 = word ptr -18h +var_16 = word ptr -16h +var_14 = word ptr -14h +var_12 = word ptr -12h +var_10 = word ptr -10h +var_E = word ptr -0Eh +var_C = word ptr -0Ch +var_A = word ptr -0Ah +var_8 = dword ptr -8 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = dword ptr 0Ch + + enter 3Ah, 0 + push si + push di + mov si, [bp+arg_0] + mov ax, [bp+arg_4] + mov bx, 10h + cwd + idiv bx + mov bx, 4 + cwd + idiv bx + mov [bp+var_E], dx + mov ax, [bp+arg_4] + mov bx, 40h ; '@' + cwd + idiv bx + mov bx, 8 + cwd + idiv bx + mov [bp+var_10], dx + mov ax, [bp+arg_4] + and ax, 200h + mov [bp+var_12], ax + mov ax, [bp+arg_4] + and ax, 400h + mov [bp+var_14], ax + mov ax, [bp+arg_4] + and ax, 800h + mov [bp+var_16], ax + cmp [bp+var_12], 0 + jz short loc_C9E7 + push large [bp+arg_6] + push [bp+arg_4] + push cs + call near ptr sub_C8D5 + add sp, 6 + mov [bp+var_18], ax + cmp [bp+var_14], 0 + jz short loc_C9CA + push 0 + mov ax, [bp+arg_2] + add ax, 11h + push ax + mov ax, si + add ax, [bp+var_18] + dec ax + push ax + push [bp+arg_2] + push si + push cs + call near ptr sub_C776 + add sp, 0Ah + jmp short loc_C9FE +; --------------------------------------------------------------------------- + +loc_C9CA: ; CODE XREF: sub_C948+63j + push 0 + mov ax, [bp+arg_2] + add ax, 0Fh + push ax + mov ax, si + add ax, [bp+var_18] + dec ax + push ax + push [bp+arg_2] + push si + push cs + call near ptr sub_C776 + add sp, 0Ah + jmp short loc_CA16 +; --------------------------------------------------------------------------- + +loc_C9E7: ; CODE XREF: sub_C948+4Cj + cmp [bp+var_14], 0 + jz short loc_CA16 + push large [bp+arg_6] + push [bp+arg_4] + push cs + call near ptr sub_C8D5 + add sp, 6 + mov [bp+var_18], ax + +loc_C9FE: ; CODE XREF: sub_C948+80j + push 7 + mov ax, [bp+arg_2] + add ax, 11h + push ax + mov ax, si + add ax, [bp+var_18] + dec ax + push ax + push si + push cs + call near ptr sub_C028 + add sp, 8 + +loc_CA16: ; CODE XREF: sub_C948+9Dj sub_C948+A3j + push [bp+arg_4] + push cs + call near ptr sub_B976 + pop cx + mov dx, 68h ; 'h' + mov al, 0Bh + out dx, al + jmp loc_CC4E +; --------------------------------------------------------------------------- + +loc_CA27: ; CODE XREF: sub_C948+30Dj + mov ax, [bp+arg_2] + imul ax, 50h + push ax + mov ax, si + mov bx, 8 + cwd + idiv bx + pop dx + add dx, ax + mov word ptr [bp+var_8+2], 0A800h + mov word ptr [bp+var_8], dx + mov ax, si + cwd + idiv bx + mov [bp+var_C], dx + les bx, [bp+arg_6] + mov al, es:[bx] + mov ah, 0 + mov bx, ax + test byte ptr [bx+1013h], 4 + jz short loc_CA7C + mov bx, word ptr [bp+arg_6] + mov al, es:[bx] + cbw + shl ax, 8 + mov dl, es:[bx+1] + mov dh, 0 + add ax, dx + push ax + call sub_9E1D + pop cx + mov [bp+var_2], ax + add word ptr [bp+arg_6], 2 + jmp short loc_CAC2 +; --------------------------------------------------------------------------- + +loc_CA7C: ; CODE XREF: sub_C948+110j + les bx, [bp+arg_6] + mov al, es:[bx] + mov ah, 0 + mov bx, ax + test byte ptr [bx+1013h], 3 + jz short loc_CA9A + mov bx, word ptr [bp+arg_6] + mov al, es:[bx] + mov ah, 0 + add ax, 2980h + jmp short loc_CAB5 +; --------------------------------------------------------------------------- + +loc_CA9A: ; CODE XREF: sub_C948+143j + les bx, [bp+arg_6] + mov al, es:[bx] + cbw + mov bx, ax + test byte ptr [bx+0C3Bh], 5Eh + jz short loc_CABA + mov bx, word ptr [bp+arg_6] + mov al, es:[bx] + mov ah, 0 + add ax, 2900h + +loc_CAB5: ; CODE XREF: sub_C948+150j + mov [bp+var_2], ax + jmp short loc_CABF +; --------------------------------------------------------------------------- + +loc_CABA: ; CODE XREF: sub_C948+160j + mov [bp+var_2], 2B21h + +loc_CABF: ; CODE XREF: sub_C948+170j + inc word ptr [bp+arg_6] + +loc_CAC2: ; CODE XREF: sub_C948+132j + mov al, byte ptr [bp+var_2] + and al, 0FFh + mov dx, 0A1h ; '' + out dx, al ; Interrupt Controller #2, 8259A + mov ax, [bp+var_2] + shr ax, 8 + sub al, 20h ; ' ' + mov dx, 0A3h ; '' + out dx, al ; Interrupt Controller #2, 8259A + cmp [bp+var_2], 2921h + jb short loc_CB23 + cmp [bp+var_2], 2B7Eh + ja short loc_CB23 + cmp si, 278h + jg loc_CC59 + mov [bp+var_1A], 0 + jmp short loc_CB16 +; --------------------------------------------------------------------------- + +loc_CAF4: ; CODE XREF: sub_C948+1D2j + mov al, byte ptr [bp+var_1A] + or al, 20h + mov dx, 0A5h ; '' + out dx, al ; Interrupt Controller #2, 8259A + mov dx, 0A9h ; '' + in al, dx ; Interrupt Controller #2, 8259A + mov ah, 0 + shl ax, 8 + mov bx, [bp+var_1A] + add bx, bx + lea dx, [bp+var_3A] + add bx, dx + mov ss:[bx], ax + inc [bp+var_1A] + +loc_CB16: ; CODE XREF: sub_C948+1AAj + cmp [bp+var_1A], 10h + jl short loc_CAF4 + mov [bp+var_A], 0 + jmp short loc_CB79 +; --------------------------------------------------------------------------- + +loc_CB23: ; CODE XREF: sub_C948+194j + ; sub_C948+19Bj + cmp si, 270h + jg loc_CC59 + mov [bp+var_1A], 0 + jmp short loc_CB6E +; --------------------------------------------------------------------------- + +loc_CB32: ; CODE XREF: sub_C948+22Aj + mov al, byte ptr [bp+var_1A] + or al, 20h + mov dx, 0A5h ; '' + out dx, al ; Interrupt Controller #2, 8259A + mov dx, 0A9h ; '' + in al, dx ; Interrupt Controller #2, 8259A + mov ah, 0 + shl ax, 8 + mov bx, [bp+var_1A] + add bx, bx + lea dx, [bp+var_3A] + add bx, dx + mov ss:[bx], ax + mov dx, 0A5h ; '' + mov al, byte ptr [bp+var_1A] + out dx, al ; Interrupt Controller #2, 8259A + mov dx, 0A9h ; '' + in al, dx ; Interrupt Controller #2, 8259A + mov ah, 0 + mov bx, [bp+var_1A] + add bx, bx + lea dx, [bp+var_3A] + add bx, dx + add ss:[bx], ax + inc [bp+var_1A] + +loc_CB6E: ; CODE XREF: sub_C948+1E8j + cmp [bp+var_1A], 10h + jl short loc_CB32 + mov [bp+var_A], 1 + +loc_CB79: ; CODE XREF: sub_C948+1D9j + mov [bp+var_1A], 0 + jmp loc_CC35 +; --------------------------------------------------------------------------- + +loc_CB81: ; CODE XREF: sub_C948+2F1j + mov bx, [bp+var_1A] + add bx, bx + lea ax, [bp+var_3A] + add bx, ax + mov ax, ss:[bx] + mov [bp+var_4], ax + mov ax, [bp+var_E] + cmp ax, 1 + jz short loc_CBA5 + cmp ax, 2 + jz short loc_CBBB + cmp ax, 3 + jz short loc_CBB1 + jmp short loc_CBD1 +; --------------------------------------------------------------------------- + +loc_CBA5: ; CODE XREF: sub_C948+24Fj + mov di, [bp+var_4] + mov ax, di + add ax, ax + or [bp+var_4], ax + jmp short loc_CBD1 +; --------------------------------------------------------------------------- + +loc_CBB1: ; CODE XREF: sub_C948+259j + mov di, [bp+var_4] + mov ax, di + add ax, ax + or [bp+var_4], ax + +loc_CBBB: ; CODE XREF: sub_C948+254j + mov di, [bp+var_4] + mov ax, di + add ax, ax + or [bp+var_4], ax + xor di, [bp+var_4] + mov ax, di + add ax, ax + not ax + and [bp+var_4], ax + +loc_CBD1: ; CODE XREF: sub_C948+25Bj + ; sub_C948+267j + cmp [bp+var_16], 0 + jz short loc_CBE8 + cmp [bp+var_A], 0 + jz short loc_CBE3 + xor [bp+var_4], 0FFFFh + jmp short loc_CBE8 +; --------------------------------------------------------------------------- + +loc_CBE3: ; CODE XREF: sub_C948+293j + xor [bp+var_4], 0FF00h + +loc_CBE8: ; CODE XREF: sub_C948+28Dj + ; sub_C948+299j + cmp [bp+var_C], 0 + jz short loc_CC1B + mov cl, byte ptr [bp+var_C] + add cl, 8 + mov ax, [bp+var_4] + shr ax, cl + les bx, [bp+var_8] + mov es:[bx], al + mov ax, [bp+var_4] + mov cl, byte ptr [bp+var_C] + shr ax, cl + mov es:[bx+1], al + mov cl, 8 + sub cl, byte ptr [bp+var_C] + mov al, byte ptr [bp+var_4] + shl al, cl + mov es:[bx+2], al + jmp short loc_CC2E +; --------------------------------------------------------------------------- + +loc_CC1B: ; CODE XREF: sub_C948+2A4j + mov ax, [bp+var_4] + shr ax, 8 + les bx, [bp+var_8] + mov es:[bx], al + mov al, byte ptr [bp+var_4] + mov es:[bx+1], al + +loc_CC2E: ; CODE XREF: sub_C948+2D1j + add word ptr [bp+var_8], 50h ; 'P' + inc [bp+var_1A] + +loc_CC35: ; CODE XREF: sub_C948+236j + cmp [bp+var_1A], 10h + jl loc_CB81 + cmp [bp+var_A], 0 + jz short loc_CC46 + add si, 8 + +loc_CC46: ; CODE XREF: sub_C948+2F9j + mov ax, [bp+var_10] + add ax, 8 + add si, ax + +loc_CC4E: ; CODE XREF: sub_C948+DCj + les bx, [bp+arg_6] + cmp byte ptr es:[bx], 0 + jnz loc_CA27 + +loc_CC59: ; CODE XREF: sub_C948+1A1j + ; sub_C948+1DFj + mov dx, 68h ; 'h' + mov al, 0Ah + out dx, al + push cs + call near ptr sub_BA0A + pop di + pop si + leave + retf +sub_C948 endp + +; --------------------------------------------------------------------------- + enter 156h, 0 + push si + push di + mov di, [bp+6] + mov ax, [bp+0Ah] + sub ax, di + mov bx, 8 + cwd + idiv bx + mov si, ax + mov ax, [bp+0Ch] + sub ax, [bp+8] + mov [bp-2], ax + mov dword ptr [bp-6], 0A8000000h + mov dword ptr [bp-0Ah], 0B0000000h + mov dword ptr [bp-0Eh], 0B8000000h + mov dword ptr [bp-12h], 0E0000000h + mov al, byte_13671 + xor al, 1 + mov [bp-13h], al + mov ax, di + cwd + idiv bx + mov dx, [bp+8] + imul dx, 50h + add ax, dx + add [bp-6], ax + mov ax, di + cwd + idiv bx + mov dx, [bp+8] + imul dx, 50h + add ax, dx + add [bp-0Ah], ax + mov ax, di + cwd + idiv bx + mov dx, [bp+8] + imul dx, 50h + add ax, dx + add [bp-0Eh], ax + mov ax, di + cwd + idiv bx + mov dx, [bp+8] + imul dx, 50h + add ax, dx + add [bp-12h], ax + mov word ptr [bp-16h], 0 + jmp loc_CD9B +; --------------------------------------------------------------------------- + +loc_CCF6: ; CODE XREF: seg006:1571j + push si + push large dword ptr [bp-6] + push ss + lea ax, [bp-66h] + push ax + call _memcpy + push si + push large dword ptr [bp-0Ah] + push ss + lea ax, [bp-0B6h] + push ax + call _memcpy + push si + push large dword ptr [bp-0Eh] + push ss + lea ax, [bp-106h] + push ax + call _memcpy + push si + push large dword ptr [bp-12h] + push ss + lea ax, [bp-156h] + push ax + call _memcpy + mov dx, 0A6h ; '' + mov al, [bp-13h] + out dx, al ; Interrupt Controller #2, 8259A + push si + push ss + lea ax, [bp-66h] + push ax + push large dword ptr [bp-6] + call _memcpy + add sp, 32h + push si + push ss + lea ax, [bp-0B6h] + push ax + push large dword ptr [bp-0Ah] + call _memcpy + push si + push ss + lea ax, [bp-106h] + push ax + push large dword ptr [bp-0Eh] + call _memcpy + push si + push ss + lea ax, [bp-156h] + push ax + push large dword ptr [bp-12h] + call _memcpy + add sp, 1Eh + mov dx, 0A6h ; '' + mov al, byte_13671 + out dx, al ; Interrupt Controller #2, 8259A + add word ptr [bp-6], 50h ; 'P' + add word ptr [bp-0Ah], 50h ; 'P' + add word ptr [bp-0Eh], 50h ; 'P' + add word ptr [bp-12h], 50h ; 'P' + inc word ptr [bp-16h] + +loc_CD9B: ; CODE XREF: seg006:14C3j + mov ax, [bp-16h] + cmp ax, [bp-2] + jl loc_CCF6 + pop di + pop si + leave + retf +; --------------------------------------------------------------------------- + enter 164h, 0 + push si + push di + mov di, [bp+6] + mov ax, [bp+0Ah] + sub ax, di + mov bx, 8 + cwd + idiv bx + mov si, ax + mov ax, [bp+0Ch] + sub ax, [bp+8] + mov [bp-2], ax + mov dword ptr [bp-6], 0A8000000h + mov dword ptr [bp-0Ah], 0B0000000h + mov dword ptr [bp-0Eh], 0B8000000h + mov dword ptr [bp-12h], 0E0000000h + mov dword ptr [bp-16h], 0A8000000h + mov dword ptr [bp-1Ah], 0B0000000h + mov dword ptr [bp-1Eh], 0B8000000h + mov dword ptr [bp-22h], 0E0000000h + mov ax, di + cwd + idiv bx + mov dx, [bp+8] + imul dx, 50h + add ax, dx + add [bp-6], ax + mov ax, di + cwd + idiv bx + mov dx, [bp+8] + imul dx, 50h + add ax, dx + add [bp-0Ah], ax + mov ax, di + cwd + idiv bx + mov dx, [bp+8] + imul dx, 50h + add ax, dx + add [bp-0Eh], ax + mov ax, di + cwd + idiv bx + mov dx, [bp+8] + imul dx, 50h + add ax, dx + add [bp-12h], ax + mov ax, [bp+0Eh] + cwd + idiv bx + mov dx, [bp+10h] + imul dx, 50h + add ax, dx + add [bp-16h], ax + mov ax, [bp+0Eh] + cwd + idiv bx + mov dx, [bp+10h] + imul dx, 50h + add ax, dx + add [bp-1Ah], ax + mov ax, [bp+0Eh] + cwd + idiv bx + mov dx, [bp+10h] + imul dx, 50h + add ax, dx + add [bp-1Eh], ax + mov ax, [bp+0Eh] + cwd + idiv bx + mov dx, [bp+10h] + imul dx, 50h + add ax, dx + add [bp-22h], ax + mov word ptr [bp-24h], 0 + jmp loc_CF49 +; --------------------------------------------------------------------------- + +loc_CE94: ; CODE XREF: seg006:171Fj + push si + push large dword ptr [bp-6] + push ss + lea ax, [bp-74h] + push ax + call _memcpy + push si + push large dword ptr [bp-0Ah] + push ss + lea ax, [bp-0C4h] + push ax + call _memcpy + push si + push large dword ptr [bp-0Eh] + push ss + lea ax, [bp-114h] + push ax + call _memcpy + push si + push large dword ptr [bp-12h] + push ss + lea ax, [bp-164h] + push ax + call _memcpy + mov dx, 0A6h ; '' + mov al, [bp+14h] + out dx, al ; Interrupt Controller #2, 8259A + push si + push ss + lea ax, [bp-74h] + push ax + push large dword ptr [bp-16h] + call _memcpy + add sp, 32h + push si + push ss + lea ax, [bp-0C4h] + push ax + push large dword ptr [bp-1Ah] + call _memcpy + push si + push ss + lea ax, [bp-114h] + push ax + push large dword ptr [bp-1Eh] + call _memcpy + push si + push ss + lea ax, [bp-164h] + push ax + push large dword ptr [bp-22h] + call _memcpy + add sp, 1Eh + mov dx, 0A6h ; '' + mov al, [bp+12h] + out dx, al ; Interrupt Controller #2, 8259A + add word ptr [bp-6], 50h ; 'P' + add word ptr [bp-0Ah], 50h ; 'P' + add word ptr [bp-0Eh], 50h ; 'P' + add word ptr [bp-12h], 50h ; 'P' + add word ptr [bp-16h], 50h ; 'P' + add word ptr [bp-1Ah], 50h ; 'P' + add word ptr [bp-1Eh], 50h ; 'P' + add word ptr [bp-22h], 50h ; 'P' + inc word ptr [bp-24h] + +loc_CF49: ; CODE XREF: seg006:1661j + mov ax, [bp-24h] + cmp ax, [bp-2] + jl loc_CE94 + mov dx, 0A6h ; '' + mov al, byte_13671 + out dx, al ; Interrupt Controller #2, 8259A + pop di + pop si + leave + retf +; --------------------------------------------------------------------------- + enter 34h, 0 + push si + push di + push large 300000h + push ss + lea ax, [bp-34h] + push ax + call far ptr _memset + add sp, 8 + xor di, di + jmp loc_CFFD +; --------------------------------------------------------------------------- + +loc_CF7C: ; CODE XREF: seg006:17D0j + mov ax, di + add ax, ax + les bx, [bp+0Ch] + add bx, ax + cmp word ptr es:[bx], 0 + jnz short loc_CFBA + mov bx, di + imul bx, 3 + lea ax, [bp-34h] + add bx, ax + mov al, [bp+6] + mov ss:[bx], al + mov bx, di + imul bx, 3 + lea ax, [bp-33h] + add bx, ax + mov al, [bp+8] + mov ss:[bx], al + mov bx, di + imul bx, 3 + lea ax, [bp-32h] + add bx, ax + mov al, [bp+0Ah] + jmp short loc_CFF9 +; --------------------------------------------------------------------------- + +loc_CFBA: ; CODE XREF: seg006:1759j + mov bx, di + imul bx, 3 + lea ax, [bp-34h] + add bx, ax + mov si, di + imul si, 3 + mov al, [si+6EAh] + mov ss:[bx], al + mov bx, di + imul bx, 3 + lea ax, [bp-33h] + add bx, ax + mov si, di + imul si, 3 + mov al, [si+6EBh] + mov ss:[bx], al + mov bx, di + imul bx, 3 + lea ax, [bp-32h] + add bx, ax + mov si, di + imul si, 3 + mov al, [si+6ECh] + +loc_CFF9: ; CODE XREF: seg006:1788j + mov ss:[bx], al + inc di + +loc_CFFD: ; CODE XREF: seg006:1749j + cmp di, 10h + jl loc_CF7C + xor di, di + jmp loc_D0DA +; --------------------------------------------------------------------------- + +loc_D009: ; CODE XREF: seg006:18ADj + call sub_B334 + mov word ptr [bp-2], 0 + jmp loc_D0C8 +; --------------------------------------------------------------------------- + +loc_D016: ; CODE XREF: seg006:189Cj + mov word ptr [bp-4], 0 + jmp short loc_D085 +; --------------------------------------------------------------------------- + +loc_D01D: ; CODE XREF: seg006:1859j + mov bx, [bp-2] + imul bx, 3 + add bx, [bp-4] + lea ax, [bp-34h] + add bx, ax + mov al, ss:[bx] + mov bx, [bp-2] + imul bx, 3 + add bx, [bp-4] + cmp al, [bx+6EAh] + jz short loc_D082 + mov bx, [bp-2] + imul bx, 3 + add bx, [bp-4] + lea ax, [bp-34h] + add bx, ax + mov al, ss:[bx] + mov bx, [bp-2] + imul bx, 3 + add bx, [bp-4] + cmp al, [bx+6EAh] + jge short loc_D061 + mov al, 1 + jmp short loc_D063 +; --------------------------------------------------------------------------- + +loc_D061: ; CODE XREF: seg006:182Bj + mov al, 0FFh + +loc_D063: ; CODE XREF: seg006:182Fj + mov bx, [bp-2] + imul bx, 3 + add bx, [bp-4] + lea dx, [bp-34h] + add bx, dx + add al, ss:[bx] + mov bx, [bp-2] + imul bx, 3 + add bx, [bp-4] + add bx, dx + mov ss:[bx], al + +loc_D082: ; CODE XREF: seg006:180Bj + inc word ptr [bp-4] + +loc_D085: ; CODE XREF: seg006:17EBj + cmp word ptr [bp-4], 3 + jl short loc_D01D + mov bx, [bp-2] + imul bx, 3 + lea ax, [bp-32h] + add bx, ax + mov al, ss:[bx] + cbw + push ax + mov bx, [bp-2] + imul bx, 3 + lea ax, [bp-33h] + add bx, ax + mov al, ss:[bx] + cbw + push ax + mov bx, [bp-2] + imul bx, 3 + lea ax, [bp-34h] + add bx, ax + mov al, ss:[bx] + cbw + push ax + push word ptr [bp-2] + push cs + call near ptr sub_B955 + add sp, 8 + inc word ptr [bp-2] + +loc_D0C8: ; CODE XREF: seg006:17E3j + cmp word ptr [bp-2], 10h + jl loc_D016 + push word ptr [bp+10h] + call sub_9BF8 + pop cx + inc di + +loc_D0DA: ; CODE XREF: seg006:17D6j + cmp di, 10h + jl loc_D009 + pop di + pop si + leave + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_D0E5 proc far ; CODE XREF: seg006:194Ap sub_D1C0+7p + +inregs = REGS ptr -22h +var_12 = byte ptr -12h +segp = SREGS ptr -8 + + enter 22h, 0 + push si + push di + lea ax, [bp+var_12] + push ss + push ax + push ds + push offset aPal98Grb ; "pal98 grb" + mov cx, 0Ah + call SCOPY@ + push ss + lea ax, [bp+segp] + push ax ; segp + call _segread + add sp, 4 + mov byte ptr [bp+inregs+1], 52h ; 'R' + push ss + lea ax, [bp+segp] + push ax ; segregs + push ss + lea ax, [bp+inregs] + push ax ; outregs + push ss + push ax ; inregs + call _intdosx + add sp, 0Ch + mov bx, word ptr [bp+inregs+2] + sub bx, 2 + mov es, [bp+segp._es] + mov si, es:[bx] + +loc_D12D: ; CODE XREF: sub_D0E5+88j + mov es, si + cmp word ptr es:1, 0 + jz short loc_D156 + xor di, di + jmp short loc_D147 +; --------------------------------------------------------------------------- + +loc_D13B: ; CODE XREF: sub_D0E5+65j + mov es, si + mov al, es:[di+10h] + cmp al, [bp+di+var_12] + jnz short loc_D14C + inc di + +loc_D147: ; CODE XREF: sub_D0E5+54j + cmp di, 0Ah + jl short loc_D13B + +loc_D14C: ; CODE XREF: sub_D0E5+5Fj + cmp di, 0Ah + jnz short loc_D156 + lea ax, [si+1] + jmp short loc_D16F +; --------------------------------------------------------------------------- + +loc_D156: ; CODE XREF: sub_D0E5+50j sub_D0E5+6Aj + mov es, si + cmp byte ptr es:0, 4Dh ; 'M' + jz short loc_D164 + xor ax, ax + jmp short loc_D16F +; --------------------------------------------------------------------------- + +loc_D164: ; CODE XREF: sub_D0E5+79j + mov es, si + mov ax, es:3 + inc ax + add si, ax + jmp short loc_D12D +; --------------------------------------------------------------------------- + +loc_D16F: ; CODE XREF: sub_D0E5+6Fj sub_D0E5+7Dj + pop di + pop si + leave + retf +sub_D0E5 endp + +; --------------------------------------------------------------------------- + enter 4, 0 + push si + push di + push cs + call near ptr sub_D0E5 + mov di, ax + or di, di + jz short loc_D1B9 + mov [bp-2], di + mov word ptr [bp-4], 10h + xor si, si + jmp short loc_D1B0 +; --------------------------------------------------------------------------- + +loc_D18F: ; CODE XREF: seg006:1983j + les bx, [bp-4] + mov al, es:[bx+2] + cbw + push ax + mov al, es:[bx] + cbw + push ax + mov al, es:[bx+1] + cbw + push ax + push si + push cs + call near ptr sub_BA5E + add sp, 8 + add word ptr [bp-4], 3 + inc si + +loc_D1B0: ; CODE XREF: seg006:195Dj + cmp si, 10h + jl short loc_D18F + xor ax, ax + jmp short loc_D1BC +; --------------------------------------------------------------------------- + +loc_D1B9: ; CODE XREF: seg006:1951j + mov ax, 1 + +loc_D1BC: ; CODE XREF: seg006:1987j + pop di + pop si + leave + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_D1C0 proc far ; CODE XREF: sub_B6E9+47P + +var_4 = dword ptr -4 + + enter 4, 0 + push si + push di + push cs + call near ptr sub_D0E5 + mov di, ax + or di, di + jz short loc_D219 + mov word ptr [bp+var_4+2], di + mov word ptr [bp+var_4], 10h + xor si, si + jmp short loc_D210 +; --------------------------------------------------------------------------- + +loc_D1DC: ; CODE XREF: sub_D1C0+53j + mov bx, si + imul bx, 3 + mov al, [bx+6EBh] + les bx, [bp+var_4] + mov es:[bx], al + mov bx, si + imul bx, 3 + mov al, [bx+6EAh] + mov bx, word ptr [bp+var_4] + mov es:[bx+1], al + mov bx, si + imul bx, 3 + mov al, [bx+6ECh] + mov bx, word ptr [bp+var_4] + mov es:[bx+2], al + add word ptr [bp+var_4], 3 + inc si + +loc_D210: ; CODE XREF: sub_D1C0+1Aj + cmp si, 10h + jl short loc_D1DC + xor ax, ax + jmp short loc_D21C +; --------------------------------------------------------------------------- + +loc_D219: ; CODE XREF: sub_D1C0+Ej + mov ax, 1 + +loc_D21C: ; CODE XREF: sub_D1C0+57j + pop di + pop si + leave + retf +sub_D1C0 endp + +seg006 ends + +; --------------------------------------------------------------------------- +; =========================================================================== + +; Segment type: Pure code +seg007 segment byte public 'CODE' use16 + assume cs:seg007 + assume es:nothing, ss:nothing, ds:dseg, fs:nothing, gs:nothing + enter 10h, 0 + push si + push di + mov ax, [bp+6] + sar ax, 3 + mov dx, [bp+8] + shl dx, 6 + add ax, dx + mov dx, [bp+8] + shl dx, 4 + add ax, dx + mov si, ax + xor di, di + jmp loc_D2C8 +; --------------------------------------------------------------------------- + +loc_D243: ; CODE XREF: seg007:00ABj + push 0 + call sub_B943 + les bx, dword_13672 + add bx, si + mov eax, es:[bx] + mov [bp-10h], eax + les bx, dword_13676 + add bx, si + mov eax, es:[bx] + mov [bp-0Ch], eax + les bx, dword_1367A + add bx, si + mov eax, es:[bx] + mov [bp-8], eax + les bx, dword_1367E + add bx, si + mov eax, es:[bx] + mov [bp-4], eax + push 1 + call sub_B943 + add sp, 4 + les bx, dword_13672 + add bx, si + mov eax, [bp-10h] + mov es:[bx], eax + les bx, dword_13676 + add bx, si + mov eax, [bp-0Ch] + mov es:[bx], eax + les bx, dword_1367A + add bx, si + mov eax, [bp-8] + mov es:[bx], eax + les bx, dword_1367E + add bx, si + mov eax, [bp-4] + mov es:[bx], eax + add si, 50h ; 'P' + inc di + +loc_D2C8: ; CODE XREF: seg007:0020j + cmp di, 20h ; ' ' + jl loc_D243 + push 0 + call sub_B943 + pop cx + pop di + pop si + leave + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_D2DB proc far ; CODE XREF: sub_B6E9+4CP + push bp + mov bp, sp + mov dword_13672, 0A8000000h + mov dword_13676, 0B0000000h + mov dword_1367A, 0B8000000h + mov dword_1367E, 0E0000000h + pop bp + retf +sub_D2DB endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_D304 proc far ; CODE XREF: sub_D338+2Ap + push bp + mov bp, sp + call sub_12D6 + mov ax, 0FFF0h + mov dx, 4A0h + out dx, ax + mov ax, 0FFh + mov dx, 4A2h + out dx, ax + mov ax, 3100h + mov dx, 4A4h + out dx, ax + mov ax, 0FFFFh + mov dx, 4A8h + out dx, ax + mov ax, 0 + mov dx, 4ACh + out dx, ax + mov ax, 0Fh + mov dx, 4AEh + out dx, ax + pop bp + retf +sub_D304 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_D338 proc far ; CODE XREF: sub_A66A+2CP sub_A66A+3DP ... + +var_A = word ptr -0Ah +var_8 = word ptr -8 +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch + + enter 0Ah, 0 + push si + push di + mov si, [bp+arg_0] + mov di, si + add si, [bp+arg_4] + and di, 0FFF0h + mov ax, di + sar ax, 3 + mov dx, [bp+arg_2] + shl dx, 6 + add ax, dx + mov dx, [bp+arg_2] + shl dx, 4 + add ax, dx + mov [bp+var_6], ax + push cs + call near ptr sub_D304 + mov [bp+var_2], 0 + jmp short loc_D3B6 +; --------------------------------------------------------------------------- + +loc_D36C: ; CODE XREF: sub_D338+84j + mov [bp+var_4], di + mov ax, [bp+var_6] + mov [bp+var_A], ax + jmp short loc_D3AA +; --------------------------------------------------------------------------- + +loc_D377: ; CODE XREF: sub_D338+75j + push 1 + call sub_B943 + les bx, dword_13672 + add bx, [bp+var_A] + mov ax, es:[bx] + mov [bp+var_8], ax + push 0 + call sub_B943 + add sp, 4 + les bx, dword_13672 + add bx, [bp+var_A] + mov ax, [bp+var_8] + mov es:[bx], ax + add [bp+var_A], 2 + add [bp+var_4], 10h + +loc_D3AA: ; CODE XREF: sub_D338+3Dj + cmp [bp+var_4], si + jl short loc_D377 + add [bp+var_6], 50h ; 'P' + inc [bp+var_2] + +loc_D3B6: ; CODE XREF: sub_D338+32j + mov ax, [bp+var_2] + cmp ax, [bp+arg_6] + jl short loc_D36C + call sub_12EC + pop di + pop si + leave + retf +sub_D338 endp + +; --------------------------------------------------------------------------- + enter 4, 0 + push si + push di + mov di, [bp+0Ah] + mov ax, [bp+8] + imul ax, 50h + push ax + mov ax, [bp+6] + mov bx, 8 + cwd + idiv bx + pop dx + add dx, ax + mov si, dx + mov ax, di + mov bx, 40h ; '@' + cwd + idiv bx + shl ax, 2 + mov bx, ax + mov ax, [bx+1474h] + mov dx, [bx+1472h] + push ax + mov ax, di + mov bx, 40h ; '@' + push dx + cwd + idiv bx + imul dx, 281h + pop ax + add ax, dx + pop dx + mov [bp-2], dx + mov [bp-4], ax + xor cx, cx + jmp short loc_D481 +; --------------------------------------------------------------------------- + +loc_D416: ; CODE XREF: seg007:0264j + les bx, dword_13672 + add bx, si + mov eax, es:[bx] + mov dx, cx + shl dx, 2 + les bx, [bp-4] + add bx, dx + mov es:[bx+1], eax + les bx, dword_13676 + add bx, si + mov eax, es:[bx] + mov dx, cx + shl dx, 2 + les bx, [bp-4] + add bx, dx + mov es:[bx+81h], eax + les bx, dword_1367A + add bx, si + mov eax, es:[bx] + mov dx, cx + shl dx, 2 + les bx, [bp-4] + add bx, dx + mov es:[bx+101h], eax + les bx, dword_1367E + add bx, si + mov eax, es:[bx] + mov dx, cx + shl dx, 2 + les bx, [bp-4] + add bx, dx + mov es:[bx+181h], eax + add si, 50h ; 'P' + inc cx + +loc_D481: ; CODE XREF: seg007:01F4j + cmp cx, 20h ; ' ' + jl short loc_D416 + pop di + pop si + leave + retf +; --------------------------------------------------------------------------- + enter 0Eh, 0 + push si + push di + mov ax, [bp+8] + imul ax, 50h + push ax + mov ax, [bp+6] + mov bx, 8 + cwd + idiv bx + pop dx + add dx, ax + mov di, dx + mov ax, [bp+0Ah] + mov bx, 40h ; '@' + cwd + idiv bx + shl ax, 2 + mov bx, ax + mov ax, [bx+1474h] + mov dx, [bx+1472h] + push ax + mov ax, [bp+0Ah] + mov bx, 40h ; '@' + push dx + cwd + idiv bx + imul dx, 281h + pop ax + add ax, dx + pop dx + mov [bp-0Ch], dx + mov [bp-0Eh], ax + test byte ptr [bp+0Ch], 2 + jz short loc_D4DF + mov ax, 10h + jmp short loc_D4E1 +; --------------------------------------------------------------------------- + +loc_D4DF: ; CODE XREF: seg007:02B8j + xor ax, ax + +loc_D4E1: ; CODE XREF: seg007:02BDj + mov [bp-2], ax + test byte ptr [bp+0Ch], 1 + jz short loc_D4F2 + mov eax, 0FFFFh + jmp short loc_D4F8 +; --------------------------------------------------------------------------- + +loc_D4F2: ; CODE XREF: seg007:02C8j + mov eax, 0FFFF0000h + +loc_D4F8: ; CODE XREF: seg007:02D0j + mov [bp-6], eax + test byte ptr [bp+0Ch], 1 + jz short loc_D507 + mov ax, 10h + jmp short loc_D509 +; --------------------------------------------------------------------------- + +loc_D507: ; CODE XREF: seg007:02E0j + xor ax, ax + +loc_D509: ; CODE XREF: seg007:02E5j + cwde + mov [bp-0Ah], eax + mov si, [bp-2] + jmp loc_D5E8 +; --------------------------------------------------------------------------- + +loc_D515: ; CODE XREF: seg007:03D0j + mov ax, si + shl ax, 2 + les bx, [bp-0Eh] + add bx, ax + mov eax, [bp-6] + and es:[bx+1], eax + les bx, dword_13672 + add bx, di + mov eax, es:[bx] + mov cl, [bp-0Ah] + shl eax, cl + mov edx, [bp-6] + not edx + and eax, edx + mov dx, si + shl dx, 2 + les bx, [bp-0Eh] + add bx, dx + or es:[bx+1], eax + mov eax, [bp-6] + and es:[bx+81h], eax + les bx, dword_13676 + add bx, di + mov eax, es:[bx] + shl eax, cl + mov edx, [bp-6] + not edx + and eax, edx + mov dx, si + shl dx, 2 + les bx, [bp-0Eh] + add bx, dx + or es:[bx+81h], eax + mov eax, [bp-6] + and es:[bx+101h], eax + les bx, dword_1367A + add bx, di + mov eax, es:[bx] + shl eax, cl + mov edx, [bp-6] + not edx + and eax, edx + mov dx, si + shl dx, 2 + les bx, [bp-0Eh] + add bx, dx + or es:[bx+101h], eax + mov eax, [bp-6] + and es:[bx+181h], eax + les bx, dword_1367E + add bx, di + mov eax, es:[bx] + shl eax, cl + mov edx, [bp-6] + not edx + and eax, edx + mov dx, si + shl dx, 2 + les bx, [bp-0Eh] + add bx, dx + or es:[bx+181h], eax + add di, 50h ; 'P' + inc si + +loc_D5E8: ; CODE XREF: seg007:02F2j + mov ax, [bp-2] + add ax, 10h + cmp ax, si + jg loc_D515 + pop di + pop si + leave + retf +seg007 ends + +; =========================================================================== + +; Segment type: Pure code +seg008 segment byte public 'CODE' use16 + assume cs:seg008 + ;org 8 + assume es:nothing, ss:nothing, ds:dseg, fs:nothing, gs:nothing + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +; int __cdecl __far sub_D5F8(int, int, int, char *format, char arglist) +sub_D5F8 proc far ; CODE XREF: sub_A9B9+C0P sub_A9B9+F1P ... + +buffer = byte ptr -104h +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +_format = dword ptr 0Ch +arglist = byte ptr 10h + + enter 104h, 0 + lea ax, [bp+arglist] + mov [bp+var_2], ss + mov [bp+var_4], ax + push [bp+var_2] + push ax ; arglist + push large [bp+_format] ; format + push ss + lea ax, [bp+buffer] + push ax ; buffer + call _vsprintf + push ss + lea ax, [bp+buffer] + push ax + push [bp+arg_4] + push [bp+arg_2] + push [bp+arg_0] + call sub_C948 + add sp, 16h + leave + retf +sub_D5F8 endp + +seg008 ends + +; =========================================================================== + +; Segment type: Pure code +seg009 segment byte public 'CODE' use16 + assume cs:seg009 + ;org 1 + assume es:nothing, ss:nothing, ds:dseg, fs:nothing, gs:nothing + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_D631 proc far ; CODE XREF: seg009:01A8p + +var_38 = byte ptr -38h +var_33 = byte ptr -33h +var_8 = dword ptr -8 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = dword ptr 8 + + enter 38h, 0 + push si + push di + mov di, [bp+arg_0] + push large [bp+arg_2] + call sub_E783 + push ss + lea ax, [bp+var_38] + push ax + push 6 + call sub_E889 + mov al, [bp+var_33] + cbw + mov [bp+var_4], ax + mov bx, di + shl bx, 2 + mov ax, [bx+1472h] + or ax, [bx+1474h] + jz short loc_D677 + mov bx, di + shl bx, 2 + push large dword ptr [bx+1472h] ; font + call _registerbgifont + add sp, 4 + +loc_D677: ; CODE XREF: sub_D631+32j + mov ax, [bp+var_4] + imul ax, 281h + push ax + call sub_2621 + pop cx + mov bx, di + shl bx, 2 + mov [bx+1474h], dx + mov [bx+1472h], ax + mov bx, di + shl bx, 2 + mov ax, [bx+1472h] + or ax, [bx+1474h] + jnz short loc_D6A7 + mov ax, 0FFFDh + jmp loc_D74E +; --------------------------------------------------------------------------- + +loc_D6A7: ; CODE XREF: sub_D631+6Ej + push ss + lea ax, [bp+var_38] + push ax + push 30h ; '0' + call sub_E889 + cmp word_129B8, 0 + jz short loc_D6C7 + push ss + lea ax, [bp+var_38] + push ax + call sub_BA15 + add sp, 4 + +loc_D6C7: ; CODE XREF: sub_D631+87j + mov al, byte ptr [bp+var_4] + mov [di+72Fh], al + mov bx, di + shl bx, 2 + mov ax, [bx+1474h] + mov dx, [bx+1472h] + mov word ptr [bp+var_8+2], ax + mov word ptr [bp+var_8], dx + mov [bp+var_2], 0 + jmp short loc_D73F +; --------------------------------------------------------------------------- + +loc_D6E8: ; CODE XREF: sub_D631+114j + push large [bp+var_8] + push 1 + call sub_E889 + mov ax, word ptr [bp+var_8] + inc ax + push word ptr [bp+var_8+2] + push ax + push 200h + call sub_E889 + xor si, si + jmp short loc_D732 +; --------------------------------------------------------------------------- + +loc_D707: ; CODE XREF: sub_D631+104j + mov ax, si + shl ax, 2 + les bx, [bp+var_8] + add bx, ax + mov eax, es:[bx+1] + and eax, es:[bx+81h] + and eax, es:[bx+101h] + and eax, es:[bx+181h] + not eax + mov es:[bx+201h], eax + inc si + +loc_D732: ; CODE XREF: sub_D631+D4j + cmp si, 20h ; ' ' + jl short loc_D707 + inc [bp+var_2] + add word ptr [bp+var_8], 281h + +loc_D73F: ; CODE XREF: sub_D631+B5j + mov ax, [bp+var_2] + cmp ax, [bp+var_4] + jl short loc_D6E8 + call sub_E8D9 + xor ax, ax + +loc_D74E: ; CODE XREF: sub_D631+73j + pop di + pop si + leave + retf +sub_D631 endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + mov si, [bp+6] + cmp word ptr [bp+8], 0 + jle short loc_D765 + cmp word ptr [bp+8], 40h ; '@' + jle short loc_D76A + +loc_D765: ; CODE XREF: seg009:012Dj + mov ax, 0FFF7h + jmp short loc_D7C3 +; --------------------------------------------------------------------------- + +loc_D76A: ; CODE XREF: seg009:0133j + mov bx, si + shl bx, 2 + mov ax, [bx+1472h] + or ax, [bx+1474h] + jz short loc_D78B + mov bx, si + shl bx, 2 + push large dword ptr [bx+1472h] + call _registerbgifont + add sp, 4 + +loc_D78B: ; CODE XREF: seg009:0147j + mov al, [bp+8] + mov [si+72Fh], al + mov ax, [bp+8] + imul ax, 281h + push ax + call sub_2621 + pop cx + mov bx, si + shl bx, 2 + mov [bx+1474h], dx + mov [bx+1472h], ax + mov bx, si + shl bx, 2 + mov ax, [bx+1472h] + or ax, [bx+1474h] + jnz short loc_D7C1 + mov ax, 0FFFDh + jmp short loc_D7C3 +; --------------------------------------------------------------------------- + +loc_D7C1: ; CODE XREF: seg009:018Aj + xor ax, ax + +loc_D7C3: ; CODE XREF: seg009:0138j seg009:018Fj + pop si + pop bp + retf +; --------------------------------------------------------------------------- + enter 2, 0 + mov word_129B8, 0 + push large dword ptr [bp+8] + push word ptr [bp+6] + push cs + call near ptr sub_D631 + add sp, 6 + mov [bp-2], ax + mov word_129B8, 1 + leave + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + mov si, [bp+6] + mov bx, si + shl bx, 2 + mov ax, [bx+1472h] + or ax, [bx+1474h] + jz short loc_D827 + mov bx, si + shl bx, 2 + push large dword ptr [bx+1472h] + call _registerbgifont + add sp, 4 + mov bx, si + shl bx, 2 + mov word ptr [bx+1474h], 0 + mov word ptr [bx+1472h], 0 + mov byte ptr [si+72Fh], 0 + +loc_D827: ; CODE XREF: seg009:01CDj + pop si + pop bp + retf +; --------------------------------------------------------------------------- + enter 4, 0 + push si + push di + mov di, [bp+8] + mov ax, [bp+6] + sar ax, 3 + mov dx, di + shl dx, 6 + add ax, dx + mov dx, di + shl dx, 4 + add ax, dx + mov si, ax + mov ax, [bp+0Ah] + mov bx, 40h ; '@' + cwd + idiv bx + shl ax, 2 + mov bx, ax + mov ax, [bx+1474h] + mov dx, [bx+1472h] + push ax + mov ax, [bp+0Ah] + mov bx, 40h ; '@' + push dx + cwd + idiv bx + imul dx, 281h + pop ax + add ax, dx + pop dx + mov [bp-2], dx + mov [bp-4], ax + xor cx, cx + jmp short loc_D8E7 +; --------------------------------------------------------------------------- + +loc_D87C: ; CODE XREF: seg009:02BAj + mov ax, cx + shl ax, 2 + les bx, [bp-4] + add bx, ax + mov eax, es:[bx+1] + les bx, dword_13672 + add bx, si + mov es:[bx], eax + mov ax, cx + shl ax, 2 + les bx, [bp-4] + add bx, ax + mov eax, es:[bx+81h] + les bx, dword_13676 + add bx, si + mov es:[bx], eax + mov ax, cx + shl ax, 2 + les bx, [bp-4] + add bx, ax + mov eax, es:[bx+101h] + les bx, dword_1367A + add bx, si + mov es:[bx], eax + mov ax, cx + shl ax, 2 + les bx, [bp-4] + add bx, ax + mov eax, es:[bx+181h] + les bx, dword_1367E + add bx, si + mov es:[bx], eax + add si, 50h ; 'P' + inc cx + +loc_D8E7: ; CODE XREF: seg009:024Aj + cmp cx, 20h ; ' ' + jl short loc_D87C + pop di + pop si + leave + retf +; --------------------------------------------------------------------------- + enter 8, 0 + push si + push di + mov ax, [bp+8] + imul ax, 50h + push ax + mov ax, [bp+6] + mov bx, 8 + cwd + idiv bx + pop dx + add dx, ax + mov di, dx + mov ax, [bp+0Ah] + mov bx, 40h ; '@' + cwd + idiv bx + shl ax, 2 + mov bx, ax + mov ax, [bx+1474h] + mov dx, [bx+1472h] + push ax + mov ax, [bp+0Ah] + mov bx, 40h ; '@' + push dx + cwd + idiv bx + imul dx, 281h + pop ax + add ax, dx + pop dx + mov [bp-6], dx + mov [bp-8], ax + test byte ptr [bp+0Ch], 2 + jz short loc_D945 + mov ax, 10h + jmp short loc_D947 +; --------------------------------------------------------------------------- + +loc_D945: ; CODE XREF: seg009:030Ej + xor ax, ax + +loc_D947: ; CODE XREF: seg009:0313j + mov [bp-2], ax + test byte ptr [bp+0Ch], 1 + jz short loc_D955 + mov ax, 10h + jmp short loc_D957 +; --------------------------------------------------------------------------- + +loc_D955: ; CODE XREF: seg009:031Ej + xor ax, ax + +loc_D957: ; CODE XREF: seg009:0323j + mov [bp-4], ax + mov si, [bp-2] + jmp short loc_D9D5 +; --------------------------------------------------------------------------- + +loc_D95F: ; CODE XREF: seg009:03ADj + mov ax, si + shl ax, 2 + les bx, [bp-8] + add bx, ax + mov eax, es:[bx+1] + mov cl, [bp-4] + shr eax, cl + les bx, dword_13672 + add bx, di + mov es:[bx], ax + mov ax, si + shl ax, 2 + les bx, [bp-8] + add bx, ax + mov eax, es:[bx+81h] + shr eax, cl + les bx, dword_13676 + add bx, di + mov es:[bx], ax + mov ax, si + shl ax, 2 + les bx, [bp-8] + add bx, ax + mov eax, es:[bx+101h] + shr eax, cl + les bx, dword_1367A + add bx, di + mov es:[bx], ax + mov ax, si + shl ax, 2 + les bx, [bp-8] + add bx, ax + mov eax, es:[bx+181h] + shr eax, cl + les bx, dword_1367E + add bx, di + mov es:[bx], ax + add di, 50h ; 'P' + inc si + +loc_D9D5: ; CODE XREF: seg009:032Dj + mov ax, [bp-2] + add ax, 10h + cmp ax, si + jg short loc_D95F + pop di + pop si + leave + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_D9E3 proc far ; CODE XREF: sub_DAEC+5Fp + +arg_0 = dword ptr 6 + + push bp + mov bp, sp + push large [bp+arg_0] + call sub_1108 + or ax, ax + jnz short loc_D9F8 + mov ax, 1 + pop bp + retf +; --------------------------------------------------------------------------- + +loc_D9F8: ; CODE XREF: sub_D9E3+Ej + push large 12h + push 0 + call sub_1144 + push ds + push offset unk_136D2 + push 30h ; '0' + call sub_FD8 + push ds + push offset unk_136D2 + call sub_BA15 + add sp, 4 + call sub_10F8 + xor ax, ax + pop bp + retf +sub_D9E3 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_DA22 proc far ; CODE XREF: sub_DAEC+69p + +arg_0 = dword ptr 6 + + push bp + mov bp, sp + push large [bp+arg_0] + call sub_1108 + or ax, ax + jnz short loc_DA37 + mov ax, 1 + pop bp + retf +; --------------------------------------------------------------------------- + +loc_DA37: ; CODE XREF: sub_DA22+Ej + push large 12h + push 0 + call sub_1144 + push ds + push offset unk_136D2 + push 30h ; '0' + call sub_FD8 + call sub_10F8 + xor ax, ax + pop bp + retf +sub_DA22 endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + les bx, [bp+6] + dec word ptr es:[bx] + jl short loc_DA77 + mov ax, es:[bx+0Eh] + mov si, es:[bx+0Ch] + inc word ptr es:[bx+0Ch] + mov es, ax + mov al, es:[si] + mov ah, 0 + jmp short loc_DA83 +; --------------------------------------------------------------------------- + +loc_DA77: ; CODE XREF: seg009:0430j + push large dword ptr [bp+6] + call __fgetc + add sp, 4 + +loc_DA83: ; CODE XREF: seg009:0445j + mov di, ax + les bx, [bp+6] + dec word ptr es:[bx] + jl short loc_DAA2 + mov ax, es:[bx+0Eh] + mov si, es:[bx+0Ch] + inc word ptr es:[bx+0Ch] + mov es, ax + mov al, es:[si] + mov ah, 0 + jmp short loc_DAAE +; --------------------------------------------------------------------------- + +loc_DAA2: ; CODE XREF: seg009:045Bj + push large dword ptr [bp+6] + call __fgetc + add sp, 4 + +loc_DAAE: ; CODE XREF: seg009:0470j + shl ax, 8 + add di, ax + mov ax, di + pop di + pop si + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + xor dx, dx + jmp short loc_DAE5 +; --------------------------------------------------------------------------- + +loc_DAC0: ; CODE XREF: seg009:04B8j + xor cx, cx + jmp short loc_DADF +; --------------------------------------------------------------------------- + +loc_DAC4: ; CODE XREF: seg009:04B2j + mov ax, dx + imul ax, 3 + les bx, [bp+6] + add bx, ax + add bx, cx + mov al, es:[bx] + mov bx, dx + imul bx, 3 + add bx, cx + mov [bx+1442h], al + inc cx + +loc_DADF: ; CODE XREF: seg009:0492j + cmp cx, 3 + jl short loc_DAC4 + inc dx + +loc_DAE5: ; CODE XREF: seg009:048Ej + cmp dx, 10h + jl short loc_DAC0 + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_DAEC proc far ; CODE XREF: sub_A719+20P sub_DB6F+Fp ... + +var_1 = byte ptr -1 +arg_0 = dword ptr 6 + + enter 2, 0 + push si + xor si, si + push 4000h + call sub_2621 + pop cx + mov word ptr font+2, dx + mov word ptr font, ax + cmp word_129B8, 1 + jnz short loc_DB0D + or si, 2 + +loc_DB0D: ; CODE XREF: sub_DAEC+1Cj + cmp byte_129C7, 1 + jnz short loc_DB17 + mov si, 0F40h + +loc_DB17: ; CODE XREF: sub_DAEC+26j + cmp word_129BA, 1 + jnz short loc_DB3F + push si + push large 640000h + push large 4000h + push large [font] + push large [bp+arg_0] + call sub_35A + add sp, 12h + mov [bp+var_1], al + +loc_DB3F: ; CODE XREF: sub_DAEC+30j + cmp word_129B8, 1 + jnz short loc_DB50 + push large [bp+arg_0] + push cs + call near ptr sub_D9E3 + jmp short loc_DB58 +; --------------------------------------------------------------------------- + +loc_DB50: ; CODE XREF: sub_DAEC+58j + push large [bp+arg_0] + push cs + call near ptr sub_DA22 + +loc_DB58: ; CODE XREF: sub_DAEC+62j + add sp, 4 + push large [font] ; font + call _registerbgifont + add sp, 4 + mov al, [bp+var_1] + cbw + pop si + leave + retf +sub_DAEC endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_DB6F proc far ; CODE XREF: sub_A719+36P + +var_2 = word ptr -2 +arg_0 = dword ptr 6 + + enter 2, 0 + mov word_129B8, 0 + push large [bp+arg_0] + push cs + call near ptr sub_DAEC + add sp, 4 + mov [bp+var_2], ax + mov word_129B8, 1 + leave + retf +sub_DB6F endp + +; --------------------------------------------------------------------------- + enter 2, 0 + mov word_129BA, 0 + push large dword ptr [bp+6] + push cs + call near ptr sub_DAEC + add sp, 4 + mov [bp-2], ax + mov word_129BA, 1 + leave + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_DBAF proc far ; CODE XREF: sub_A772+1CP + +var_2 = word ptr -2 +arg_0 = dword ptr 6 + + enter 2, 0 + mov byte_129C7, 1 + mov word_129B8, 0 + push large [bp+arg_0] + push cs + call near ptr sub_DAEC + add sp, 4 + mov [bp+var_2], ax + mov word_129B8, 1 + mov byte_129C7, 0 + leave + retf +sub_DBAF endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + mov si, [bp+6] + mov al, [si+18D2h] + mov ah, 0 + cmp ax, [bp+8] + jle short loc_DBFD + mov al, [bp+8] + mov byte_129C8, al + push si + nop + push cs + call near ptr sub_DC1B + pop cx + mov byte_129C8, 0 + +loc_DBFD: ; CODE XREF: seg009:05B9j + pop si + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + mov al, [bp+8] + inc al + mov byte_129C9, al + push word ptr [bp+6] + nop + push cs + call near ptr sub_DC1B + pop cx + mov byte_129C9, 0 + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_DC1B proc far ; CODE XREF: seg009:05C4p seg009:05E0p + +var_2E = word ptr -2Eh +var_2C = word ptr -2Ch +var_29 = byte ptr -29h +var_28 = word ptr -28h +var_25 = byte ptr -25h +var_24 = word ptr -24h +var_21 = byte ptr -21h +var_20 = word ptr -20h +var_1D = byte ptr -1Dh +var_1C = word ptr -1Ch +var_1A = word ptr -1Ah +var_17 = byte ptr -17h +var_16 = word ptr -16h +var_13 = byte ptr -13h +var_12 = word ptr -12h +var_F = byte ptr -0Fh +var_E = word ptr -0Eh +var_B = byte ptr -0Bh +var_A = dword ptr -0Ah +var_6 = dword ptr -6 +var_2 = byte ptr -2 +var_1 = byte ptr -1 +arg_0 = word ptr 6 + + enter 2Eh, 0 + push si + push di + mov di, [bp+arg_0] + mov bx, di + shl bx, 2 + mov ax, [bx+1494h] + mov dx, [bx+1492h] + mov word ptr [bp+var_6+2], ax + mov word ptr [bp+var_6], dx + mov bx, di + shl bx, 6 + mov al, byte_129C8 + cbw + shl ax, 2 + add bx, ax + mov ax, [bx+14D4h] + mov dx, [bx+14D2h] + mov word ptr [bp+var_A+2], ax + mov word ptr [bp+var_A], dx + cmp byte_129C9, 0 + jz short loc_DC66 + mov al, byte_129C9 + cbw + dec ax + push ax + call sub_B976 + pop cx + +loc_DC66: ; CODE XREF: sub_DC1B+3Dj + xor si, si + jmp loc_DDDC +; --------------------------------------------------------------------------- + +loc_DC6B: ; CODE XREF: sub_DC1B+1C5j + les bx, [bp+var_6] + mov al, es:[bx] + mov [bp+var_1], al + inc word ptr [bp+var_6] + cmp [bp+var_1], 1 + jnz loc_DD47 + les bx, [bp+var_6] + mov al, es:[bx] + mov [bp+var_2], al + inc word ptr [bp+var_6] + cmp [bp+var_2], 0 + jz loc_DD47 + les bx, [bp+var_6] + mov al, es:[bx] + mov [bp+var_1], al + inc word ptr [bp+var_6] + jmp loc_DD3B +; --------------------------------------------------------------------------- + +loc_DCA2: ; CODE XREF: sub_DC1B+128j + cmp [bp+var_1], 0 + jnz loc_DD3A + cmp byte_129C9, 0 + jnz short loc_DD28 + les bx, [bp+var_A] + mov al, es:[bx] + mov [bp+var_B], al + inc word ptr [bp+var_A] + mov [bp+var_E], si + mov ax, 0A800h + mov bx, [bp+var_E] + mov dl, [bp+var_B] + mov es, ax + assume es:nothing + mov es:[bx], dl + les bx, [bp+var_A] + assume es:nothing + mov al, es:[bx] + mov [bp+var_F], al + inc word ptr [bp+var_A] + mov [bp+var_12], si + mov ax, 0B000h + mov bx, [bp+var_12] + mov dl, [bp+var_F] + mov es, ax + assume es:nothing + mov es:[bx], dl + les bx, [bp+var_A] + assume es:nothing + mov al, es:[bx] + mov [bp+var_13], al + inc word ptr [bp+var_A] + mov [bp+var_16], si + mov ax, 0B800h + mov bx, [bp+var_16] + mov dl, [bp+var_13] + mov es, ax + assume es:nothing + mov es:[bx], dl + les bx, [bp+var_A] + assume es:nothing + mov al, es:[bx] + mov [bp+var_17], al + inc word ptr [bp+var_A] + mov [bp+var_1A], si + inc si + mov ax, 0E000h + mov bx, [bp+var_1A] + mov dl, [bp+var_17] + mov es, ax + assume es:nothing + mov es:[bx], dl + jmp short loc_DD3B +; --------------------------------------------------------------------------- + +loc_DD28: ; CODE XREF: sub_DC1B+94j + mov [bp+var_1C], si + inc si + mov ax, 0A800h + mov bx, [bp+var_1C] + mov es, ax + assume es:nothing + mov byte ptr es:[bx], 0FFh + jmp short loc_DD3B +; --------------------------------------------------------------------------- + +loc_DD3A: ; CODE XREF: sub_DC1B+8Bj + inc si + +loc_DD3B: ; CODE XREF: sub_DC1B+84j + ; sub_DC1B+10Bj ... + mov al, [bp+var_2] + dec [bp+var_2] + or al, al + jnz loc_DCA2 + +loc_DD47: ; CODE XREF: sub_DC1B+60j sub_DC1B+74j + cmp [bp+var_1], 0 + jnz loc_DDDB + cmp byte_129C9, 0 + jnz short loc_DDCC + les bx, [bp+var_A] + assume es:nothing + mov al, es:[bx] + mov [bp+var_1D], al + inc word ptr [bp+var_A] + mov [bp+var_20], si + mov ax, 0A800h + mov bx, [bp+var_20] + mov dl, [bp+var_1D] + mov es, ax + assume es:nothing + mov es:[bx], dl + les bx, [bp+var_A] + assume es:nothing + mov al, es:[bx] + mov [bp+var_21], al + inc word ptr [bp+var_A] + mov [bp+var_24], si + mov ax, 0B000h + mov bx, [bp+var_24] + mov dl, [bp+var_21] + mov es, ax + assume es:nothing + mov es:[bx], dl + les bx, [bp+var_A] + assume es:nothing + mov al, es:[bx] + mov [bp+var_25], al + inc word ptr [bp+var_A] + mov [bp+var_28], si + mov ax, 0B800h + mov bx, [bp+var_28] + mov dl, [bp+var_25] + mov es, ax + assume es:nothing + mov es:[bx], dl + les bx, [bp+var_A] + assume es:nothing + mov al, es:[bx] + mov [bp+var_29], al + inc word ptr [bp+var_A] + mov [bp+var_2C], si + mov ax, 0E000h + mov bx, [bp+var_2C] + mov dl, [bp+var_29] + mov es, ax + assume es:nothing + mov es:[bx], dl + jmp short loc_DDDB +; --------------------------------------------------------------------------- + +loc_DDCC: ; CODE XREF: sub_DC1B+139j + mov [bp+var_2E], si + mov ax, 0A800h + mov bx, [bp+var_2E] + mov es, ax + assume es:nothing + mov byte ptr es:[bx], 0FFh + +loc_DDDB: ; CODE XREF: sub_DC1B+130j + ; sub_DC1B+1AFj + inc si + +loc_DDDC: ; CODE XREF: sub_DC1B+4Dj + cmp si, 7D00h + jb loc_DC6B + cmp byte_129C9, 0 + jz short loc_DDF0 + call sub_BA0A + +loc_DDF0: ; CODE XREF: sub_DC1B+1CEj + pop di + pop si + leave + retf +sub_DC1B endp + +; --------------------------------------------------------------------------- + enter 0Ah, 0 + push si + push di + mov di, [bp+6] + push large dword ptr [bp+8] + call sub_1108 + or ax, ax + jz loc_DEEF + push 64h ; 'd' + call sub_2621 + pop cx + mov [bp-6], dx + mov [bp-8], ax + push dx + push ax + push 40h ; '@' + call sub_FD8 + push 4 + push ds + push offset aHgrx ; "HGRX" + push large dword ptr [bp-8] + call _memcmp + add sp, 0Ah + or ax, ax + jz short loc_DE41 + call sub_10F8 + jmp loc_DEEF +; --------------------------------------------------------------------------- + +loc_DE41: ; CODE XREF: seg009:0807j + les bx, [bp-8] + assume es:nothing + cmp byte ptr es:[bx+4], 1 + jnb short loc_DE53 + call sub_10F8 + jmp loc_DEEF +; --------------------------------------------------------------------------- + +loc_DE53: ; CODE XREF: seg009:0819j + les bx, [bp-8] + mov al, es:[bx+4] + mov [di+18D2h], al + mov ax, es:[bx+8] + mov [bp-2], ax + mov ax, es:[bx+0Ah] + mov [bp-4], ax + mov bx, di + shl bx, 2 + mov ax, [bx+1492h] + or ax, [bx+1494h] + jz short loc_DE82 + push di + nop + push cs + call near ptr sub_E02B + pop cx + +loc_DE82: ; CODE XREF: seg009:0849j + push word ptr [bp-2] + call sub_2621 + pop cx + mov bx, di + shl bx, 2 + mov [bx+1494h], dx + mov [bx+1492h], ax + or ax, dx + jnz short loc_DEA3 + call sub_10F8 + jmp short loc_DEEF +; --------------------------------------------------------------------------- + +loc_DEA3: ; CODE XREF: seg009:086Aj + mov word ptr [bp-0Ah], 0 + jmp short loc_DEF7 +; --------------------------------------------------------------------------- + +loc_DEAA: ; CODE XREF: seg009:08D3j + mov bx, di + shl bx, 6 + mov ax, [bp-0Ah] + shl ax, 2 + add bx, ax + mov ax, [bx+14D2h] + or ax, [bx+14D4h] + jz short loc_DEC8 + push di + nop + push cs + call near ptr sub_E02B + pop cx + +loc_DEC8: ; CODE XREF: seg009:088Fj + push word ptr [bp-4] + call sub_2621 + pop cx + mov bx, di + shl bx, 6 + mov si, [bp-0Ah] + shl si, 2 + add bx, si + mov [bx+14D4h], dx + mov [bx+14D2h], ax + or ax, dx + jnz short loc_DEF4 + call sub_10F8 + +loc_DEEF: ; CODE XREF: seg009:07D8j seg009:080Ej ... + mov ax, 1 + jmp short loc_DF5C +; --------------------------------------------------------------------------- + +loc_DEF4: ; CODE XREF: seg009:08B8j + inc word ptr [bp-0Ah] + +loc_DEF7: ; CODE XREF: seg009:0878j + les bx, [bp-8] + mov al, es:[bx+4] + mov ah, 0 + cmp ax, [bp-0Ah] + jg short loc_DEAA + mov bx, di + shl bx, 2 + push large dword ptr [bx+1492h] + push word ptr [bp-2] + call sub_FD8 + mov word ptr [bp-0Ah], 0 + jmp short loc_DF3B +; --------------------------------------------------------------------------- + +loc_DF1E: ; CODE XREF: seg009:0917j + mov bx, di + shl bx, 6 + mov ax, [bp-0Ah] + shl ax, 2 + add bx, ax + push large dword ptr [bx+14D2h] + push word ptr [bp-4] + call sub_FD8 + inc word ptr [bp-0Ah] + +loc_DF3B: ; CODE XREF: seg009:08ECj + les bx, [bp-8] + mov al, es:[bx+4] + mov ah, 0 + cmp ax, [bp-0Ah] + jg short loc_DF1E + push word ptr [bp-6] + push bx + call _registerbgifont + add sp, 4 + call sub_10F8 + xor ax, ax + +loc_DF5C: ; CODE XREF: seg009:08C2j + pop di + pop si + leave + retf +; --------------------------------------------------------------------------- + enter 4, 0 + push si + push di + mov si, [bp+6] + push large dword ptr [bp+8] + call sub_1108 + or ax, ax + jz loc_DFFF + push 64h ; 'd' + call sub_2621 + pop cx + mov [bp-2], dx + mov [bp-4], ax + push dx + push ax + push 40h ; '@' + call sub_FD8 + push 4 + push ds + push offset aHgrx ; "HGRX" + push large dword ptr [bp-4] + call _memcmp + add sp, 0Ah + or ax, ax + jz short loc_DFAC + call sub_10F8 + jmp short loc_DFFF +; --------------------------------------------------------------------------- + +loc_DFAC: ; CODE XREF: seg009:0973j + les bx, [bp-4] + cmp byte ptr es:[bx+4], 1 + jnb short loc_DFBD + call sub_10F8 + jmp short loc_DFFF +; --------------------------------------------------------------------------- + +loc_DFBD: ; CODE XREF: seg009:0984j + les bx, [bp-4] + mov al, es:[bx+4] + mov [si+18D2h], al + mov di, es:[bx+8] + mov bx, si + shl bx, 2 + mov ax, [bx+1492h] + or ax, [bx+1494h] + jz short loc_DFE2 + push si + nop + push cs + call near ptr sub_E02B + pop cx + +loc_DFE2: ; CODE XREF: seg009:09A9j + push di + call sub_2621 + pop cx + mov bx, si + shl bx, 2 + mov [bx+1494h], dx + mov [bx+1492h], ax + or ax, dx + jnz short loc_E004 + call sub_10F8 + +loc_DFFF: ; CODE XREF: seg009:0944j seg009:097Aj ... + mov ax, 1 + jmp short loc_E027 +; --------------------------------------------------------------------------- + +loc_E004: ; CODE XREF: seg009:09C8j + mov bx, si + shl bx, 2 + push large dword ptr [bx+1492h] + push di + call sub_FD8 + push large dword ptr [bp-4] + call _registerbgifont + add sp, 4 + call sub_10F8 + xor ax, ax + +loc_E027: ; CODE XREF: seg009:09D2j + pop di + pop si + leave + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_E02B proc far ; CODE XREF: seg009:084Ep seg009:0894p ... + +arg_0 = word ptr 6 + + push bp + mov bp, sp + push si + push di + mov si, [bp+arg_0] + mov bx, si + shl bx, 2 + mov ax, [bx+1492h] + or ax, [bx+1494h] + jz short loc_E065 + mov bx, si + shl bx, 2 + push large dword ptr [bx+1492h] ; font + call _registerbgifont + add sp, 4 + mov bx, si + shl bx, 2 + mov word ptr [bx+1494h], 0 + mov word ptr [bx+1492h], 0 + +loc_E065: ; CODE XREF: sub_E02B+15j + xor di, di + jmp short loc_E0B1 +; --------------------------------------------------------------------------- + +loc_E069: ; CODE XREF: sub_E02B+89j + mov bx, si + shl bx, 6 + mov ax, di + shl ax, 2 + add bx, ax + mov ax, [bx+14D2h] + or ax, [bx+14D4h] + jz short loc_E0B0 + mov bx, si + shl bx, 6 + mov ax, di + shl ax, 2 + add bx, ax + push large dword ptr [bx+14D2h] ; font + call _registerbgifont + add sp, 4 + mov bx, si + shl bx, 6 + mov ax, di + shl ax, 2 + add bx, ax + mov word ptr [bx+14D4h], 0 + mov word ptr [bx+14D2h], 0 + +loc_E0B0: ; CODE XREF: sub_E02B+52j + inc di + +loc_E0B1: ; CODE XREF: sub_E02B+3Cj + cmp di, 10h + jl short loc_E069 + pop di + pop si + pop bp + retf +sub_E02B endp + +; --------------------------------------------------------------------------- + enter 0Eh, 0 + push si + push di + push large dword ptr [bp+8] + call sub_1108 + or ax, ax + jz loc_E213 + push 64h ; 'd' + call sub_2621 + pop cx + mov [bp-6], dx + mov [bp-8], ax + push dx + push ax + push 60h ; '`' + call sub_FD8 + push 4 + push ds + push offset aHgrz ; "HGRZ" + push large dword ptr [bp-8] + call _memcmp + add sp, 0Ah + or ax, ax + jz short loc_E104 + call sub_10F8 + jmp loc_E213 +; --------------------------------------------------------------------------- + +loc_E104: ; CODE XREF: seg009:0ACAj + les bx, [bp-8] + mov al, es:[bx+4] + mov [bp-9], al + mov ah, 0 + cmp ax, [bp+0Ch] + jle loc_E265 + mov ax, [bp+0Ch] + shl ax, 2 + add ax, 8 + mov di, ax + add bx, di + mov eax, es:[bx] + mov [bp-0Eh], eax + push eax + push 0 + call sub_1144 + push large dword ptr [bp-8] + push 40h ; '@' + call sub_FD8 + push 4 + push ds + push offset aHgrx ; "HGRX" + push large dword ptr [bp-8] + call _memcmp + add sp, 0Ah + or ax, ax + jz short loc_E15E + call sub_10F8 + jmp loc_E213 +; --------------------------------------------------------------------------- + +loc_E15E: ; CODE XREF: seg009:0B24j + les bx, [bp-8] + cmp byte ptr es:[bx+4], 1 + jnb short loc_E170 + call sub_10F8 + jmp loc_E213 +; --------------------------------------------------------------------------- + +loc_E170: ; CODE XREF: seg009:0B36j + les bx, [bp-8] + mov al, es:[bx+4] + mov bx, [bp+6] + mov [bx+18D2h], al + mov bx, [bp-8] + mov ax, es:[bx+8] + mov [bp-2], ax + mov ax, es:[bx+0Ah] + mov [bp-4], ax + mov bx, [bp+6] + shl bx, 2 + mov ax, [bx+1492h] + or ax, [bx+1494h] + jz short loc_E1A7 + push word ptr [bp+6] + push cs + call near ptr sub_E02B + pop cx + +loc_E1A7: ; CODE XREF: seg009:0B6Dj + push word ptr [bp-2] + call sub_2621 + pop cx + mov bx, [bp+6] + shl bx, 2 + mov [bx+1494h], dx + mov [bx+1492h], ax + or ax, dx + jnz short loc_E1C9 + call sub_10F8 + jmp short loc_E213 +; --------------------------------------------------------------------------- + +loc_E1C9: ; CODE XREF: seg009:0B90j + xor di, di + jmp short loc_E219 +; --------------------------------------------------------------------------- + +loc_E1CD: ; CODE XREF: seg009:0BF4j + mov bx, [bp+6] + shl bx, 6 + mov ax, di + shl ax, 2 + add bx, ax + mov ax, [bx+14D2h] + or ax, [bx+14D4h] + jz short loc_E1EC + push word ptr [bp+6] + push cs + call near ptr sub_E02B + pop cx + +loc_E1EC: ; CODE XREF: seg009:0BB2j + push word ptr [bp-4] + call sub_2621 + pop cx + mov bx, [bp+6] + shl bx, 6 + mov si, di + shl si, 2 + add bx, si + mov [bx+14D4h], dx + mov [bx+14D2h], ax + or ax, dx + jnz short loc_E218 + call sub_10F8 + +loc_E213: ; CODE XREF: seg009:0A9Bj seg009:0AD1j ... + mov ax, 1 + jmp short loc_E278 +; --------------------------------------------------------------------------- + +loc_E218: ; CODE XREF: seg009:0BDCj + inc di + +loc_E219: ; CODE XREF: seg009:0B9Bj + les bx, [bp-8] + mov al, es:[bx+4] + mov ah, 0 + cmp ax, di + jg short loc_E1CD + mov bx, [bp+6] + shl bx, 2 + push large dword ptr [bx+1492h] + push word ptr [bp-2] + call sub_FD8 + xor di, di + jmp short loc_E258 +; --------------------------------------------------------------------------- + +loc_E23D: ; CODE XREF: seg009:0C33j + mov bx, [bp+6] + shl bx, 6 + mov ax, di + shl ax, 2 + add bx, ax + push large dword ptr [bx+14D2h] + push word ptr [bp-4] + call sub_FD8 + inc di + +loc_E258: ; CODE XREF: seg009:0C0Bj + les bx, [bp-8] + mov al, es:[bx+4] + mov ah, 0 + cmp ax, di + jg short loc_E23D + +loc_E265: ; CODE XREF: seg009:0AE3j + push large dword ptr [bp-8] + call _registerbgifont + add sp, 4 + call sub_10F8 + xor ax, ax + +loc_E278: ; CODE XREF: seg009:0BE6j + pop di + pop si + leave + retf +seg009 ends + +; =========================================================================== + +; Segment type: Pure code +seg010 segment byte public 'CODE' use16 + assume cs:seg010 + ;org 0Ch + assume es:nothing, ss:nothing, ds:dseg, fs:nothing, gs:nothing + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_E27C proc far ; CODE XREF: sub_A7B5+1DP sub_A8AD+1CP + +arg_0 = byte ptr 6 +arg_2 = byte ptr 8 +arg_4 = byte ptr 0Ah +arg_6 = byte ptr 0Ch +arg_8 = word ptr 0Eh +arg_A = word ptr 10h + + push bp + mov bp, sp + push si + push ds + push offset aReiidenconfig ; "ReiidenConfig" + push 0Dh + push 5 + call sub_F12 + mov si, ax + or si, si + jnz short loc_E2C6 + push ds + push offset aReiidenconfig ; "ReiidenConfig" + push 0Dh + push 5 + call sub_F5C + mov si, ax + mov word ptr dword_13EE6+2, si + mov word ptr dword_13EE6, 0 + les bx, dword_13EE6 + mov word ptr es:[bx+3Fh], 0 + les bx, dword_13EE6 + mov word ptr es:[bx+25h], 0 + mov word ptr es:[bx+23h], 0 + +loc_E2C6: ; CODE XREF: sub_E27C+15j + or si, si + jz short loc_E322 + mov word ptr dword_13EE6+2, si + mov word ptr dword_13EE6, 0 + les bx, dword_13EE6 + mov al, [bp+arg_0] + mov es:[bx+0Eh], al + les bx, dword_13EE6 + mov al, [bp+arg_2] + mov es:[bx+0Fh], al + les bx, dword_13EE6 + mov al, [bp+arg_4] + mov es:[bx+10h], al + les bx, dword_13EE6 + mov al, [bp+arg_6] + mov es:[bx+11h], al + les bx, dword_13EE6 + mov dx, [bp+arg_A] + mov ax, [bp+arg_8] + mov es:[bx+1Dh], dx + mov es:[bx+1Bh], ax + les bx, dword_13EE6 + mov word ptr es:[bx+21h], 0 + mov word ptr es:[bx+1Fh], 0 + +loc_E322: ; CODE XREF: sub_E27C+4Cj + pop si + pop bp + retf +sub_E27C endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push ds + push offset aReiidenconfig ; "ReiidenConfig" + push 0Dh + push 5 + call sub_F12 + mov si, ax + or si, si + jnz short loc_E33F + jmp loc_E3BF +; --------------------------------------------------------------------------- + +loc_E33F: ; CODE XREF: seg010:00CAj + mov word ptr dword_13EE6+2, si + mov word ptr dword_13EE6, 0 + les bx, dword_13EE6 + mov al, es:[bx+0Eh] + les bx, [bp+6] + mov es:[bx], al + les bx, dword_13EE6 + mov al, es:[bx+0Fh] + les bx, [bp+0Ah] + mov es:[bx], al + les bx, dword_13EE6 + mov al, es:[bx+10h] + les bx, [bp+0Eh] + mov es:[bx], al + les bx, dword_13EE6 + mov al, es:[bx+11h] + les bx, [bp+12h] + mov es:[bx], al + les bx, dword_13EE6 + mov dx, es:[bx+1Dh] + mov ax, es:[bx+1Bh] + les bx, [bp+16h] + mov es:[bx+2], dx + mov es:[bx], ax + les bx, dword_13EE6 + mov dx, es:[bx+25h] + mov ax, es:[bx+23h] + les bx, [bp+1Ah] + mov es:[bx+2], dx + mov es:[bx], ax + les bx, dword_13EE6 + mov ax, es:[bx+3Fh] + les bx, [bp+1Eh] + mov es:[bx], ax + xor ax, ax + jmp short loc_E3C2 +; --------------------------------------------------------------------------- + +loc_E3BF: ; CODE XREF: seg010:00CCj + mov ax, 1 + +loc_E3C2: ; CODE XREF: seg010:014Dj + pop si + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_E3C5 proc far ; CODE XREF: sub_A79D+CP + push bp + mov bp, sp + push si + push ds + push offset aReiidenconfig ; "ReiidenConfig" + push 0Dh + push 5 + call sub_F12 + mov si, ax + or si, si + jz short loc_E3E2 + push si + call sub_1186 + +loc_E3E2: ; CODE XREF: sub_E3C5+15j + pop si + pop bp + retf +sub_E3C5 endp + +seg010 ends + +; =========================================================================== + +; Segment type: Pure code +seg011 segment byte public 'CODE' use16 + assume cs:seg011 + ;org 5 + assume es:nothing, ss:nothing, ds:dseg, fs:nothing, gs:nothing + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_E3E5 proc far ; CODE XREF: _main+AP + +s2 = byte ptr -1Ch +s1 = byte ptr -10h +var_4 = dword ptr -4 + + enter 1Ch, 0 + push si + lea ax, [bp+s2] + push ss + push ax + push ds + push offset aMdrv2system ; "Mdrv2System" + mov cx, 0Ch + call SCOPY@ + xor ax, ax + mov es, ax + assume es:seg000 + movsx eax, word ptr es:loc_3C8+2 + shl eax, 10h + add eax, 102h + shld edx, eax, 10h + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + xor si, si + jmp short loc_E42B +; --------------------------------------------------------------------------- + +loc_E41F: ; CODE XREF: sub_E3E5+49j + les bx, [bp+var_4] + assume es:nothing + add bx, si + mov al, es:[bx] + mov [bp+si+s1], al + inc si + +loc_E42B: ; CODE XREF: sub_E3E5+38j + cmp si, 0Ch + jl short loc_E41F + push ss + lea ax, [bp+s2] + push ax ; s2 + push ss + lea ax, [bp+s1] + push ax ; s1 + call _strcmp + add sp, 8 + or ax, ax + jz short loc_E44A + xor ax, ax + jmp short loc_E44D +; --------------------------------------------------------------------------- + +loc_E44A: ; CODE XREF: sub_E3E5+5Fj + mov ax, 1 + +loc_E44D: ; CODE XREF: sub_E3E5+63j + pop si + leave + retf +sub_E3E5 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +; int __stdcall sub_E450(char, char *path) +sub_E450 proc near ; CODE XREF: sub_E4D9+Bp seg011:0114p + +var_C = word ptr -0Ch +var_A = word ptr -0Ah +var_8 = word ptr -8 +var_6 = word ptr -6 +var_4 = word ptr -4 +handle = word ptr -2 +arg_0 = byte ptr 4 +_path = dword ptr 6 + + enter 0Ch, 0 + push si + cmp byte_12B0E, 0 + jz short loc_E4D4 + push 8001h ; access + push word ptr [bp+_path+2] + push word ptr [bp+_path] ; path + call _open + add sp, 6 + mov [bp+handle], ax + push [bp+handle] ; handle + call _filelength + pop cx + mov [bp+var_4], ax + movsx eax, [bp+var_4] + push eax + call sub_32CB + add sp, 4 + mov [bp+var_A], dx + mov [bp+var_C], ax + mov ax, [bp+var_A] + mov [bp+var_6], ax + mov ax, [bp+var_C] + mov [bp+var_8], ax + push ds + mov ax, 3F00h + mov bx, [bp+handle] + mov cx, [bp+var_4] + mov ds, [bp+var_6] + mov dx, [bp+var_8] + int 21h ; DOS - 2+ - READ FROM FILE WITH HANDLE + ; BX = file handle, CX = number of bytes to read + ; DS:DX -> buffer + pop ds + push [bp+handle] ; handle + call _close + pop cx + push ds + mov ah, [bp+arg_0] + mov ds, [bp+var_6] + mov si, [bp+var_8] + int 0F2h + pop ds + push [bp+var_A] + push [bp+var_C] + call sub_318E + add sp, 4 + +loc_E4D4: ; CODE XREF: sub_E450+Aj + pop si + leave + retn 6 +sub_E450 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +; int __cdecl __far sub_E4D9(char *path) +sub_E4D9 proc far ; CODE XREF: sub_A719+7P sub_AE6D+2CP ... + +_path = dword ptr 6 + + push bp + mov bp, sp + push word ptr [bp+_path+2] + push word ptr [bp+_path] ; path + push 6 ; char + call sub_E450 + pop bp + retf +sub_E4D9 endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push word ptr [bp+8] + push word ptr [bp+6] + push 7 + call sub_E450 + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_E4F9 proc far ; CODE XREF: sub_A719+FP sub_AE6D+34P ... + push bp + mov bp, sp + cmp byte_12B0E, 0 + jz short loc_E507 + mov ah, 0 + int 0F2h + +loc_E507: ; CODE XREF: sub_E4F9+8j + pop bp + retf +sub_E4F9 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_E509 proc far ; CODE XREF: sub_AE6D+15P _main+1A2P ... + push bp + mov bp, sp + cmp byte_12B0E, 0 + jz short loc_E517 + mov ah, 3 + int 0F2h + +loc_E517: ; CODE XREF: sub_E509+8j + pop bp + retf +sub_E509 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_E519 proc far ; CODE XREF: sub_A7B5+29P sub_A8AD+38P + push bp + mov bp, sp + cmp byte_12B0E, 0 + jz short loc_E527 + mov ah, 2 + int 0F2h + +loc_E527: ; CODE XREF: sub_E519+8j + pop bp + retf +sub_E519 endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + cmp byte_12B0E, 0 + jz short loc_E537 + mov ah, 1 + int 0F2h + +loc_E537: ; CODE XREF: seg011:0151j + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + cmp byte_12B0E, 0 + jz short loc_E547 + mov ah, 0Fh + int 0F2h + +loc_E547: ; CODE XREF: seg011:0161j + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_E549 proc far ; CODE XREF: _main:loc_B0D6P + push bp + mov bp, sp + mov ah, 9 + int 0F2h + mov byte_12B0E, al + mov al, byte_12B0E + cbw + pop bp + retf +sub_E549 endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + cmp word ptr [bp+6], 0 + jz short loc_E573 + cmp byte_12B0E, 0 + jz short loc_E573 + add word ptr [bp+6], 400h + mov ax, [bp+6] + int 0F2h + +loc_E573: ; CODE XREF: seg011:0180j seg011:0187j + pop bp + retf +seg011 ends + +; --------------------------------------------------------------------------- +; =========================================================================== + +; Segment type: Pure code +seg012 segment byte public 'CODE' use16 + assume cs:seg012 + ;org 5 + assume es:nothing, ss:nothing, ds:dseg, fs:nothing, gs:nothing + push bp + mov bp, sp + push si + push di + push 800h + call sub_2621 + pop cx + mov word ptr dword_13EEA+2, dx + mov word ptr dword_13EEA, ax + push large dword ptr [bp+6] + call sub_1108 + xor si, si + jmp short loc_E5AF +; --------------------------------------------------------------------------- + +loc_E597: ; CODE XREF: seg012:0042j + les bx, [bp+6] + add bx, si + mov al, es:[bx] + mov [si+1C70h], al + mov bx, [bp+6] + add bx, si + cmp byte ptr es:[bx], 0 + jz short loc_E5B4 + inc si + +loc_E5AF: ; CODE XREF: seg012:0025j + cmp si, 0Dh + jl short loc_E597 + +loc_E5B4: ; CODE XREF: seg012:003Cj + push large [dword_13EEA] + push 800h + call sub_FD8 + call sub_10F8 + xor si, si + jmp short loc_E60D +; --------------------------------------------------------------------------- + +loc_E5CA: ; CODE XREF: seg012:00A0j + mov ax, si + shl ax, 5 + les bx, dword_13EEA + add bx, ax + cmp byte ptr es:[bx], 0 + jz short loc_E612 + xor di, di + jmp short loc_E607 +; --------------------------------------------------------------------------- + +loc_E5DF: ; CODE XREF: seg012:009Aj + mov ax, si + shl ax, 5 + les bx, dword_13EEA + add bx, ax + cmp byte ptr es:[bx+di+3], 0 + jz short loc_E60C + mov ax, si + shl ax, 5 + les bx, dword_13EEA + add bx, ax + mov al, es:[bx+di+3] + not al + mov es:[bx+di+3], al + inc di + +loc_E607: ; CODE XREF: seg012:006Dj + cmp di, 0Dh + jl short loc_E5DF + +loc_E60C: ; CODE XREF: seg012:007Fj + inc si + +loc_E60D: ; CODE XREF: seg012:0058j + cmp si, 40h ; '@' + jl short loc_E5CA + +loc_E612: ; CODE XREF: seg012:0069j + mov word_13EF4, si + pop di + pop si + pop bp + retf 4 +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push large [dword_13EEA] + call _registerbgifont + add sp, 4 + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_E62E proc near ; CODE XREF: sub_E783+24p + +arg_0 = dword ptr 4 + + push bp + mov bp, sp + push si + xor si, si + jmp short loc_E66F +; --------------------------------------------------------------------------- + +loc_E636: ; CODE XREF: sub_E62E+44j + les bx, [bp+arg_0] + add bx, si + mov al, es:[bx] + cbw + push ax ; ch + call _toupper + pop cx + mov dx, word_13EF2 + shl dx, 5 + les bx, dword_13EEA + add bx, dx + push ax + mov al, es:[bx+si+3] + cbw + pop dx + cmp dx, ax + jnz short loc_E674 + les bx, [bp+arg_0] + add bx, si + cmp byte ptr es:[bx], 0 + jnz short loc_E66E + mov ax, 1 + jmp short loc_E676 +; --------------------------------------------------------------------------- + +loc_E66E: ; CODE XREF: sub_E62E+39j + inc si + +loc_E66F: ; CODE XREF: sub_E62E+6j + cmp si, 0Dh + jl short loc_E636 + +loc_E674: ; CODE XREF: sub_E62E+2Ej + xor ax, ax + +loc_E676: ; CODE XREF: sub_E62E+3Ej + pop si + pop bp + retn 4 +sub_E62E endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_E67B proc near ; CODE XREF: sub_E783+F9p + +arg_0 = word ptr 4 +arg_2 = dword ptr 6 + + push bp + mov bp, sp + xor dx, dx + jmp short loc_E68E +; --------------------------------------------------------------------------- + +loc_E682: ; CODE XREF: sub_E67B+16j + les bx, [bp+arg_2] + add bx, dx + mov al, byte_13EF7 + xor es:[bx], al + inc dx + +loc_E68E: ; CODE XREF: sub_E67B+5j + cmp dx, [bp+arg_0] + jb short loc_E682 + pop bp + retn 6 +sub_E67B endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_E697 proc near ; CODE XREF: sub_E6DA+14p sub_E6DA+34p ... + +var_1 = byte ptr -1 + + enter 2, 0 + cmp word_13F0F, 0 + jnz short loc_E6AF + push large [off_13EFC] + push 100h + call sub_FD8 + +loc_E6AF: ; CODE XREF: sub_E697+9j + les bx, off_13EFC + add bx, word_13F0F + mov al, es:[bx] + mov [bp+var_1], al + mov al, byte_13EF7 + xor [bp+var_1], al + inc word_13F0F + cmp word_13F0F, 100h + jb short loc_E6D5 + mov word_13F0F, 0 + +loc_E6D5: ; CODE XREF: sub_E697+36j + mov al, [bp+var_1] + leave + retn +sub_E697 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_E6DA proc near ; CODE XREF: sub_E783+C8p + +var_C = dword ptr -0Ch +var_8 = dword ptr -8 +var_3 = byte ptr -3 +var_2 = byte ptr -2 +var_1 = byte ptr -1 +arg_0 = word ptr 4 + + enter 0Ch, 0 + mov [bp+var_8], 0 + mov [bp+var_C], 0 + call sub_E697 + mov [bp+var_3], al + inc [bp+var_8] + jmp short loc_E772 +; --------------------------------------------------------------------------- + +loc_E6FA: ; CODE XREF: sub_E6DA+44j sub_E6DA+A1j + les bx, off_13EF8 + add bx, word ptr [bp+var_C] + mov al, [bp+var_3] + mov es:[bx], al + mov [bp+var_1], al + inc [bp+var_C] + call sub_E697 + mov [bp+var_3], al + inc [bp+var_8] + mov al, [bp+var_1] + cmp al, [bp+var_3] + jnz short loc_E6FA + les bx, off_13EF8 + add bx, word ptr [bp+var_C] + mov al, [bp+var_3] + +loc_E72A: ; CODE XREF: sub_E6DA+96j + mov es:[bx], al + inc [bp+var_C] + call sub_E697 + mov [bp+var_2], al + inc [bp+var_8] + jmp short loc_E751 +; --------------------------------------------------------------------------- + +loc_E73D: ; CODE XREF: sub_E6DA+7Bj + les bx, off_13EF8 + add bx, word ptr [bp+var_C] + mov al, [bp+var_1] + mov es:[bx], al + inc [bp+var_C] + dec [bp+var_2] + +loc_E751: ; CODE XREF: sub_E6DA+61j + cmp [bp+var_2], 0 + ja short loc_E73D + call sub_E697 + mov [bp+var_3], al + inc [bp+var_8] + cmp al, [bp+var_1] + jnz short loc_E772 + les bx, off_13EF8 + add bx, word ptr [bp+var_C] + mov al, [bp+var_1] + jmp short loc_E72A +; --------------------------------------------------------------------------- + +loc_E772: ; CODE XREF: sub_E6DA+1Ej sub_E6DA+8Aj + movzx eax, [bp+arg_0] + cmp eax, [bp+var_8] + jg loc_E6FA + leave + retn 2 +sub_E6DA endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_E783 proc far ; CODE XREF: sub_D631+DP + +var_4 = byte ptr -4 +var_3 = byte ptr -3 +arg_0 = dword ptr 6 + + enter 4, 0 + push si + lea ax, [bp+var_4] + push ss + push ax + push ds + push offset aXx ; "" + mov cx, 3 + call SCOPY@ + mov word_13EF2, 0 + xor si, si + jmp short loc_E7B3 +; --------------------------------------------------------------------------- + +loc_E7A3: ; CODE XREF: sub_E783+34j + push large [bp+arg_0] + call sub_E62E + or ax, ax + jnz short loc_E7B9 + inc word_13EF2 + inc si + +loc_E7B3: ; CODE XREF: sub_E783+1Ej + cmp si, word_13EF4 + jl short loc_E7A3 + +loc_E7B9: ; CODE XREF: sub_E783+29j + mov ax, word_13EF2 + shl ax, 5 + mov dx, word ptr dword_13EEA+2 + mov bx, word ptr dword_13EEA + add bx, ax + mov word ptr dword_13EEE+2, dx + mov word ptr dword_13EEE, bx + push ds + push offset unk_13F00 + call sub_1108 + les bx, dword_13EEE + push large dword ptr es:[bx+18h] + push 0 + call sub_1144 + les bx, dword_13EEE + mov al, es:[bx] + cmp al, [bp+var_4] + jnz short loc_E806 + mov al, es:[bx+1] + cmp al, [bp+var_3] + jnz short loc_E806 + mov byte_13EF6, 1 + jmp short loc_E80B +; --------------------------------------------------------------------------- + +loc_E806: ; CODE XREF: sub_E783+71j sub_E783+7Aj + mov byte_13EF6, 0 + +loc_E80B: ; CODE XREF: sub_E783+81j + mov word_13F0D, 0 + les bx, dword_13EEE + push word ptr es:[bx+14h] + call sub_2621 + pop cx + mov word ptr off_13EF8+2, dx + mov word ptr off_13EF8, ax + cmp byte_13EF6, 0 + jz short loc_E85D + push 100h + call sub_2621 + pop cx + mov word ptr off_13EFC+2, dx + mov word ptr off_13EFC, ax + mov word_13F0F, 0 + les bx, dword_13EEE + push word ptr es:[bx+10h] + call sub_E6DA + push large [off_13EFC] ; font + call _registerbgifont + add sp, 4 + jmp short loc_E87F +; --------------------------------------------------------------------------- + +loc_E85D: ; CODE XREF: sub_E783+A8j + push large [off_13EF8] + les bx, dword_13EEE + push word ptr es:[bx+10h] + call sub_FD8 + push large [off_13EF8] + les bx, dword_13EEE + push word ptr es:[bx+10h] + call sub_E67B + +loc_E87F: ; CODE XREF: sub_E783+D8j + call sub_10F8 + pop si + leave + retf 4 +sub_E783 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_E889 proc far ; CODE XREF: sub_D631+19P sub_D631+7DP ... + +var_4 = dword ptr -4 +arg_0 = word ptr 6 +arg_2 = dword ptr 8 + + enter 4, 0 + mov eax, [bp+arg_2] + mov [bp+var_4], eax + xor dx, dx + jmp short loc_E8C2 +; --------------------------------------------------------------------------- + +loc_E899: ; CODE XREF: sub_E889+3Cj + movzx eax, word_13F0D + les bx, dword_13EEE + cmp eax, es:[bx+14h] + jge short locret_E8C7 + les bx, off_13EF8 + add bx, word_13F0D + mov al, es:[bx] + les bx, [bp+var_4] + add bx, dx + mov es:[bx], al + inc word_13F0D + inc dx + +loc_E8C2: ; CODE XREF: sub_E889+Ej + cmp dx, [bp+arg_0] + jb short loc_E899 + +locret_E8C7: ; CODE XREF: sub_E889+1Fj + leave + retf 6 +sub_E889 endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + mov al, [bp+6] + cbw + mov word_13F0D, ax + pop bp + retf 2 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_E8D9 proc far ; CODE XREF: sub_D631+116P + push bp + mov bp, sp + push large [off_13EF8] ; font + call _registerbgifont + add sp, 4 + pop bp + retf +sub_E8D9 endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + les bx, dword_13EEE + mov ax, es:[bx+14h] + pop bp + retf +; --------------------------------------------------------------------------- + dd 0 + dd 0 +seg012 ends + +; --------------------------------------------------------------------------- +; =========================================================================== + +; Segment type: Pure code +seg013 segment byte public 'CODE' use16 + assume cs:seg013 +; START OF FUNCTION CHUNK FOR sub_E940 + assume es:nothing, ss:nothing, ds:dseg, fs:nothing, gs:nothing + +loc_E900: ; CODE XREF: sub_E940-2Aj sub_E940+1Dj + pop di + pop es + pop dx + pop cx + pop bx + pop si + pop ds + clc + retf +; --------------------------------------------------------------------------- + +loc_E909: ; CODE XREF: sub_E940+10j + mov al, byte ptr aBorlandCCopyri+2 + mov ah, byte ptr aBorlandCCopyri ; "Borland C++ - Copyright 1993 Borland In"... + ; Hack (fnclex) + db 0cdh + db 037h + db 0e2h + test ah, 80h + jz short loc_E900 + not al + and al, ah + jmp loc_EA55 +; --------------------------------------------------------------------------- + +loc_E91F: ; CODE XREF: sub_E940+41j + les di, [si+6] + test bl, 8 + jnz short loc_E92F + mov bx, es + and bx, 0F000h + mov es, bx + assume es:nothing + +loc_E92F: ; CODE XREF: sub_E940-1Bj + test byte ptr es:[di], 80h + jnz short loc_E936 + inc di + +loc_E936: ; CODE XREF: sub_E940-Dj + mov bx, es:[di] + xchg bh, bl + jmp short loc_E986 +; END OF FUNCTION CHUNK FOR sub_E940 +; --------------------------------------------------------------------------- + jmp short loc_E9A1 +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_E940 proc far ; CODE XREF: seg000:13CCP + +; FUNCTION CHUNK AT 0000 SIZE 0000003D BYTES + + push ds + push si + push bx + push cx + push dx + push es + push di + mov ds, ax + mov al, byte ptr aBorlandCCopyri+6 + or al, al + mov bx, ax + jz short loc_E909 + mov si, 33h ; '3' + ; Hack (fnstenv byte ptr [si]) + db 0d9h + db 034h + wait + mov ax, [si+2] + test al, 80h + jz short loc_E900 + fclex + mov dx, ax + mov al, [si] + mov dh, dl + or al, 40h + and dl, al + and dl, 7Fh + mov [si+2], dl + ; The original executable has two wait instructions here, but TASM + ; would add a third one for some reason? + wait + fldenv byte ptr [si] + not al + and al, dh + or bx, word ptr aBorlandCCopyri+7 + cmp bl, 3 + jge short loc_E91F + mov bx, [si+8] + +loc_E986: ; CODE XREF: sub_E940-5j + and bh, 7 + mov dh, bl + and dh, 0C0h + cmp dh, 0C0h ; '' + jz short loc_E996 + and bl, 38h + +loc_E996: ; CODE XREF: sub_E940+51j + wait + sti + test al, 1 + jz short loc_E9A1 + mov al, 40h ; '@' + jmp loc_EA55 +; --------------------------------------------------------------------------- + +loc_E9A1: ; CODE XREF: seg013:003Dj sub_E940+5Aj + test al, 2 + jz short loc_E9FA + mov cx, 8 + +loc_E9A8: ; CODE XREF: sub_E940+6Ej + call sub_EA68 + wait + fincstp + loop loc_E9A8 + mov ax, bx + shr ax, 1 + and al, 9Ch + cmp al, 80h ; '' + jz short loc_E9C2 + cmp al, 94h ; '' + jz short loc_E9C2 + and al, 98h + cmp al, 8 + +loc_E9C2: ; CODE XREF: sub_E940+78j sub_E940+7Cj + jz short loc_E9F8 + ; Hack (fnstcw word ptr ds:051h) + db 0d9h + db 03eh + db 051h + db 000h + wait + or byte ptr ds:051h, 2 + wait + fldcw word ptr ds:051h + les di, [si+0Ah] + assume es:nothing + cmp bx, 30h ; '0' + jnz short loc_E9E1 + wait + fld dword ptr es:[di] + jmp short loc_E9EB +; --------------------------------------------------------------------------- + +loc_E9E1: ; CODE XREF: sub_E940+99j + cmp bx, 430h + jnz short loc_E9F1 + wait + fld qword ptr es:[di] + +loc_E9EB: ; CODE XREF: sub_E940+9Fj + call sub_EA68 + mov bx, 0DEF9h + +loc_E9F1: ; CODE XREF: sub_E940+A5j + wait + mov di, word ptr aBorlandCCopyri+0Dh + jmp short loc_EA2B +; --------------------------------------------------------------------------- + +loc_E9F8: ; CODE XREF: sub_E940:loc_E9C2j + jmp short loc_EA43 +; --------------------------------------------------------------------------- + +loc_E9FA: ; CODE XREF: sub_E940+63j + mov ah, byte ptr aBorlandCCopyri+2 + not ah + and ah, al + and ah, 7Fh + jnz short loc_EA55 + test al, 5 + jnz short loc_EA19 + test al, 18h + jz short loc_EA47 + mov ax, bx + shr ax, 1 + and al, 0E8h + cmp al, 88h ; '' + jnz short loc_EA47 + +loc_EA19: ; CODE XREF: sub_E940+C9j + ; Hack (fnstcw word ptr ds:051h) + db 0d9h + db 03eh + db 051h + db 000h + wait + mov ax, word ptr ds:051h + or byte ptr ds:051h, 3Fh + wait + fldcw word ptr ds:051h + +loc_EA2B: ; CODE XREF: sub_E940+B6j + push cs + call near ptr sub_EAB5 + add sp, 0Ah + fstsw word ptr ds:051h + fclex + mov ax, word ptr ds:051h + and al, 3Fh + or byte ptr aBorlandCCopyri+25h, al + +loc_EA43: ; CODE XREF: sub_E940:loc_E9F8j + wait + fldcw word ptr [si] + clc + +loc_EA47: ; CODE XREF: sub_E940+CDj sub_E940+D7j ... + pop di + pop es + pop dx + pop cx + pop bx + pop si + pop ds + jb short locret_EA54 + pop ax + pop ax + pop ax + iret +; --------------------------------------------------------------------------- + +locret_EA54: ; CODE XREF: sub_E940+10Ej + retf +; --------------------------------------------------------------------------- + +loc_EA55: ; CODE XREF: sub_E940-24j sub_E940+5Ej ... + xor dx, dx + mov bx, ax + +loc_EA59: ; CODE XREF: sub_E940+11Cj + inc dx + shr bx, 1 + jnb short loc_EA59 + mov word ptr aBorlandCCopyri+9, dx + mov ax, 29h ; ')' + stc + jmp short loc_EA47 +sub_E940 endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + + +sub_EA68 proc near ; CODE XREF: sub_E940:loc_E9A8p + ; sub_E940:loc_E9EBp + wait + fxam + fstsw word ptr ds:051h + wait + mov ah, byte ptr aDivideError+7 + sahf + jnb short loc_EA7B + jnz short loc_EA7D + retn +; --------------------------------------------------------------------------- + +loc_EA7B: ; CODE XREF: sub_EA68+Ej + jz short loc_EA82 + +loc_EA7D: ; CODE XREF: sub_EA68+10j + jb short locret_EA81 + jnp short loc_EA89 + +locret_EA81: ; CODE XREF: sub_EA68:loc_EA7Dj + retn +; --------------------------------------------------------------------------- + +loc_EA82: ; CODE XREF: sub_EA68:loc_EA7Bj + wait + fstp st + wait + fldz + retn +; --------------------------------------------------------------------------- + +loc_EA89: ; CODE XREF: sub_EA68+17j + wait + fstp tbyte ptr aBorlandCCopyri+27h + wait + fild qword ptr aBorlandCCopyri+27h + mov ax, word ptr aDivideError+4 + mov dx, ax + and dh, 80h + wait + fstp tbyte ptr aBorlandCCopyri+27h + xor ah, dh + wait + add ax, word ptr aDivideError+4 + sub ax, 403Eh + xor ah, dh + mov word ptr aDivideError+4, ax + wait + fld tbyte ptr aBorlandCCopyri+27h + retn +sub_EA68 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_EAB5 proc far ; CODE XREF: sub_E940+ECp + mov word ptr aBorlandCCopyri+0Dh, di + mov dx, 0EA90h + push dx + mov dx, bx + and bl, 0C0h + cmp bl, 0C0h ; '' + jz short loc_EACA + or dl, 7 + +loc_EACA: ; CODE XREF: sub_EAB5+10j + or dh, 0D8h + xchg dh, dl + push dx + mov dx, 269Bh + push dx + mov dx, ss + xor dx, word ptr aBorlandCCopyri+7 + push dx + mov dx, sp + add dx, 2 + push dx + les bx, [si+0Ah] + retf +sub_EAB5 endp ; sp-analysis failed + +; --------------------------------------------------------------------------- + dd 0 + dd 0 + dw 0 + db 0 + ; Hack. Let's better use bytes for accuracy here. +tbyte_EAF0 db 035h, 0c2h, 068h, 021h, 0a2h, 0dah, 00fh, 0c9h, 0feh, 03fh +tbyte_EAFA db 035h, 0c2h, 068h, 021h, 0a2h, 0dah, 00fh, 0c9h, 0ffh, 03fh +flt_EB04 dd -5.1110893e38 ; DATA XREF: seg013:0257r seg013:0265r +flt_EB08 dd -5.1117124e38 ; DATA XREF: seg013:03C7r + db 0, 4Ah, 0C0h, 0FFh +flt_EB10 dd 0.5 ; DATA XREF: seg013:045Cr +tbyte_EB14 db 085h, 064h, 0deh, 0f9h, 033h, 0f3h, 004h, 0b5h, 0ffh, 03fh +flt_EB1E dd 3.4028237e38 ; DATA XREF: seg013:030Dr seg013:0445r +; --------------------------------------------------------------------------- + mov cl, 0 + jmp short loc_EB2C +; --------------------------------------------------------------------------- + mov cl, 2 + jmp short loc_EB2C +; --------------------------------------------------------------------------- + mov cl, 4 + +loc_EB2C: ; CODE XREF: seg013:0224j seg013:0228j + wait + fxam + push bp + mov bp, sp + lea sp, [bp-2] + fstsw word ptr [bp-2] + wait + mov ah, [bp-1] + sahf + jb short loc_EB4F + jnz short loc_EB70 + cmp cl, 2 + jnz short loc_EB4D + wait + fstp st + wait + fld1 + +loc_EB4D: ; CODE XREF: seg013:0245j + jmp short loc_EB6D +; --------------------------------------------------------------------------- + +loc_EB4F: ; CODE XREF: seg013:023Ej + jz short loc_EB5F + jnp short loc_EB5F + wait + fstp st + wait + fld cs:flt_EB04 + wait + ftst + +loc_EB5F: ; CODE XREF: seg013:loc_EB4Fj + ; seg013:0251j + jmp short loc_EB6D +; --------------------------------------------------------------------------- + +loc_EB61: ; CODE XREF: seg013:028Ej + wait + fcompp + wait + fld cs:flt_EB04 + wait + ftst + +loc_EB6D: ; CODE XREF: seg013:loc_EB4Dj + ; seg013:loc_EB5Fj + jmp loc_EC17 +; --------------------------------------------------------------------------- + +loc_EB70: ; CODE XREF: seg013:0240j + wait + fabs + wait + fld tbyte ptr cs:tbyte_EAF0 + wait + fxch st(1) + wait + fprem + mov ch, 2 + and ch, ah + shr ch, 1 + fstsw word ptr [bp-2] + wait + mov ah, [bp-1] + sahf + jp short loc_EB61 + mov al, 3 + and al, ah + shl ah, 1 + shl ah, 1 + rcl al, 1 + add al, 0FCh ; '' + rcl al, 1 + cmp cl, 2 + jnz short loc_EBA7 + add al, cl + mov ch, 0 + +loc_EBA7: ; CODE XREF: seg013:02A1j + and al, 7 + test al, 1 + jz short loc_EBB2 + wait + fsubp st(1), st + jmp short loc_EBB5 +; --------------------------------------------------------------------------- + +loc_EBB2: ; CODE XREF: seg013:02ABj + wait + fstp st(1) + +loc_EBB5: ; CODE XREF: seg013:02B0j + wait + fptan + cmp cl, 4 + jz short loc_EBE6 + test al, 3 + jp short loc_EBC4 + wait + fxch st(1) + +loc_EBC4: ; CODE XREF: seg013:02BFj + wait + fld st(1) + wait + fmul st, st + wait + fxch st(1) + wait + fmul st, st + wait + faddp st(1), st + wait + fsqrt + shr al, 1 + shr al, 1 + xor al, ch + jz short loc_EBE1 + wait + fchs + +loc_EBE1: ; CODE XREF: seg013:02DCj + wait + fdivp st(1), st + jmp short loc_EC17 +; --------------------------------------------------------------------------- + +loc_EBE6: ; CODE XREF: seg013:02BBj + mov ah, al + shr ah, 1 + and ah, 1 + xor ah, ch + jz short loc_EBF4 + wait + fchs + +loc_EBF4: ; CODE XREF: seg013:02EFj + test al, 3 + jp short loc_EC14 + wait + fxch st(1) + wait + ftst + fstsw word ptr [bp-2] + wait + test byte ptr [bp-1], 40h + jz short loc_EC14 + wait + fcompp + wait + fld cs:flt_EB1E + jmp short loc_EC17 +; --------------------------------------------------------------------------- + +loc_EC14: ; CODE XREF: seg013:02F6j seg013:0307j + wait + fdivp st(1), st + +loc_EC17: ; CODE XREF: seg013:loc_EB6Dj + ; seg013:02E4j ... + mov sp, bp + pop bp + retn +; --------------------------------------------------------------------------- + wait + fxam + push bp + mov bp, sp + lea sp, [bp-2] + fstsw word ptr [bp-2] + wait + mov ah, [bp-1] + sahf + xchg ax, cx + jb short loc_EC34 + jnz short loc_EC4E + jmp short loc_EC80 +; --------------------------------------------------------------------------- + +loc_EC34: ; CODE XREF: seg013:032Ej + jz short loc_EC80 + jnp short loc_EC80 + wait + fstp st + wait + fld tbyte ptr cs:tbyte_EAFA + jmp short loc_EC78 +; --------------------------------------------------------------------------- + +loc_EC43: ; CODE XREF: seg013:0360j + wait + fcompp + wait + fld tbyte ptr cs:tbyte_EAF0 + jmp short loc_EC78 +; --------------------------------------------------------------------------- + +loc_EC4E: ; CODE XREF: seg013:0330j + wait + fabs + wait + fld1 + wait + fcom st(1) + fstsw word ptr [bp-2] + wait + mov ah, [bp-1] + sahf + jz short loc_EC43 + jnb short loc_EC67 + wait + fxch st(1) + +loc_EC67: ; CODE XREF: seg013:0362j + wait + fpatan + jnb short loc_EC78 + wait + fld tbyte ptr cs:tbyte_EAFA + wait + fsubp st(1), st + xor ch, 2 + +loc_EC78: ; CODE XREF: seg013:0341j seg013:034Cj ... + test ch, 2 + jz short loc_EC80 + wait + fchs + +loc_EC80: ; CODE XREF: seg013:0332j + ; seg013:loc_EC34j ... + mov sp, bp + pop bp + retn +; --------------------------------------------------------------------------- + wait + fld1 + jmp short loc_EC91 +; --------------------------------------------------------------------------- + wait + fldlg2 + jmp short loc_EC91 +; --------------------------------------------------------------------------- + wait + fldln2 + +loc_EC91: ; CODE XREF: seg013:0387j seg013:038Cj + wait + fxch st(1) + push bp + mov bp, sp + wait + fxam + lea sp, [bp-0Ah] + fstsw word ptr [bp-0Ah] + wait + mov ah, [bp-9] + sahf + jb short loc_ECB4 + jz short loc_ECAF + test ah, 2 + jz short loc_ECD1 + +loc_ECAF: ; CODE XREF: seg013:03A8j + wait + fstp st + jmp short loc_ECC3 +; --------------------------------------------------------------------------- + +loc_ECB4: ; CODE XREF: seg013:03A6j + jz short loc_ECCC + wait + fstp st(1) + jnp short loc_ECCC + wait + fstp st(1) + test ah, 2 + jz short loc_ECF5 + +loc_ECC3: ; CODE XREF: seg013:03B2j + wait + fstp st + wait + fld cs:flt_EB08 + +loc_ECCC: ; CODE XREF: seg013:loc_ECB4j + ; seg013:03B9j + wait + ftst + jmp short loc_ECF5 +; --------------------------------------------------------------------------- + +loc_ECD1: ; CODE XREF: seg013:03ADj + wait + fld st + wait + fstp tbyte ptr [bp-0Ah] + wait + cmp word ptr [bp-2], 3FFFh + jnz short loc_ECF2 + cmp word ptr [bp-4], 8000h + jnz short loc_ECF2 + wait + fld1 + wait + fsubp st(1), st + wait + fyl2xp1 + jmp short loc_ECF5 +; --------------------------------------------------------------------------- + +loc_ECF2: ; CODE XREF: seg013:03DEj seg013:03E5j + wait + fyl2x + +loc_ECF5: ; CODE XREF: seg013:03C1j seg013:03CFj ... + mov sp, bp + pop bp + retn +; --------------------------------------------------------------------------- + sub cx, cx + jmp short loc_ED0F +; --------------------------------------------------------------------------- + wait + fldl2t + mov cl, 1 + wait + fxch st(1) + jmp short loc_ED0F +; --------------------------------------------------------------------------- + wait + fldl2e + mov cl, 1 + wait + fxch st(1) + +loc_ED0F: ; CODE XREF: seg013:03FBj seg013:0405j + wait + fxam + push bp + mov bp, sp + lea sp, [bp-4] + fstsw word ptr [bp-4] + jcxz short loc_ED21 + wait + fxch st(1) + +loc_ED21: ; CODE XREF: seg013:041Cj + wait + mov ah, [bp-3] + sahf + jb short loc_ED38 + jnz short loc_ED53 + wait + fstp st + jcxz short loc_ED32 + wait + fstp st + +loc_ED32: ; CODE XREF: seg013:042Dj + wait + fld1 + jmp loc_EDDC +; --------------------------------------------------------------------------- + +loc_ED38: ; CODE XREF: seg013:0426j + jcxz short loc_ED3D + wait + fstp st + +loc_ED3D: ; CODE XREF: seg013:loc_ED38j + jz short loc_ED4D + jnp short loc_ED4D + wait + fstp st + wait + fld cs:flt_EB1E + jmp loc_EDD1 +; --------------------------------------------------------------------------- + +loc_ED4D: ; CODE XREF: seg013:loc_ED3Dj + ; seg013:043Fj + wait + ftst + jmp loc_EDDC +; --------------------------------------------------------------------------- + +loc_ED53: ; CODE XREF: seg013:0428j + jcxz short loc_ED58 + wait + fmulp st(1), st + +loc_ED58: ; CODE XREF: seg013:loc_ED53j + wait + fabs + wait + fcom cs:flt_EB10 + fstsw word ptr [bp-4] + wait + test byte ptr [bp-3], 41h + jz short loc_ED77 + wait + f2xm1 + wait + fld1 + wait + faddp st(1), st + jmp short loc_EDD1 +; --------------------------------------------------------------------------- + +loc_ED77: ; CODE XREF: seg013:046Aj + wait + fld1 + wait + fld st(1) + fstcw word ptr [bp-4] + wait + fscale + or byte ptr [bp-3], 0Fh + wait + fldcw word ptr [bp-4] + wait + frndint + and byte ptr [bp-3], 0F3h + wait + fldcw word ptr [bp-4] + wait + fist word ptr [bp-2] + wait + fxch st(1) + wait + fchs + wait + fxch st(1) + wait + fscale + wait + fstp st(1) + wait + fsubp st(1), st + wait + f2xm1 + wait + fld1 + wait + faddp st(1), st + shr word ptr [bp-2], 1 + jnb short loc_EDC4 + wait + fld tbyte ptr cs:tbyte_EB14 + wait + fmulp st(1), st + +loc_EDC4: ; CODE XREF: seg013:04B9j + wait + fild word ptr [bp-2] + wait + fxch st(1) + wait + fscale + wait + fstp st(1) + +loc_EDD1: ; CODE XREF: seg013:044Aj seg013:0475j + test ah, 2 + jz short loc_EDDC + wait + fld1 + wait + fdivrp st(1), st + +loc_EDDC: ; CODE XREF: seg013:0435j seg013:0450j ... + mov sp, bp + pop bp + retn + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +e087_Entry proc far ; DATA XREF: seg000:1548o + +var_2 = word ptr -2 +arg_1 = byte ptr 7 + + push bp + mov bp, sp + push ax + push si + push ds + test [bp+arg_1], 2 + jz short loc_EDED + sti + +loc_EDED: ; CODE XREF: e087_Entry+Aj + lds si, [bp+2] + mov ax, ds + xor ax, ss:27h + mov ds, ax + mov ax, [si-1] + sub al, 34h ; '4' + cmp al, 8 + jnb short loc_EE57 + cmp ax, 0E303h + jz short loc_EE2C + cmp ax, 0E007h + jnz short loc_EE1D + cmp byte ptr ss:26h, 2 + jge short loc_EE1D + fstsw [bp+var_2] + inc word ptr [bp+2] + jmp short loc_EE7A +; --------------------------------------------------------------------------- + +loc_EE1D: ; CODE XREF: e087_Entry+2Aj + ; e087_Entry+32j + sub si, 2 + mov byte ptr [si], 9Bh ; '' + add byte ptr [si+1], 0A4h ; '' + +loc_EE27: ; CODE XREF: e087_Entry+AAj + mov [bp+2], si + jmp short loc_EE7A +; --------------------------------------------------------------------------- + +loc_EE2C: ; CODE XREF: e087_Entry+25j + fninit + inc word ptr [bp+2] + mov word ptr ss:20h, 4100h + mov word ptr ss:22h, 3Fh ; '?' + mov word ptr ss:45h, 0 + mov ax, ss:31h + mov ss:2Dh, ax + mov word ptr ss:24h, 0 + jmp short loc_EE7A +; --------------------------------------------------------------------------- + +loc_EE57: ; CODE XREF: e087_Entry+20j + ja short loc_EE7F + test ah, 20h + jnz short loc_EE8C + sub si, 2 + mov [bp+2], si + mov byte ptr [si], 9Bh ; '' + inc si + mov al, ah + and ax, 7C0h + shr al, 1 + shr al, 1 + shr al, 1 + xor al, 18h + add ax, 0D826h + mov [si], ax + +loc_EE7A: ; CODE XREF: e087_Entry+3Bj + ; e087_Entry+4Aj ... + pop ds + pop si + pop ax + pop bp + iret +; --------------------------------------------------------------------------- + +loc_EE7F: ; CODE XREF: e087_Entry:loc_EE57j + cmp al, 9 + ja short loc_EE8C + sub si, 2 + mov word ptr [si], 9B90h + jmp short loc_EE27 +; --------------------------------------------------------------------------- + +loc_EE8C: ; CODE XREF: e087_Entry+7Cj + ; e087_Entry+A1j + int 3 ; Trap to Debugger + jmp short loc_EE7A +e087_Entry endp + +; --------------------------------------------------------------------------- + db 22h, 2, 26h, 2, 2Ah, 2, 1Bh, 3, 8Eh, 3, 84h, 3, 89h + db 3, 7, 4, 0F9h, 3, 0FDh, 3 +; --------------------------------------------------------------------------- + +e087_Shortcut: ; DATA XREF: seg000:1552o + sti + push ax + push si + push es + push bp + mov bp, sp + les si, [bp+8] + lods byte ptr es:[si] + mov [bp+8], si + cbw + xchg ax, si + push cx + call word ptr cs:[si+5A3h] + pop cx + pop bp + pop es + pop si + pop ax + iret +seg013 ends + +; =========================================================================== + +; Segment type: Pure code +seg014 segment byte public 'CODE' use16 + assume cs:seg014 + assume es:nothing, ss:nothing, ds:dseg, fs:nothing, gs:nothing + db 87h, 0E2h, 0, 0Ch, 18h, 24h, 30h, 3Ch, 48h, 54h, 60h + db 6Ch, 78h, 84h, 90h, 9Ch, 0A8h, 0B4h + +; =============== S U B R O U T I N E ======================================= + + +sub_EED2 proc near ; CODE XREF: sub_EF6E+8p sub_EFB3-19p ... + push dx + push si + mov dx, [si+6] + and dh, 7Fh + or dx, [si] + or dx, [si+2] + or dx, [si+4] + jnz short loc_EF04 + cmp bx, 0FFFFh + jz short loc_EF00 + cmp word ptr [bx+8], 4001h + jl short loc_EF00 + mov dx, [bx+6] + and dh, 7Fh + or dx, [bx] + or dx, [bx+2] + or dx, [bx+4] + jnz short loc_EF44 + +loc_EF00: ; CODE XREF: sub_EED2+15j sub_EED2+1Cj + clc + +loc_EF01: ; CODE XREF: sub_EED2+82j + pop si + pop dx + retn +; --------------------------------------------------------------------------- + +loc_EF04: ; CODE XREF: sub_EED2+10j + cmp bx, 0FFFFh + jz short loc_EF46 + cmp word ptr [bx+8], 4001h + jl short loc_EF46 + mov dx, [bx+6] + and dh, 7Fh + or dx, [bx] + or dx, [bx+2] + or dx, [bx+4] + jz short loc_EF46 + mov dx, [si+6] + cmp dx, [bx+6] + ja short loc_EF46 + jb short loc_EF44 + mov dx, [si+4] + cmp dx, [bx+4] + ja short loc_EF46 + jb short loc_EF44 + mov dx, [si+2] + cmp dx, [bx+2] + ja short loc_EF46 + jb short loc_EF44 + mov dx, [si] + cmp dx, [bx] + ja short loc_EF46 + +loc_EF44: ; CODE XREF: sub_EED2+2Cj sub_EED2+56j ... + mov si, bx + +loc_EF46: ; CODE XREF: sub_EED2+35j sub_EED2+3Cj ... + push di + mov ch, 1 + call sub_115C9 + mov cx, 6 + cld + rep movsw + stc + pop di + jmp short loc_EF01 +sub_EED2 endp + +; --------------------------------------------------------------------------- +; START OF FUNCTION CHUNK FOR sub_EF6E + +loc_EF56: ; CODE XREF: sub_EF6E+13j sub_EF6E+1Cj + mov al, [si+0Ah] + +loc_EF59: ; CODE XREF: sub_EFB3-14j + mov [bp-5], al + mov word ptr [bp-4], 4001h + nop + jmp short loc_EFA1 +; --------------------------------------------------------------------------- + +loc_EF64: ; CODE XREF: sub_EF6E+1Aj + mov di, [bp+4] + nop + call sub_FD13 + +loc_EF6B: ; CODE XREF: sub_EF6E+Dj sub_EFB3-16j + jmp loc_F101 +; END OF FUNCTION CHUNK FOR sub_EF6E + +; =============== S U B R O U T I N E ======================================= + + +sub_EF6E proc near ; CODE XREF: sub_EFB3+24j + +; FUNCTION CHUNK AT 0096 SIZE 00000018 BYTES + + push bx + push di + mov bx, di + mov di, [bp+4] + nop + call sub_EED2 + pop di + pop bx + jb short loc_EF6B + cmp bx, 4001h + jl short loc_EF56 + mov al, [bp-6] + or al, al + jnz short loc_EF64 + jmp short loc_EF56 +sub_EF6E endp + +; --------------------------------------------------------------------------- +; START OF FUNCTION CHUNK FOR sub_EFB3 + +loc_EF8C: ; CODE XREF: sub_EFB3+2Aj + mov bx, 0FFFFh + mov al, [di+0Ah] + xor al, cl + mov si, di + mov di, [bp+4] + nop + call sub_EED2 + jb short loc_EF6B + jmp short loc_EF59 +; --------------------------------------------------------------------------- + +loc_EFA1: ; CODE XREF: sub_EF6E-Cj sub_EFB3+48j ... + mov ax, [si] + mov bx, [si+2] + mov cx, [si+4] + mov dx, [si+6] + jmp loc_F0EE +; END OF FUNCTION CHUNK FOR sub_EFB3 + +; =============== S U B R O U T I N E ======================================= + + +sub_EFAF proc near ; CODE XREF: sub_106E6+6Ep + ; seg014:1C67p ... + mov cl, 1 + jmp short loc_EFB5 +sub_EFAF endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_EFB3 proc near ; CODE XREF: seg014:0830p + ; sub_106E6+7Dp ... + +var_6 = byte ptr -6 +var_5 = byte ptr -5 +var_4 = word ptr -4 +var_2 = byte ptr -2 +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = word ptr 8 + +; FUNCTION CHUNK AT 00CC SIZE 00000023 BYTES + + mov cl, 0 + +loc_EFB5: ; CODE XREF: sub_EFAF+2j + push bp + mov bp, sp + lea sp, [bp-6] + push si + push di + mov si, [bp+arg_4] + mov di, [bp+arg_2] + mov al, cl + xor al, [di+0Ah] + xor al, [si+0Ah] + mov [bp+var_6], al + mov ax, [si+8] + mov bx, [di+8] + cmp ax, 4001h + jge short sub_EF6E + cmp bx, 4001h + jge short loc_EF8C + cmp ax, bx + jge short loc_EFEB + xor cl, [di+0Ah] + xchg ax, bx + xchg si, di + jmp short loc_EFEE +; --------------------------------------------------------------------------- + +loc_EFEB: ; CODE XREF: sub_EFB3+2Ej + mov cl, [si+0Ah] + +loc_EFEE: ; CODE XREF: sub_EFB3+36j + mov [bp+var_5], cl + mov cx, [si+8] + mov [bp+var_4], cx + cmp bx, 0C001h + jle short loc_EFA1 + sub ax, bx + cmp ax, 41h ; 'A' + jg short loc_EFA1 + mov bx, [di+2] + mov cx, [di+4] + mov dx, [di+6] + mov di, [di] + xchg ax, di + mov [bp+var_2], 0 + sub di, 8 + jl short loc_F031 + +loc_F019: ; CODE XREF: sub_EFB3+7Cj + mov [bp+var_2], al + mov al, ah + mov ah, bl + mov bl, bh + mov bh, cl + mov cl, ch + mov ch, dl + mov dl, dh + mov dh, 0 + sub di, 8 + jge short loc_F019 + +loc_F031: ; CODE XREF: sub_EFB3+64j + and di, 7 + jz short loc_F044 + +loc_F036: ; CODE XREF: sub_EFB3+8Fj + shr dx, 1 + rcr cx, 1 + rcr bx, 1 + rcr ax, 1 + rcr [bp+var_2], 1 + dec di + jnz short loc_F036 + +loc_F044: ; CODE XREF: sub_EFB3+81j + cmp [bp+var_6], 0 + jnz short loc_F067 + add ax, [si] + adc bx, [si+2] + adc cx, [si+4] + adc dx, [si+6] + jnb short loc_F0CE + rcr dx, 1 + rcr cx, 1 + rcr bx, 1 + rcr ax, 1 + rcr [bp+var_2], 1 + inc [bp+var_4] + jmp short loc_F0CE +; --------------------------------------------------------------------------- + +loc_F067: ; CODE XREF: sub_EFB3+95j + xor [bp+var_5], 1 + sub ax, [si] + sbb bx, [si+2] + sbb cx, [si+4] + sbb dx, [si+6] + jnb short loc_F090 + xor [bp+var_5], 1 + not dx + not cx + not bx + not ax + neg [bp+var_2] + cmc + adc ax, di + adc bx, di + adc cx, di + adc dx, di + +loc_F090: ; CODE XREF: sub_EFB3+C3j + mov si, 8 + +loc_F093: ; CODE XREF: sub_EFB3+FEj + or dh, dh + jnz short loc_F0CC + mov dh, dl + mov dl, ch + mov ch, cl + mov cl, bh + mov bh, bl + mov bl, ah + mov ah, al + mov al, [bp+var_2] + mov [bp+var_2], 0 + sub [bp+var_4], 8 + dec si + jge short loc_F093 + mov [bp+var_4], 0C001h + mov [bp+var_5], 0 + jmp short loc_F0EE +; --------------------------------------------------------------------------- + +loc_F0BE: ; CODE XREF: sub_EFB3:loc_F0CCj + dec [bp+var_4] + shl [bp+var_2], 1 + rcl ax, 1 + rcl bx, 1 + rcl cx, 1 + adc dx, dx + +loc_F0CC: ; CODE XREF: sub_EFB3+E2j + jns short loc_F0BE + +loc_F0CE: ; CODE XREF: sub_EFB3+A2j sub_EFB3+B2j + shl [bp+var_2], 1 + adc ax, di + adc bx, di + adc cx, di + adc dx, di + jnb short loc_F0E0 + rcr dx, 1 + inc [bp+var_4] + +loc_F0E0: ; CODE XREF: sub_EFB3+126j + cmp [bp+var_4], 4001h + jge short loc_F109 + cmp [bp+var_4], 0C001h + jle short loc_F112 + +loc_F0EE: ; CODE XREF: sub_EFB3-7j sub_EFB3+109j ... + cld + mov di, [bp+arg_0] + stosw + xchg ax, bx + stosw + xchg ax, cx + stosw + xchg ax, dx + stosw + mov ax, [bp+var_4] + stosw + mov al, [bp+var_5] + stosb + +loc_F101: ; CODE XREF: sub_EF6E:loc_EF6Bj + pop di + pop si + mov sp, bp + pop bp + retn 6 +; --------------------------------------------------------------------------- + +loc_F109: ; CODE XREF: sub_EFB3+132j + mov ch, 8 + mov [bp+var_4], 4001h + jmp short loc_F119 +; --------------------------------------------------------------------------- + +loc_F112: ; CODE XREF: sub_EFB3+139j + mov ch, 10h + mov [bp+var_4], 0C001h + +loc_F119: ; CODE XREF: sub_EFB3+15Dj + call sub_115C9 + mov [bp+var_5], 0 + sub ax, ax + mov bx, ax + mov cx, ax + cwd + jmp short loc_F0EE +sub_EFB3 endp + +; --------------------------------------------------------------------------- +; START OF FUNCTION CHUNK FOR sub_F17D + +loc_F129: ; CODE XREF: sub_F17D-31j sub_F17D-1Bj ... + mov ax, 4001h + +loc_F12C: ; CODE XREF: sub_F17D-2j + mov di, [bp+arg_0] + mov cl, [bp+var_6] + call sub_FCFD + +loc_F135: ; CODE XREF: sub_F17D-3Aj sub_F17D-22j ... + pop ax + jmp loc_F20D +; --------------------------------------------------------------------------- + +loc_F139: ; CODE XREF: sub_F17D+21j + push di + mov bx, di + mov di, [bp+arg_0] + call sub_EED2 + pop di + jb short loc_F135 + cmp word ptr [di+8], 0C001h + jle short loc_F164 + jmp short loc_F129 +; --------------------------------------------------------------------------- + +loc_F14E: ; CODE XREF: sub_F17D+25j + push si + mov bx, 0FFFFh + mov si, di + mov di, [bp+arg_0] + call sub_EED2 + pop si + jb short loc_F135 + cmp word ptr [si+8], 0C001h + jg short loc_F129 + +loc_F164: ; CODE XREF: sub_F17D-33j + mov di, [bp+arg_0] + call sub_FD13 + jmp short loc_F135 +; --------------------------------------------------------------------------- + +loc_F16C: ; CODE XREF: sub_F17D+35j + mov ch, 8 + call sub_115C9 + jmp short loc_F129 +; --------------------------------------------------------------------------- + +loc_F173: ; CODE XREF: sub_F17D+3Bj + mov ch, 10h + call sub_115C9 + +loc_F178: ; CODE XREF: sub_F17D+29j sub_F17D+2Dj + mov ax, 0C001h + jmp short loc_F12C +; END OF FUNCTION CHUNK FOR sub_F17D + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_F17D proc near ; CODE XREF: sub_105C5+12p + ; sub_106E6+74p ... + +var_6 = byte ptr -6 +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = word ptr 8 +arg_1A = word ptr 1Eh + +; FUNCTION CHUNK AT 0269 SIZE 00000054 BYTES + + push bp + mov bp, sp + push si + push di + cld + mov si, [bp+arg_4] + mov di, [bp+arg_2] + mov cl, [si+0Ah] + xor cl, [di+0Ah] + push cx + mov dx, 4001h + mov bx, [di+8] + mov cx, 0C001h + mov ax, [si+8] + cmp ax, dx + jge short loc_F139 + cmp bx, dx + jge short loc_F14E + cmp ax, cx + jle short loc_F178 + cmp bx, cx + jle short loc_F178 + add ax, bx + dec ax + cmp ax, 4001h + jge short loc_F16C + inc ax + cmp ax, 0C001h + jle short loc_F173 + push word ptr [si+6] + push word ptr [si+4] + push word ptr [si+2] + push word ptr [si] + sub sp, 4 + push word ptr [di+6] + push word ptr [di+4] + push word ptr [di+2] + push word ptr [di] + xchg ax, di + mov bp, sp + call sub_F213 + add sp, 14h + or dx, dx + js short loc_F1EB + dec di + shl si, 1 + rcl ax, 1 + rcl bx, 1 + rcl cx, 1 + rcl dx, 1 + +loc_F1EB: ; CODE XREF: sub_F17D+61j + shl si, 1 + adc ax, 0 + jnb short loc_F1FD + adc bx, ax + adc cx, ax + adc dx, ax + jnb short loc_F1FD + rcr dx, 1 + inc di + +loc_F1FD: ; CODE XREF: sub_F17D+73j sub_F17D+7Bj + mov si, di + mov di, [bp+arg_1A] + stosw + xchg ax, bx + stosw + xchg ax, cx + stosw + xchg ax, dx + stosw + xchg ax, si + stosw + pop ax + stosb + +loc_F20D: ; CODE XREF: sub_F17D-47j + pop di + pop si + pop bp + retn 6 +sub_F17D endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_F213 proc near ; CODE XREF: sub_F17D+59p + ; sub_1040E+28p + push di + sub di, di + mov cx, di + mov si, di + test byte ptr [bp+0Fh], 80h + jz short loc_F226 + mov cx, [bp+0] + mov si, [bp+2] + +loc_F226: ; CODE XREF: sub_F213+Bj + test byte ptr [bp+3], 80h + jz short loc_F23B + add cx, [bp+0Ch] + adc si, [bp+0Eh] + adc di, di + test byte ptr [bp+0Fh], 80h + jz short loc_F23B + dec di + +loc_F23B: ; CODE XREF: sub_F213+17j sub_F213+25j + sub bx, bx + mov ax, [bp+0Ch] + mul word ptr [bp+4] + add cx, ax + adc si, dx + adc di, 0 + mov ax, [bp+10h] + or ax, ax + jz short loc_F268 + mul word ptr [bp+0] + add cx, ax + adc si, dx + adc di, 0 + mov ax, [bp+10h] + mul word ptr [bp+2] + add si, ax + adc di, dx + adc bx, 0 + +loc_F268: ; CODE XREF: sub_F213+3Cj + mov ax, [bp+0Ch] + mul word ptr [bp+6] + add si, ax + adc di, dx + adc bx, 0 + mov ax, [bp+0Eh] + mul word ptr [bp+4] + add si, ax + adc di, dx + adc bx, 0 + mov ax, [bp+12h] + or ax, ax + jz short loc_F293 + mul word ptr [bp+0] + add si, ax + adc di, dx + adc bx, 0 + +loc_F293: ; CODE XREF: sub_F213+74j + sub cx, cx + push si + mov si, cx + mov ax, [bp+0Eh] + mul word ptr [bp+6] + add di, ax + adc bx, dx + adc cx, 0 + mov ax, [bp+10h] + or ax, ax + jz short loc_F2C3 + mul word ptr [bp+4] + add di, ax + adc bx, dx + adc cx, 0 + mov ax, [bp+10h] + mul word ptr [bp+6] + add bx, ax + adc cx, dx + adc si, 0 + +loc_F2C3: ; CODE XREF: sub_F213+97j + mov ax, [bp+12h] + or ax, ax + jz short loc_F2EE + mul word ptr [bp+2] + add di, ax + adc bx, dx + adc cx, 0 + adc si, 0 + mov ax, [bp+12h] + mul word ptr [bp+4] + add bx, ax + adc cx, dx + adc si, 0 + mov ax, [bp+12h] + mul word ptr [bp+6] + add cx, ax + adc si, dx + +loc_F2EE: ; CODE XREF: sub_F213+B5j + mov dx, si + xchg ax, di + pop si + pop di + retn +sub_F213 endp + +; --------------------------------------------------------------------------- +; START OF FUNCTION CHUNK FOR sub_F34A + +loc_F2F4: ; CODE XREF: sub_F34A+22j + mov si, di + mov di, [bp+arg_0] + nop + call sub_EED2 + jb short loc_F32E + cmp word ptr [bx+8], 4001h + jl short loc_F336 + call sub_FD13 + jmp short loc_F32E +; --------------------------------------------------------------------------- + +loc_F30B: ; CODE XREF: sub_F34A+27j + mov si, bx + mov bx, 0FFFFh + mov di, [bp+arg_0] + nop + call sub_EED2 + jb short loc_F32E + jmp short loc_F320 +; --------------------------------------------------------------------------- + +loc_F31B: ; CODE XREF: sub_F34A+2Dj + mov ch, 4 + +loc_F31D: ; CODE XREF: sub_F34A-Dj + call sub_115C9 + +loc_F320: ; CODE XREF: sub_F34A-31j + ; sub_F34A:loc_F69Bj + mov ax, 4001h + +loc_F323: ; CODE XREF: sub_F34A-11j + mov cl, [bp+var_7] + nop + mov di, [bp+arg_0] + nop + call sub_FCFD + +loc_F32E: ; CODE XREF: sub_F34A-4Dj sub_F34A-41j ... + jmp loc_F692 +; --------------------------------------------------------------------------- + +loc_F331: ; CODE XREF: sub_F34A+3Ej + mov ch, 10h + call sub_115C9 + +loc_F336: ; CODE XREF: sub_F34A-46j sub_F34A+32j + mov ax, 0C001h + jmp short loc_F323 +; --------------------------------------------------------------------------- + +loc_F33B: ; CODE XREF: sub_F34A+39j + mov ch, 8 + jmp short loc_F31D +; --------------------------------------------------------------------------- + +loc_F33F: ; CODE XREF: sub_F34A+5Aj + mov ax, [bp+var_12] + or ax, [bp+var_14] + jnz short loc_F3A6 + jmp loc_F69E +; END OF FUNCTION CHUNK FOR sub_F34A + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_F34A proc near ; CODE XREF: seg014:082Ap sub_106E6+Bp ... + +var_14 = word ptr -14h +var_12 = word ptr -12h +var_10 = word ptr -10h +var_E = word ptr -0Eh +var_C = word ptr -0Ch +var_A = word ptr -0Ah +var_8 = byte ptr -8 +var_7 = byte ptr -7 +var_6 = word ptr -6 +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = word ptr 8 + +; FUNCTION CHUNK AT 0434 SIZE 00000056 BYTES +; FUNCTION CHUNK AT 07DE SIZE 00000023 BYTES + + push bp + mov bp, sp + push si + push di + lea sp, [bp-0Ch] + mov di, [bp+arg_2] + mov bx, [bp+arg_4] + cld + mov al, [bx+0Ah] + xor al, [di+0Ah] + mov [bp+var_7], al + mov si, [di+8] + mov ax, [bx+8] + cmp si, 4001h + jge short loc_F2F4 + cmp ax, 4001h + jge short loc_F30B + cmp si, 0C001h + jle short loc_F31B + cmp ax, 0C001h + jle short loc_F336 + sub ax, si + cmp ax, 4001h + jge short loc_F33B + cmp ax, 0C001h + jle short loc_F331 + mov dx, [di+6] + push dx + mov cx, [di+4] + push cx + push word ptr [di+2] + push word ptr [di] + mov [bp+var_6], ax + mov [bp+var_8], 0 + mov di, [bx+6] + mov si, [bx+4] + jcxz short loc_F33F + +loc_F3A6: ; CODE XREF: sub_F34A-5j + xchg ax, cx + mov cx, [bx+2] + mov bx, [bx] + cmp di, dx + jb short loc_F42A + mov [bp+var_8], 1 + sub bx, [bp+var_14] + sbb cx, [bp+var_12] + sbb si, ax + sbb di, dx + jnb short loc_F42A + sub ax, ax + cwd + sub ax, si + sbb dx, di + div [bp+var_E] + mov [bp+var_A], ax + mul [bp+var_E] + add si, ax + adc di, dx + mov ax, [bp+var_10] + mul [bp+var_A] + add cx, ax + adc si, dx + adc di, 0 + mov ax, [bp+var_12] + mul [bp+var_A] + add bx, ax + adc cx, dx + adc si, 0 + adc di, 0 + mov ax, [bp+var_14] + mul [bp+var_A] + neg [bp+var_A] + sbb [bp+var_8], 0 + add bx, dx + adc cx, 0 + adc si, 0 + adc di, 0 + xchg ax, di + jl short loc_F425 + cmp si, [bp+var_E] + jb short loc_F427 + add [bp+var_A], 1 + adc [bp+var_8], 0 + sub di, [bp+var_14] + sbb bx, [bp+var_12] + sbb cx, [bp+var_10] + sbb si, [bp+var_E] + +loc_F425: ; CODE XREF: sub_F34A+C0j + jl short loc_F48D + +loc_F427: ; CODE XREF: sub_F34A+C5j + ; sub_F34A+122j + jmp loc_F4F6 +; --------------------------------------------------------------------------- + +loc_F42A: ; CODE XREF: sub_F34A+64j sub_F34A+74j + mov ax, si + mov dx, di + div [bp+var_E] + mov [bp+var_A], ax + mul [bp+var_E] + sub si, ax + sbb di, dx + mov ax, [bp+var_10] + mul [bp+var_A] + sub cx, ax + sbb si, dx + sbb di, 0 + mov ax, [bp+var_12] + mul [bp+var_A] + sub bx, ax + sbb cx, dx + sbb si, 0 + sbb di, 0 + mov ax, [bp+var_14] + mul [bp+var_A] + neg ax + sbb bx, dx + sbb cx, 0 + sbb si, 0 + sbb di, 0 + xchg ax, di + jge short loc_F427 + mov dx, si + neg dx + cmp dx, [bp+var_E] + jb short loc_F48D + sub [bp+var_A], 1 + sbb [bp+var_8], 0 + add di, [bp+var_14] + adc bx, [bp+var_12] + adc cx, [bp+var_10] + adc si, [bp+var_E] + jge short loc_F4F6 + +loc_F48D: ; CODE XREF: sub_F34A:loc_F425j + ; sub_F34A+12Bj + sub ax, ax + cwd + sub ax, cx + sbb dx, si + div [bp+var_E] + mov [bp+var_C], ax + mul [bp+var_E] + add cx, ax + adc si, dx + mov ax, [bp+var_10] + mul [bp+var_C] + add bx, ax + adc cx, dx + adc si, 0 + mov ax, [bp+var_12] + mul [bp+var_C] + add di, ax + adc bx, dx + adc cx, 0 + adc si, 0 + mov ax, [bp+var_14] + mul [bp+var_C] + sub ax, ax + neg [bp+var_C] + sbb [bp+var_A], ax + sbb [bp+var_8], al + add di, dx + adc bx, ax + adc cx, ax + adc si, ax + jl short loc_F554 + cmp cx, [bp+var_E] + jb short loc_F4F3 + add [bp+var_C], 1 + adc [bp+var_A], ax + adc [bp+var_8], al + sub di, [bp+var_12] + sbb bx, [bp+var_10] + sbb cx, [bp+var_E] + jl short loc_F554 + +loc_F4F3: ; CODE XREF: sub_F34A+192j + jmp loc_F5A9 +; --------------------------------------------------------------------------- + +loc_F4F6: ; CODE XREF: sub_F34A:loc_F427j + ; sub_F34A+141j + mov ax, cx + mov dx, si + div [bp+var_E] + mov [bp+var_C], ax + mul [bp+var_E] + sub cx, ax + sbb si, dx + mov ax, [bp+var_10] + mul [bp+var_C] + sub bx, ax + sbb cx, dx + sbb si, 0 + mov ax, [bp+var_12] + mul [bp+var_C] + sub di, ax + sbb bx, dx + sbb cx, 0 + sbb si, 0 + mov ax, [bp+var_14] + mul [bp+var_C] + sub ax, ax + sub di, dx + sbb bx, ax + sbb cx, ax + sbb si, ax + jge short loc_F5A9 + mov dx, cx + neg dx + cmp dx, [bp+var_E] + jb short loc_F554 + sub [bp+var_C], 1 + sbb [bp+var_A], ax + sbb [bp+var_8], al + add di, [bp+var_12] + adc bx, [bp+var_10] + adc cx, [bp+var_E] + jge short loc_F5A9 + +loc_F554: ; CODE XREF: sub_F34A+18Dj + ; sub_F34A+1A7j ... + sub ax, ax + cwd + sub ax, bx + sbb dx, cx + div [bp+var_E] + mov si, ax + mul [bp+var_E] + add bx, ax + adc cx, dx + mov ax, [bp+var_10] + mul si + add di, ax + adc bx, dx + adc cx, 0 + mov ax, [bp+var_12] + mul si + sub ax, ax + neg si + sbb [bp+var_C], ax + sbb [bp+var_A], ax + sbb [bp+var_8], al + add di, dx + adc bx, ax + adc cx, ax + jl short loc_F5F1 + cmp bx, [bp+var_E] + jb short loc_F5A6 + add si, 1 + adc [bp+var_C], ax + adc [bp+var_A], ax + adc [bp+var_8], al + sub di, [bp+var_10] + sbb bx, [bp+var_E] + jl short loc_F5F1 + +loc_F5A6: ; CODE XREF: sub_F34A+246j + jmp loc_F633 +; --------------------------------------------------------------------------- + +loc_F5A9: ; CODE XREF: sub_F34A:loc_F4F3j + ; sub_F34A+1EAj ... + mov ax, bx + mov dx, cx + div [bp+var_E] + mov si, ax + mul [bp+var_E] + sub bx, ax + sbb cx, dx + mov ax, [bp+var_10] + mul si + sub di, ax + sbb bx, dx + sbb cx, 0 + mov ax, [bp+var_12] + mul si + sub ax, ax + sub di, dx + sbb bx, ax + sbb cx, ax + jge short loc_F633 + mov dx, bx + neg dx + cmp dx, [bp+var_E] + jb short loc_F5F1 + sub si, 1 + sbb [bp+var_C], ax + sbb [bp+var_A], ax + sbb [bp+var_8], al + add di, [bp+var_10] + adc bx, [bp+var_E] + jge short loc_F633 + +loc_F5F1: ; CODE XREF: sub_F34A+241j + ; sub_F34A+25Aj ... + mov ax, [bp+var_10] + shr ax, 1 + neg ax + mov cx, [bp+var_E] + add ax, cx + sub dx, dx + sub ax, di + sbb dx, bx + mov bx, [bp+var_C] + mov di, [bp+var_A] + cmp dx, cx + jnb short loc_F628 + div cx + sub dx, cx + neg dx + neg ax + +loc_F615: ; CODE XREF: sub_F34A+2E2j + mov dl, [bp+var_8] + sbb si, 0 + jnb short loc_F651 + sbb bx, 0 + sbb di, 0 + sbb dl, 0 + jmp short loc_F651 +; --------------------------------------------------------------------------- + +loc_F628: ; CODE XREF: sub_F34A+2C1j + sub ax, ax + cwd + stc + jmp short loc_F615 +; --------------------------------------------------------------------------- + +loc_F62E: ; CODE XREF: sub_F34A+300j + sub ax, ax + cwd + jmp short loc_F64E +; --------------------------------------------------------------------------- + +loc_F633: ; CODE XREF: sub_F34A:loc_F5A6j + ; sub_F34A+288j ... + mov ax, [bp+var_10] + shr ax, 1 + neg ax + cwd + add ax, di + adc dx, bx + mov bx, [bp+var_C] + mov di, [bp+var_A] + mov cx, [bp+var_E] + cmp dx, cx + jnb short loc_F62E + div cx + +loc_F64E: ; CODE XREF: sub_F34A+2E7j + ; sub_F34A+375j + mov dl, [bp+var_8] + +loc_F651: ; CODE XREF: sub_F34A+2D1j + ; sub_F34A+2DCj + shr dl, 1 + jnb short loc_F662 + rcr di, 1 + rcr bx, 1 + rcr si, 1 + rcr ax, 1 + rcr dh, 1 + inc [bp+var_6] + +loc_F662: ; CODE XREF: sub_F34A+309j + shr cx, 1 + sub ch, dh + mov cx, [bp+var_6] + adc ax, 0 + jnb short loc_F679 + adc si, ax + adc bx, ax + adc di, ax + jnb short loc_F679 + rcr di, 1 + inc cx + +loc_F679: ; CODE XREF: sub_F34A+322j + ; sub_F34A+32Aj + cmp cx, 4001h + jge short loc_F69B + mov dx, di + mov di, [bp+arg_0] + cld + stosw + xchg ax, si + stosw + xchg ax, bx + stosw + xchg ax, dx + stosw + xchg ax, cx + stosw + mov al, [bp+var_7] + stosb + +loc_F692: ; CODE XREF: sub_F34A:loc_F32Ej + lea sp, [bp-4] + pop di + pop si + pop bp + retn 6 +; --------------------------------------------------------------------------- + +loc_F69B: ; CODE XREF: sub_F34A+333j + jmp loc_F320 +sub_F34A endp ; sp-analysis failed + +; --------------------------------------------------------------------------- +; START OF FUNCTION CHUNK FOR sub_F34A + +loc_F69E: ; CODE XREF: sub_F34A-3j + mov cx, dx + mov dx, di + xchg ax, si + cmp dx, cx + jb short loc_F6AD + sub dx, cx + mov [bp+var_8], 1 + +loc_F6AD: ; CODE XREF: sub_F34A+35Bj + div cx + xchg ax, di + mov ax, [bx+2] + div cx + mov bx, [bx] + xchg ax, bx + div cx + xchg ax, si + sub ax, ax + div cx + jmp short loc_F64E +; END OF FUNCTION CHUNK FOR sub_F34A +; --------------------------------------------------------------------------- + mov si, word ptr aBorlandCCopyri+0Dh + push bp + mov bp, sp + push si + push di + mov ax, [si+8] + cmp ax, 0C001h + jle short loc_F6FB + cmp ax, 4001h + jge short loc_F6FF + cmp byte ptr [si+0Ah], 0 + jnz short loc_F709 + call sub_FD2B + call sub_F71A + mov di, word ptr aBorlandCCopyri+0Dh + push si + push di + push si + call sub_F34A + push di + push si + push si + call sub_EFB3 + dec word ptr [si+8] + add word ptr aBorlandCCopyri+0Dh, 0Ch + +loc_F6FB: ; CODE XREF: seg014:0810j seg014:0847j ... + pop di + pop si + pop bp + retn +; --------------------------------------------------------------------------- + +loc_F6FF: ; CODE XREF: seg014:0815j + mov bx, 0FFFFh + mov di, si + call sub_EED2 + jmp short loc_F6FB +; --------------------------------------------------------------------------- + +loc_F709: ; CODE XREF: seg014:081Bj + mov ch, 1 + call sub_115C9 + mov di, si + call sub_FCE7 + mov word ptr [di+8], 4001h + jmp short loc_F6FB + +; =============== S U B R O U T I N E ======================================= + + +sub_F71A proc near ; CODE XREF: seg014:0820p + push si + push di + mov di, word ptr aBorlandCCopyri+0Dh + mov bx, [di+8] + mov dx, [di+6] + mov ax, [di+4] + mov cx, [di+2] + sar bx, 1 + jnb short loc_F737 + inc bx + shr dx, 1 + rcr ax, 1 + rcr cx, 1 + +loc_F737: ; CODE XREF: sub_F71A+14j + cmp dx, 0FFFEh + jnb short loc_F759 + push bx + push cx + mov cx, dx + mov bx, ax + mov si, dx + stc + rcr si, 1 + +loc_F747: ; CODE XREF: sub_F71A+3Dj + div si + dec si + cmp si, ax + jbe short loc_F760 + inc si + add si, ax + rcr si, 1 + mov dx, cx + mov ax, bx + jmp short loc_F747 +; --------------------------------------------------------------------------- + +loc_F759: ; CODE XREF: sub_F71A+20j + stc + rcr dx, 1 + rcr ax, 1 + jmp short loc_F777 +; --------------------------------------------------------------------------- + +loc_F760: ; CODE XREF: sub_F71A+32j + inc si + cmp si, ax + jnb short loc_F766 + xchg ax, si + +loc_F766: ; CODE XREF: sub_F71A+49j + pop cx + pop bx + xchg ax, cx + div si + sub dx, dx + add si, cx + rcr si, 1 + rcr ax, 1 + adc ax, dx + adc dx, si + +loc_F777: ; CODE XREF: sub_F71A+44j + cld + sub cx, cx + xchg ax, cx + stosw + stosw + xchg ax, cx + stosw + xchg ax, dx + stosw + xchg ax, bx + stosw + mov al, 0 + stosb + pop di + pop si + retn +sub_F71A endp + +; --------------------------------------------------------------------------- + db 0 + db 2 + db 40h ; @ + db 42h ; B + db 1 + db 3 + db 41h ; A + db 43h ; C + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_F791 proc near ; CODE XREF: seg014:1C3Cp + +var_A = word ptr -0Ah +var_4 = word ptr -4 +var_2 = byte ptr -2 + + push bp + mov bp, sp + push word ptr [di+0Ah] + lea sp, [bp-6] + push si + push di + mov ax, [di] + mov bx, [di+2] + mov cx, [di+4] + mov dx, [di+6] + mov [bp+var_4], 0 + mov di, [di+8] + sub di, [si+8] + jge short loc_F7CB + jmp short loc_F807 +; --------------------------------------------------------------------------- + +loc_F7B6: ; CODE XREF: sub_F791+29j + inc di + jmp short loc_F7F6 +; --------------------------------------------------------------------------- + +loc_F7B9: ; CODE XREF: sub_F791+38j sub_F791+3Fj ... + dec di + jl short loc_F7B6 + shl [bp+var_4], 1 + shl ax, 1 + rcl bx, 1 + rcl cx, 1 + adc dx, dx + jb short loc_F7E4 + jns short loc_F7B9 + +loc_F7CB: ; CODE XREF: sub_F791+21j + cmp dx, [si+6] + ja short loc_F7E4 + jb short loc_F7B9 + cmp cx, [si+4] + ja short loc_F7E4 + jb short loc_F7B9 + cmp bx, [si+2] + ja short loc_F7E4 + jb short loc_F7B9 + cmp ax, [si] + jb short loc_F7B9 + +loc_F7E4: ; CODE XREF: sub_F791+36j sub_F791+3Dj ... + inc [bp+var_4] + sub ax, [si] + sbb bx, [si+2] + sbb cx, [si+4] + sbb dx, [si+6] + or di, di + jg short loc_F7B9 + +loc_F7F6: ; CODE XREF: sub_F791+26j sub_F791+B8j ... + or dx, dx + js short loc_F807 + jz short loc_F83F + +loc_F7FC: ; CODE XREF: sub_F791+74j + dec di + shl ax, 1 + rcl bx, 1 + rcl cx, 1 + adc dx, dx + jns short loc_F7FC + +loc_F807: ; CODE XREF: sub_F791+23j sub_F791+67j + add di, [si+8] + +loc_F80A: ; CODE XREF: sub_F791+D9j + push di + mov di, [bp+var_A] + stosw + xchg ax, bx + stosw + xchg ax, cx + stosw + xchg ax, dx + stosw + pop ax + stosw + mov al, [bp+var_2] + stosb + and byte ptr aBorlandCCopyri+1, 0B8h + mov di, 7 + mov ax, [bp+var_4] + cmp [bp+var_2], 1 + jnz short loc_F82E + neg ax + +loc_F82E: ; CODE XREF: sub_F791+99j + and di, ax + mov dl, cs:[di+8C9h] + or byte ptr aBorlandCCopyri+1, dl + pop di + pop si + mov sp, bp + pop bp + retn +; --------------------------------------------------------------------------- + +loc_F83F: ; CODE XREF: sub_F791+69j + xchg dx, cx + xchg cx, bx + xchg ax, bx + sub di, 10h + or dx, dx + jnz short loc_F7F6 + xchg dx, cx + xchg cx, bx + sub di, 10h + or dx, dx + jnz short loc_F7F6 + xchg dx, cx + sub di, 10h + or dx, dx + jnz short loc_F7F6 + mov di, 0C001h + sub dx, dx + sub cx, cx + sub bx, bx + sub ax, ax + jmp short loc_F80A +sub_F791 endp + +; --------------------------------------------------------------------------- +; START OF FUNCTION CHUNK FOR sub_F899 + +loc_F86C: ; CODE XREF: sub_F899+14j + mov dx, [si+6] + and dh, 7Fh + or dx, [si] + or dx, [si+2] + or dx, [si+4] + jz short loc_F8AF + +loc_F87C: ; CODE XREF: sub_F899-4j + mov ch, 1 + call sub_115C9 + mov ax, 4500h + jmp loc_F917 +; --------------------------------------------------------------------------- + +loc_F887: ; CODE XREF: sub_F899+1Aj + mov dx, [di+6] + and dh, 7Fh + or dx, [di] + or dx, [di+2] + or dx, [di+4] + jnz short loc_F87C + jmp short loc_F8B5 +; END OF FUNCTION CHUNK FOR sub_F899 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_F899 proc near ; CODE XREF: sub_106E6+28p + ; sub_1114D+3j + +arg_0 = word ptr 4 +arg_2 = word ptr 6 + +; FUNCTION CHUNK AT 09AC SIZE 0000002D BYTES + + push bp + mov bp, sp + push si + push di + mov si, [bp+arg_2] + mov di, [bp+arg_0] + mov ax, [si+8] + mov bx, [di+8] + cmp ax, 4001h + jge short loc_F86C + +loc_F8AF: ; CODE XREF: sub_F899-1Fj + cmp bx, 4001h + jge short loc_F887 + +loc_F8B5: ; CODE XREF: sub_F899-2j + mov dx, ax + cmp ax, bx + jg short loc_F8BD + mov dx, bx + +loc_F8BD: ; CODE XREF: sub_F899+20j + cmp dx, 0C001h + jle short loc_F8FE + mov cl, [si+0Ah] + cmp cl, [di+0Ah] + jl short loc_F914 + jg short loc_F90A + cmp ax, bx + jl short loc_F905 + jg short loc_F90F + mov ax, [si+6] + cmp ax, [di+6] + jnz short loc_F903 + mov ch, 3 + and ch, byte ptr aBorlandCCopyri+3 + jz short loc_F921 + mov ax, [si+4] + cmp ax, [di+4] + jnz short loc_F903 + mov ax, [si+2] + cmp ax, [di+2] + jnz short loc_F903 + cmp ch, 2 + jz short loc_F943 + mov ax, [si] + cmp ax, [di] + jnz short loc_F903 + +loc_F8FE: ; CODE XREF: sub_F899+28j sub_F899+9Fj ... + mov ax, 4000h + jmp short loc_F917 +; --------------------------------------------------------------------------- + +loc_F903: ; CODE XREF: sub_F899+40j sub_F899+50j ... + ja short loc_F90F + +loc_F905: ; CODE XREF: sub_F899+36j sub_F899+A1j ... + cmp cl, 0 + jnz short loc_F914 + +loc_F90A: ; CODE XREF: sub_F899+32j sub_F899+79j + mov ax, 100h + jmp short loc_F917 +; --------------------------------------------------------------------------- + +loc_F90F: ; CODE XREF: sub_F899+38j + ; sub_F899:loc_F903j ... + cmp cl, 0 + jnz short loc_F90A + +loc_F914: ; CODE XREF: sub_F899+30j sub_F899+6Fj + mov ax, 0 + +loc_F917: ; CODE XREF: sub_F899-15j sub_F899+68j ... + mov byte ptr aBorlandCCopyri+1, ah + pop di + pop si + pop bp + retn 4 +; --------------------------------------------------------------------------- + +loc_F921: ; CODE XREF: sub_F899+48j + mov bx, [si] + sub bx, [di] + mov bx, [si+2] + sbb bx, [di+2] + mov bx, [si+4] + sbb bx, [di+4] + ja short loc_F93C + neg bx + and bx, 0FF80h + jz short loc_F8FE + jmp short loc_F905 +; --------------------------------------------------------------------------- + +loc_F93C: ; CODE XREF: sub_F899+98j + and bx, 0FF80h + jz short loc_F8FE + jmp short loc_F90F +; --------------------------------------------------------------------------- + +loc_F943: ; CODE XREF: sub_F899+5Dj + mov bx, [si] + sub bx, [di] + ja short loc_F952 + neg bx + and bh, 0FCh + jz short loc_F8FE + jmp short loc_F905 +; --------------------------------------------------------------------------- + +loc_F952: ; CODE XREF: sub_F899+AEj + and bh, 0FCh + jz short loc_F8FE + jmp short loc_F90F +sub_F899 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_F959 proc near ; CODE XREF: sub_11427+2Fp + ; sub_11427+45j ... + mov ax, 4000h + cmp word ptr [si+8], 0C001h + jle short loc_F976 + cmp word ptr [si+8], 4001h + jge short loc_F97B + +loc_F96A: ; CODE XREF: sub_F959+30j + mov ax, 100h + cmp byte ptr [si+0Ah], 1 + jz short loc_F976 + mov ax, 0 + +loc_F976: ; CODE XREF: sub_F959+8j sub_F959+18j ... + mov byte ptr aBorlandCCopyri+1, ah + retn +; --------------------------------------------------------------------------- + +loc_F97B: ; CODE XREF: sub_F959+Fj + mov dx, [si+6] + and dh, 7Fh + or dx, [si] + or dx, [si+2] + or dx, [si+4] + jz short loc_F96A + mov ch, 1 + call sub_115C9 + mov ax, 4500h + jmp short loc_F976 +sub_F959 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_F995 proc near ; CODE XREF: sub_11427+2Fp + ; sub_11427+45j ... + mov ax, 4000h + cmp word ptr [si+8], 0C001h + jle short loc_F9B2 + cmp word ptr [si+8], 4001h + jge short loc_F9B7 + mov ax, 400h + +loc_F9A9: ; CODE XREF: sub_F995+33j sub_F995+38j + cmp byte ptr [si+0Ah], 1 + jnz short loc_F9B2 + or ax, 200h + +loc_F9B2: ; CODE XREF: sub_F995+8j sub_F995+18j + mov byte ptr aBorlandCCopyri+1, ah + retn +; --------------------------------------------------------------------------- + +loc_F9B7: ; CODE XREF: sub_F995+Fj + mov ax, 500h + mov dx, [si+6] + and dh, 7Fh + or dx, [si] + or dx, [si+2] + or dx, [si+4] + jz short loc_F9A9 + mov ax, 100h + jmp short loc_F9A9 +sub_F995 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_F9CF proc near ; CODE XREF: seg014:2199j seg014:2217j ... + mov ax, [si+4] + mov dx, [si+6] + mov bx, [si+8] + mov cl, [si+0Ah] + cmp word ptr [si], 0 + jnz short loc_F9EF + cmp word ptr [si+2], 0 + jnz short loc_F9EF + test al, 7Fh + jnz short loc_F9EF + test ah, 1 + jz short loc_F9FE + +loc_F9EF: ; CODE XREF: sub_F9CF+Fj sub_F9CF+15j ... + add al, al + adc ah, 0 + adc dx, 0 + jnb short loc_F9FE + rcr dx, 1 + rcr ax, 1 + inc bx + +loc_F9FE: ; CODE XREF: sub_F9CF+1Ej sub_F9CF+28j + add bx, 7Eh ; '~' + jle short loc_FA35 + cmp bx, 0FFh + jge short loc_FA20 + +loc_FA09: ; CODE XREF: sub_F9CF+64j sub_F9CF+78j + shl dx, 1 + shr cl, 1 + rcr bl, 1 + rcr dx, 1 + mov al, ah + mov ah, dl + mov dl, dh + mov dh, bl + stosw + xchg ax, dx + stosw + sub di, 4 + retn +; --------------------------------------------------------------------------- + +loc_FA20: ; CODE XREF: sub_F9CF+38j + cmp word ptr [si+8], 4001h + jge short loc_FA30 + mov ch, 8 + call sub_115C9 + sub dx, dx + sub ax, ax + +loc_FA30: ; CODE XREF: sub_F9CF+56j + mov bx, 0FFh + jmp short loc_FA09 +; --------------------------------------------------------------------------- + +loc_FA35: ; CODE XREF: sub_F9CF+32j + cmp word ptr [si+8], 0C001h + jle short loc_FA41 + mov ch, 10h + call sub_115C9 + +loc_FA41: ; CODE XREF: sub_F9CF+6Bj + sub bx, bx + mov dx, bx + mov ax, bx + jmp short loc_FA09 +sub_F9CF endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_FA49 proc near ; CODE XREF: seg014:2199j seg014:2217j ... + mov ax, es:[si] + mov dx, es:[si+2] + push si + sub si, si + shl dx, 1 + rcl si, 1 + sub bx, bx + add bl, dh + jz short loc_FA8B + cmp dh, 0FFh + jz short loc_FA86 + sub bx, 7Eh ; '~' + +loc_FA65: ; CODE XREF: sub_FA49+40j + stc + rcr dl, 1 + +loc_FA68: ; CODE XREF: sub_FA49+51j sub_FA49+59j + mov dh, dl + mov dl, ah + mov ch, al + mov cl, 0 + sub ax, ax + mov [di], ax + mov [di+2], ax + mov [di+4], cx + mov [di+6], dx + mov [di+8], bx + xchg ax, si + mov [di+0Ah], al + pop si + retn +; --------------------------------------------------------------------------- + +loc_FA86: ; CODE XREF: sub_FA49+17j + mov bx, 4001h + jmp short loc_FA65 +; --------------------------------------------------------------------------- + +loc_FA8B: ; CODE XREF: sub_FA49+12j + mov cx, dx + or cx, ax + jz short loc_FA9F + sub bx, 7Eh ; '~' + shr dl, 1 + +loc_FA96: ; CODE XREF: sub_FA49+54j + add ax, ax + adc dl, dl + js short loc_FA68 + dec bx + jmp short loc_FA96 +; --------------------------------------------------------------------------- + +loc_FA9F: ; CODE XREF: sub_FA49+46j + mov bx, 0C001h + jmp short loc_FA68 +sub_FA49 endp + +; --------------------------------------------------------------------------- + mov es, cx + assume es:seg000 + +; =============== S U B R O U T I N E ======================================= + + +sub_FAA6 proc near ; CODE XREF: seg014:2199j seg014:2217j ... + push di + mov ax, [si+1] + mov di, [si+3] + mov cx, [si+5] + mov dl, [si+7] + mov bx, [si+8] + mov dh, 3 + and dh, al + or dh, [si] + jnz short loc_FAC2 + test al, 8 + jz short loc_FAD3 + +loc_FAC2: ; CODE XREF: sub_FAA6+16j + add ax, 4 + adc di, 0 + adc cx, 0 + adc dl, 0 + jnb short loc_FAD3 + rcr dl, 1 + inc bx + +loc_FAD3: ; CODE XREF: sub_FAA6+1Aj sub_FAA6+28j + add bx, 3FEh + jle short loc_FB1B + cmp bx, 7FFh + jge short loc_FB28 + +loc_FADF: ; CODE XREF: sub_FAA6+A1j + and al, 0F8h + shl dl, 1 + shr bx, 1 + rcr dl, 1 + or al, bh + mov dh, bl + mov bx, di + shr di, 1 + rcr ax, 1 + rcr dx, 1 + rcr cx, 1 + rcr bx, 1 + shr di, 1 + rcr ax, 1 + rcr dx, 1 + rcr cx, 1 + rcr bx, 1 + or al, [si+0Ah] + shr di, 1 + rcr ax, 1 + rcr dx, 1 + rcr cx, 1 + rcr bx, 1 + +loc_FB0E: ; CODE XREF: sub_FAA6+9Cj + pop di + cld + stosw + xchg ax, bx + stosw + xchg ax, cx + stosw + xchg ax, dx + stosw + sub di, 8 + retn +; --------------------------------------------------------------------------- + +loc_FB1B: ; CODE XREF: sub_FAA6+31j + sub dx, dx + cmp word ptr [si+8], 0C001h + jle short loc_FB37 + mov ch, 10h + jmp short loc_FB34 +; --------------------------------------------------------------------------- + +loc_FB28: ; CODE XREF: sub_FAA6+37j + cmp word ptr [si+8], 4001h + jge short loc_FB44 + mov dx, 0FFE0h + mov ch, 8 + +loc_FB34: ; CODE XREF: sub_FAA6+80j + call sub_115C9 + +loc_FB37: ; CODE XREF: sub_FAA6+7Cj + or dl, [si+0Ah] + ror dx, 1 + sub cx, cx + mov bx, cx + mov ax, cx + jmp short loc_FB0E +; --------------------------------------------------------------------------- + +loc_FB44: ; CODE XREF: sub_FAA6+87j + mov bx, 7FFh + jmp short loc_FADF +sub_FAA6 endp + +; --------------------------------------------------------------------------- + mov si, bx + mov es, ax + assume es:nothing + +; =============== S U B R O U T I N E ======================================= + + +sub_FB4D proc near ; CODE XREF: seg014:2199j seg014:2217j ... + mov dx, es:[si+6] + mov cx, 5 + shl dx, 1 + rcl ch, 1 + mov [di+0Ah], ch + shr dx, cl + jz short loc_FBC2 + cmp dx, 7FFh + jz short loc_FBA8 + mov bl, 10h + sub dx, 3FEh + +loc_FB6B: ; CODE XREF: sub_FB4D+73j sub_FB4D+8Cj + mov [di+8], dx + mov dx, es:[si+5] + and dh, 0Fh + or dh, bl + mov cx, es:[si+3] + mov bx, es:[si+1] + mov ah, es:[si] + mov al, 0 + shl ax, 1 + rcl bx, 1 + rcl cx, 1 + rcl dx, 1 + shl ax, 1 + rcl bx, 1 + rcl cx, 1 + rcl dx, 1 + shl ax, 1 + rcl bx, 1 + rcl cx, 1 + rcl dx, 1 + +loc_FB9C: ; CODE XREF: sub_FB4D+BAj + mov [di], ax + mov [di+2], bx + mov [di+4], cx + mov [di+6], dx + retn +; --------------------------------------------------------------------------- + +loc_FBA8: ; CODE XREF: sub_FB4D+16j + mov bx, 0Fh + and bl, es:[si+6] + or bx, es:[si+4] + or bx, es:[si+2] + or bx, es:[si] + mov dx, 4001h + or bl, 10h + jmp short loc_FB6B +; --------------------------------------------------------------------------- + +loc_FBC2: ; CODE XREF: sub_FB4D+10j + mov bx, 0Fh + and bl, es:[si+6] + or bx, es:[si+4] + or bx, es:[si+2] + or bx, es:[si] + jnz short loc_FBDB + mov dx, 0C001h + jmp short loc_FB6B +; --------------------------------------------------------------------------- + +loc_FBDB: ; CODE XREF: sub_FB4D+87j + mov dx, es:[si+5] + and dh, 0Fh + mov cx, es:[si+3] + mov bx, es:[si+1] + mov ah, es:[si] + mov al, 4 + +loc_FBEF: ; CODE XREF: sub_FB4D+ACj + dec al + shl ah, 1 + rcl bx, 1 + rcl cx, 1 + adc dx, dx + jns short loc_FBEF + push ax + mov ah, 0 + sub ax, 4FEh + mov [di+8], ax + pop ax + mov al, 0 + jmp short loc_FB9C +sub_FB4D endp + +; --------------------------------------------------------------------------- + mov es, cx + +; =============== S U B R O U T I N E ======================================= + + +sub_FC0B proc near ; CODE XREF: sub_11211+10p + ; sub_112DD+4p + cld + movsw + movsw + movsw + movsw + lodsw + mov cl, [si] + cmp ax, 4001h + jge short loc_FC2B + add ax, 3FFEh + jl short loc_FC30 + +loc_FC1D: ; CODE XREF: sub_FC0B+23j sub_FC0B+27j + shl ax, 1 + shr cl, 1 + rcr ax, 1 + stosw + sub di, 0Ah + sub si, 0Ah + retn +; --------------------------------------------------------------------------- + +loc_FC2B: ; CODE XREF: sub_FC0B+Bj + mov ax, 7FFFh + jmp short loc_FC1D +; --------------------------------------------------------------------------- + +loc_FC30: ; CODE XREF: sub_FC0B+10j + sub ax, ax + jmp short loc_FC1D +sub_FC0B endp + +; --------------------------------------------------------------------------- + mov si, bx + mov es, ax + assume es:seg000 + +; =============== S U B R O U T I N E ======================================= + + +sub_FC38 proc near ; CODE XREF: sub_11235+1Cp + ; sub_112B3+7p + push si + mov cx, ds + mov dx, es + mov es, cx + assume es:dseg + mov ds, dx + assume ds:seg000 + std + lea si, [si+8] + lea di, [di+0Ah] + lodsw + xchg ax, bx + sub ax, ax + shl bx, 1 + rcl ax, 1 + stosb + dec di + shr bx, 1 + jz short loc_FC69 + sub bx, 3FFEh + xchg ax, bx + stosw + movsw + movsw + movsw + movsw + +loc_FC60: ; CODE XREF: sub_FC38+3Bj + cld + mov es, dx + assume es:seg000 + mov ds, cx + assume ds:dseg + inc di + inc di + pop si + retn +; --------------------------------------------------------------------------- + +loc_FC69: ; CODE XREF: sub_FC38+1Cj + mov ax, 0C001h + stosw + sub ax, ax + stosw + stosw + stosw + stosw + jmp short loc_FC60 +sub_FC38 endp + +; --------------------------------------------------------------------------- + db 7 dup(0), 80h, 1, 3 dup(0) + +; =============== S U B R O U T I N E ======================================= + + +sub_FC81 proc near ; CODE XREF: sub_106E6+77p + ; sub_10A56+14p ... + mov ax, 0DB5h + jmp short loc_FCEA +sub_FC81 endp + +; --------------------------------------------------------------------------- + db 0FEh, 8Ah, 1Bh, 0CDh, 4Bh, 78h, 9Ah, 0D4h, 2, 3 dup(0) + db 0B8h, 0C6h, 0Dh, 0EBh, 53h, 0BBh, 0F0h, 17h, 5Ch, 29h + db 3Bh, 0AAh, 0B8h, 1, 3 dup(0), 0B8h, 0D7h, 0Dh, 0EBh + db 42h, 35h, 0C2h, 68h, 21h, 0A2h, 0DAh, 0Fh, 0C9h, 2 + db 3 dup(0) + +; =============== S U B R O U T I N E ======================================= + + +sub_FCB4 proc near ; CODE XREF: seg014:1C33p seg014:1C5Bp ... + mov ax, 0DE8h + jmp short loc_FCEA +sub_FCB4 endp + +; --------------------------------------------------------------------------- +byte_FCB9 db 99h, 0F7h, 0CFh, 0FBh, 84h, 9Ah, 20h, 9Ah, 2 dup(0FFh) + ; CODE XREF: seg014:1D68p + db 2 dup(0), 0B8h, 0F9h, 0Dh, 0EBh, 20h, 0ACh, 79h, 0CFh + db 0D1h, 0F7h, 17h, 72h, 0B1h, 4 dup(0) + +; =============== S U B R O U T I N E ======================================= + + +sub_FCD6 proc near ; CODE XREF: sub_1086E+Ep seg014:1D44p + mov ax, 0E0Ah + jmp short loc_FCEA +sub_FCD6 endp + +; --------------------------------------------------------------------------- + db 8 dup(0), 1, 0C0h, 2 dup(0) + +; =============== S U B R O U T I N E ======================================= + + +sub_FCE7 proc near ; CODE XREF: seg014:0850p + ; sub_10966+58p ... + mov ax, 0E1Bh + +loc_FCEA: ; CODE XREF: sub_FC81+3j sub_FCB4+3j ... + push ds + mov cx, cs + mov ds, cx + assume ds:seg014 + xchg ax, si + cld + mov cx, 5 + rep movsw + movsb + sub di, 0Bh + xchg ax, si + pop ds + assume ds:dseg + retn +sub_FCE7 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_FCFD proc near ; CODE XREF: sub_F17D-4Bp sub_F34A-1Fp ... + cld + push di + push ax + cmp ax, 0C001h + mov ax, 0 + stosw + stosw + stosw + rcr ax, 1 + stosw + pop ax + stosw + mov al, cl + stosb + pop di + retn +sub_FCFD endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_FD13 proc near ; CODE XREF: sub_EF6E-6p sub_F17D-16p ... + mov ch, 1 + call sub_115C9 + push di + sub ax, ax + cld + stosw + stosw + stosw + mov ah, 0C0h ; '' + stosw + mov ax, 4001h + stosw + mov al, 1 + stosb + pop di + retn +sub_FD13 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_FD2B proc near ; CODE XREF: seg014:081Dp sub_105BFp ... + push di + push es + mov di, ss + mov es, di + assume es:nothing + sub word ptr aBorlandCCopyri+0Dh, 0Ch + mov di, word ptr aBorlandCCopyri+0Dh + cld + mov cx, 5 + rep movsw + movsb + pop es + pop di + sub si, 0Bh + retn +sub_FD2B endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_FD47 proc near ; CODE XREF: sub_1040E+13p + ; sub_106E6+1Ep ... + push si + push di + sub word ptr aBorlandCCopyri+0Dh, 0Ch + mov di, word ptr aBorlandCCopyri+0Dh + push ds + push es + push ds + pop es + assume es:dseg + push cs + pop ds + assume ds:seg014 + cld + mov cx, 5 + rep movsw + movsb + pop es + assume es:nothing + pop ds + assume ds:dseg + pop di + pop si + retn +sub_FD47 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_FD64 proc near ; CODE XREF: sub_10799+Dp + push si + mov si, word ptr aBorlandCCopyri+0Dh + cld + mov cx, 5 + rep movsw + movsb + inc si + mov word ptr aBorlandCCopyri+0Dh, si + sub di, 0Bh + pop si + retn +sub_FD64 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_FD7A proc near ; CODE XREF: sub_105F0+6p + ; sub_10A56+26p ... + push si + push di + push es + mov si, word ptr aBorlandCCopyri+0Dh + lea di, [si-0Ch] + mov word ptr aBorlandCCopyri+0Dh, di + cld + mov cx, ss + mov es, cx + mov cx, 5 + rep movsw + movsb + pop es + pop di + pop si + retn +sub_FD7A endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_FD97 proc near ; CODE XREF: seg014:1CFAp + ; seg014:loc_10C2Bp + push si + push di + mov si, word ptr aBorlandCCopyri+0Dh + mov di, si + cld + push es + mov cx, ss + mov es, cx + mov cx, 5 + +loc_FDA8: ; CODE XREF: sub_FD97+16j + lodsw + xchg ax, [di+0Ch] + stosw + loop loc_FDA8 + lodsb + xchg al, [di+0Ch] + stosb + pop es + pop di + pop si + retn +sub_FD97 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_FDB8 proc near ; CODE XREF: sub_FE9E+1Ep + ; sub_10966+96p ... + mov ax, es:[si] + sub cx, cx + cwd + xor ax, dx + sub ax, dx + jz short loc_FDF6 + and dl, 1 + +loc_FDC7: ; CODE XREF: sub_FDB8+3Cj + mov bx, cx + xchg ax, cx + shl ax, 1 + +loc_FDCC: ; CODE XREF: sub_FDB8+20j + rcr ax, 1 + inc bx + shr cx, 1 + rcr ax, 1 + jcxz short loc_FDDC + inc bx + shr cx, 1 + jnz short loc_FDCC + rcr ax, 1 + +loc_FDDC: ; CODE XREF: sub_FDB8+1Bj sub_FDB8+41j + mov [di+0Ah], dl + mov [di+8], bx + mov [di+6], ax + mov [di+4], cx + mov [di+2], cx + mov [di], cx + retn +; --------------------------------------------------------------------------- + sub cx, cx + mov dx, cx + or ax, ax + jnz short loc_FDC7 + +loc_FDF6: ; CODE XREF: sub_FDB8+Aj + mov bx, 0C001h + jmp short loc_FDDC +sub_FDB8 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_FDFB proc near ; CODE XREF: seg014:1E07p seg014:2199j ... + mov cx, [si+8] + cmp cx, 10h + +loc_FE01: ; CODE XREF: seg014:0FDBj + jg short loc_FE73 + cmp cx, 0C001h + jle short loc_FE7D + mov bx, [si+6] + sub ax, ax + or cx, cx + jge short loc_FE16 + shr bx, 1 + rcr dx, 1 + +loc_FE16: ; CODE XREF: sub_FDFB+15j + mov dx, [si+4] + or cx, cx + jle short loc_FE25 + +loc_FE1D: ; CODE XREF: sub_FDFB+28j + shl dx, 1 + rcl bx, 1 + rcl ax, 1 + loop loc_FE1D + +loc_FE25: ; CODE XREF: sub_FDFB+20j + or dx, [si] + or dx, [si+2] + or bl, dh + or bl, dl + mov cl, 0Ch + and cl, byte ptr aBorlandCCopyri+3 + cmp cl, 0Ch + jz short loc_FE63 + cmp cl, 0 + jz short loc_FE54 + add cl, [si+0Ah] + cmp cl, 4 + jz short loc_FE63 + cmp cl, 9 + jz short loc_FE63 + neg bx + adc ax, 0 + jb short loc_FE73 + jmp short loc_FE63 +; --------------------------------------------------------------------------- + +loc_FE54: ; CODE XREF: sub_FDFB+41j + mov dl, 1 + and dl, al + or bl, dl + add bx, 7FFFh + adc ax, 0 + jb short loc_FE73 + +loc_FE63: ; CODE XREF: sub_FDFB+3Cj sub_FDFB+49j ... + cmp byte ptr [si+0Ah], 1 + jz short loc_FE81 + sahf + jns short loc_FE87 + cmp byte ptr dword_122EA+2, 1 + jz short loc_FE87 + +loc_FE73: ; CODE XREF: sub_FDFB:loc_FE01j + ; sub_FDFB+55j ... + mov ch, 8 + call sub_115C9 + mov ax, 8000h + jmp short loc_FE87 +; --------------------------------------------------------------------------- + +loc_FE7D: ; CODE XREF: sub_FDFB+Cj + sub ax, ax + jmp short loc_FE87 +; --------------------------------------------------------------------------- + +loc_FE81: ; CODE XREF: sub_FDFB+6Cj + neg ax + jz short loc_FE87 + jns short loc_FE73 + +loc_FE87: ; CODE XREF: sub_FDFB+6Fj sub_FDFB+76j ... + mov byte ptr dword_122EA+2, 0 + mov es:[di], ax + retn +sub_FDFB endp + +; --------------------------------------------------------------------------- + mov byte ptr dword_122EA+2, 1 + mov cx, [si+8] + cmp cx, 10h + jmp loc_FE01 + +; =============== S U B R O U T I N E ======================================= + + +sub_FE9E proc near ; CODE XREF: seg014:2561p + push si + push di + cld + mov cx, 5 + rep movsw + movsb + pop di + pop si + xchg si, di + lea si, [si+8] + cmp word ptr [si], 0C001h + jle short locret_FEC3 + cmp word ptr [si], 4001h + jge short loc_FEC4 + dec word ptr [si] + call sub_FDB8 + mov word ptr [si], 1 + +locret_FEC3: ; CODE XREF: sub_FE9E+14j sub_FE9E+33j + retn +; --------------------------------------------------------------------------- + +loc_FEC4: ; CODE XREF: sub_FE9E+1Aj + mov word ptr [si], 0C001h + mov word ptr [di+8], 0Dh + mov byte ptr [di+7], 80h ; '' + jmp short locret_FEC3 +sub_FE9E endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + mov cx, [si+8] + cmp cx, 0Fh + jg short loc_FEE8 + or cx, cx + jg short loc_FEF2 + sub ax, ax + jmp short loc_FF04 +; --------------------------------------------------------------------------- + +loc_FEE8: ; CODE XREF: seg014:101Ej + mov ch, 8 + call sub_115C9 + mov ax, 7FFFh + jmp short loc_FEFC +; --------------------------------------------------------------------------- + +loc_FEF2: ; CODE XREF: seg014:1022j + mov ax, [si+6] + neg cl + add cl, 10h + shr ax, cl + +loc_FEFC: ; CODE XREF: seg014:1030j + cmp byte ptr [si+0Ah], 1 + jnz short loc_FF04 + neg ax + +loc_FF04: ; CODE XREF: seg014:1026j seg014:1040j + mov cx, [di+8] + cmp cx, 0C001h + jle short loc_FF22 + cmp cx, 4001h + jge short loc_FF22 + add ax, cx + cmp ax, 0C001h + jle short loc_FF30 + cmp ax, 4001h + jge short loc_FF26 + mov [di+8], ax + +loc_FF22: ; CODE XREF: seg014:104Bj seg014:1051j ... + pop di + pop si + pop bp + retn +; --------------------------------------------------------------------------- + +loc_FF26: ; CODE XREF: seg014:105Dj + mov ch, 8 + call sub_115C9 + mov ax, 4001h + jmp short loc_FF38 +; --------------------------------------------------------------------------- + +loc_FF30: ; CODE XREF: seg014:1058j + mov ch, 10h + call sub_115C9 + mov ax, 0C001h + +loc_FF38: ; CODE XREF: seg014:106Ej + call sub_FCFD + jmp short loc_FF22 +; --------------------------------------------------------------------------- + mov cx, dx + xchg ax, bx + jmp short loc_FF51 +; --------------------------------------------------------------------------- + mov cx, dx + xchg ax, bx + mov dx, 0 + jmp short loc_FF63 + +; =============== S U B R O U T I N E ======================================= + + +sub_FF4A proc near ; CODE XREF: seg014:2199j seg014:2217j ... + mov bx, es:[si] + mov cx, es:[si+2] + +loc_FF51: ; CODE XREF: seg014:1080j + sub ax, ax + mov dx, 0 + or cx, cx + jns short loc_FF63 + not cx + neg bx + sbb cx, 0FFFFh + mov dl, 1 + +loc_FF63: ; CODE XREF: seg014:1088j sub_FF4A+Ej + mov [di+0Ah], dl + mov dl, 10h + or cx, cx + jnz short loc_FF78 + xchg bx, cx + mov dl, 0 + jcxz short loc_FF90 + jmp short loc_FF78 +; --------------------------------------------------------------------------- + +loc_FF74: ; CODE XREF: sub_FF4A+31j + rcr bx, 1 + rcr ax, 1 + +loc_FF78: ; CODE XREF: sub_FF4A+20j sub_FF4A+28j + inc dx + shr cx, 1 + jnz short loc_FF74 + rcr bx, 1 + rcr ax, 1 + +loc_FF81: ; CODE XREF: sub_FF4A+49j + mov [di+8], dx + mov [di+6], bx + mov [di+4], ax + mov [di+2], cx + mov [di], cx + retn +; --------------------------------------------------------------------------- + +loc_FF90: ; CODE XREF: sub_FF4A+26j + mov dx, 0C001h + jmp short loc_FF81 +sub_FF4A endp + +; --------------------------------------------------------------------------- + mov byte ptr dword_122EA+2, 1 + mov cx, [si+8] + cmp cx, 20h ; ' ' + jmp short loc_FFA8 + +; =============== S U B R O U T I N E ======================================= + + +sub_FFA2 proc near ; CODE XREF: seg014:2199j seg014:2217j ... + mov cx, [si+8] + cmp cx, 20h ; ' ' + +loc_FFA8: ; CODE XREF: seg014:10E0j + jg short loc_FFDD + or cx, cx + jge short loc_FFEA + cmp cx, 0C001h + jle short loc_FFC7 + mov bl, 0Ch + and bl, byte ptr aBorlandCCopyri+3 + add bl, [si+0Ah] + cmp bl, 5 + jz short loc_FFCD + cmp bl, 8 + jz short loc_FFCD + +loc_FFC7: ; CODE XREF: sub_FFA2+10j + sub dx, dx + mov ax, dx + jmp short loc_FFE7 +; --------------------------------------------------------------------------- + +loc_FFCD: ; CODE XREF: sub_FFA2+1Ej sub_FFA2+23j + sub dx, dx + mov ax, 1 + cmp bl, 5 + jnz short loc_FFE7 + neg ax + not dx + jmp short loc_FFE7 +; --------------------------------------------------------------------------- + +loc_FFDD: ; CODE XREF: sub_FFA2:loc_FFA8j + ; sub_FFA2:loc_10071j + mov ch, 8 + call sub_115C9 + mov dx, 8000h + sub ax, ax + +loc_FFE7: ; CODE XREF: sub_FFA2+29j sub_FFA2+33j ... + jmp loc_10081 +; --------------------------------------------------------------------------- + +loc_FFEA: ; CODE XREF: sub_FFA2+Aj + mov bx, [si+2] + or bl, [si] + or bl, [si+1] + mov ax, [si+4] + mov dx, [si+6] + sub cl, 10h + ja short loc_1000D + +loc_FFFD: ; CODE XREF: sub_FFA2+66j + or al, bl + or al, bh + xchg ax, bx + xchg ax, dx + sub dx, dx + add cl, 10h + jle short loc_FFFD + and cl, 0Fh + +loc_1000D: ; CODE XREF: sub_FFA2+59j + jcxz short loc_1002C + push si + mov si, 0FFFFh + rol dx, cl + rol ax, cl + shl si, cl + mov cx, si + and cx, ax + xor ax, cx + and si, dx + xor dx, si + or ax, si + or bl, bh + or bl, cl + mov bh, ch + pop si + +loc_1002C: ; CODE XREF: sub_FFA2:loc_1000Dj + mov cl, 0Ch + and cl, byte ptr aBorlandCCopyri+3 + cmp cl, 0Ch + jz short loc_10074 + cmp cl, 0 + jz short loc_1004F + add cl, [si+0Ah] + cmp cl, 4 + jz short loc_10074 + cmp cl, 9 + jz short loc_10074 + neg bx + jb short loc_10059 + jmp short loc_10074 +; --------------------------------------------------------------------------- + +loc_1004F: ; CODE XREF: sub_FFA2+98j + mov cl, 1 + and cl, al + or bl, cl + add bx, 7FFFh + +loc_10059: ; CODE XREF: sub_FFA2+A9j + adc ax, 0 + adc dx, 0 + jns short loc_10074 + cmp byte ptr [si+0Ah], 1 + jnz short loc_10071 + cmp dx, 8000h + jnz short loc_10071 + or ax, ax + jz short loc_10074 + +loc_10071: ; CODE XREF: sub_FFA2+C3j sub_FFA2+C9j + jmp loc_FFDD +; --------------------------------------------------------------------------- + +loc_10074: ; CODE XREF: sub_FFA2+93j sub_FFA2+A0j ... + cmp byte ptr [si+0Ah], 1 + jnz short loc_10081 + not dx + neg ax + sbb dx, 0FFFFh + +loc_10081: ; CODE XREF: sub_FFA2:loc_FFE7j + ; sub_FFA2+D6j + mov byte ptr dword_122EA+2, 0 + mov es:[di], ax + mov es:[di+2], dx + retn +sub_FFA2 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_1008E proc near ; CODE XREF: sub_11293+7p + push bp + push si + mov ax, es:[si] + mov bx, es:[si+2] + mov cx, es:[si+4] + mov dx, es:[si+6] + mov bp, 0 + or dx, dx + jl short loc_100B9 + jg short loc_100CE + or cx, cx + jnz short loc_100CE + or bx, bx + jnz short loc_100CE + or ax, ax + jnz short loc_100CE + mov si, 0C001h + jmp short loc_100EC +; --------------------------------------------------------------------------- + +loc_100B9: ; CODE XREF: sub_1008E+16j + not dx + not cx + not bx + neg ax + cmc + adc bx, 0 + adc cx, 0 + adc dx, 0 + mov bp, 1 + +loc_100CE: ; CODE XREF: sub_1008E+18j + ; sub_1008E+1Cj ... + mov si, 40h ; '@' + +loc_100D1: ; CODE XREF: sub_1008E+4Fj + or dx, dx + jnz short loc_100DF + xchg dx, cx + xchg cx, bx + xchg ax, bx + sub si, 10h + jmp short loc_100D1 +; --------------------------------------------------------------------------- + +loc_100DF: ; CODE XREF: sub_1008E+45j + js short loc_100EC + +loc_100E1: ; CODE XREF: sub_1008E+5Cj + dec si + add ax, ax + adc bx, bx + adc cx, cx + adc dx, dx + jns short loc_100E1 + +loc_100EC: ; CODE XREF: sub_1008E+29j + ; sub_1008E:loc_100DFj + mov [di+8], si + mov [di+6], dx + mov [di+4], cx + mov [di+2], bx + mov [di], ax + xchg ax, bp + mov [di+0Ah], al + pop si + pop bp + retn +sub_1008E endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_10101 proc near ; CODE XREF: sub_112C3+4p + push bp + push di + mov cx, [si+8] + cmp cx, 3Fh ; '?' + jg short loc_10144 + or cx, cx + jge short loc_10155 + cmp cx, 0C001h + jle short loc_10128 + mov bl, 0Ch + and bl, byte ptr aBorlandCCopyri+3 + add bl, [si+0Ah] + cmp bl, 5 + jz short loc_1012C + cmp bl, 8 + jz short loc_1012C + +loc_10128: ; CODE XREF: sub_10101+12j + sub bp, bp + jmp short loc_1014C +; --------------------------------------------------------------------------- + +loc_1012C: ; CODE XREF: sub_10101+20j + ; sub_10101+25j + sub bp, bp + mov dx, bp + mov ax, 1 + cmp bl, 5 + mov bx, bp + jnz short loc_10152 + neg ax + not bx + not dx + not bp + jmp short loc_10152 +; --------------------------------------------------------------------------- + +loc_10144: ; CODE XREF: sub_10101+8j + ; sub_10101:loc_101B5j + mov ch, 8 + call sub_115C9 + mov bp, 8000h + +loc_1014C: ; CODE XREF: sub_10101+29j + sub dx, dx + mov bx, dx + mov ax, bx + +loc_10152: ; CODE XREF: sub_10101+37j + ; sub_10101+41j + jmp loc_101E6 +; --------------------------------------------------------------------------- + +loc_10155: ; CODE XREF: sub_10101+Cj + mov bp, [si+6] + mov dx, [si+4] + mov bx, [si+2] + mov di, [si] + sub ax, ax + sub cl, 30h ; '0' + ja short loc_1017D + +loc_10167: ; CODE XREF: sub_10101+77j + or al, ah + mov ah, 0 + or ax, di + mov di, bx + mov bx, dx + mov dx, bp + sub bp, bp + add cl, 10h + jle short loc_10167 + and cl, 0Fh + +loc_1017D: ; CODE XREF: sub_10101+64j + neg cl + jz short loc_10192 + add cl, 10h + +loc_10184: ; CODE XREF: sub_10101+8Fj + or al, ah + shr bp, 1 + rcr dx, 1 + rcr bx, 1 + rcr di, 1 + rcr ah, 1 + loop loc_10184 + +loc_10192: ; CODE XREF: sub_10101+7Ej + mov cl, 0Ch + and cl, byte ptr aBorlandCCopyri+3 + cmp cl, 0Ch + jz short loc_101CD + cmp cl, 0 + jz short loc_101B7 + add cl, [si+0Ah] + cmp cl, 4 + jz short loc_101CD + cmp cl, 9 + jz short loc_101CD + neg ax + jb short loc_101C0 + jmp short loc_101CD +; --------------------------------------------------------------------------- + +loc_101B5: ; CODE XREF: sub_10101+CAj + jmp short loc_10144 +; --------------------------------------------------------------------------- + +loc_101B7: ; CODE XREF: sub_10101+9Fj + mov cl, 1 + and cx, di + or al, cl + add ax, 7FFFh + +loc_101C0: ; CODE XREF: sub_10101+B0j + mov cx, 0 + adc di, cx + adc bx, cx + adc dx, cx + adc bp, cx + js short loc_101B5 + +loc_101CD: ; CODE XREF: sub_10101+9Aj + ; sub_10101+A7j ... + xchg ax, di + cmp byte ptr [si+0Ah], 1 + jnz short loc_101E6 + not bp + not dx + not bx + neg ax + cmc + adc bx, 0 + adc dx, 0 + adc bp, 0 + +loc_101E6: ; CODE XREF: sub_10101:loc_10152j + ; sub_10101+D1j + pop di + stosw + xchg ax, bx + stosw + xchg ax, dx + stosw + xchg ax, bp + stosw + sub di, 8 + pop bp + retn +sub_10101 endp + +; --------------------------------------------------------------------------- + mov si, word ptr aBorlandCCopyri+0Dh + +; =============== S U B R O U T I N E ======================================= + + +sub_101F7 proc near ; CODE XREF: seg014:1DFDp + push bp + push si + push di + xchg bp, si + mov cx, [bp+8] + cmp cx, 40h ; '@' + jge short loc_10235 + or cx, cx + jge short loc_10252 + cmp cx, 0C001h + jle short loc_10226 + mov ch, 20h ; ' ' + call sub_115C9 + mov cl, 0Ch + and cl, byte ptr aBorlandCCopyri+3 + add cl, [bp+0Ah] + cmp cl, 5 + jz short loc_1022D + cmp cl, 8 + jz short loc_1022D + +loc_10226: ; CODE XREF: sub_101F7+15j + ; sub_101F7+CCj + sub bx, bx + mov si, 0C001h + jmp short loc_1023E +; --------------------------------------------------------------------------- + +loc_1022D: ; CODE XREF: sub_101F7+28j + ; sub_101F7+2Dj + mov si, 1 + mov bx, 8000h + jmp short loc_1023E +; --------------------------------------------------------------------------- + +loc_10235: ; CODE XREF: sub_101F7+Bj + jz short loc_1024F + mov ch, 20h ; ' ' + call sub_115C9 + jmp short loc_1024F +; --------------------------------------------------------------------------- + +loc_1023E: ; CODE XREF: sub_101F7+34j + ; sub_101F7+3Cj + sub ax, ax + mov [bp+0], ax + mov [bp+2], ax + mov [bp+4], ax + mov [bp+6], bx + mov [bp+8], si + +loc_1024F: ; CODE XREF: sub_101F7:loc_10235j + ; sub_101F7+45j + jmp loc_10302 +; --------------------------------------------------------------------------- + +loc_10252: ; CODE XREF: sub_101F7+Fj + mov si, 38h ; '8' + and si, cx + xor cx, si + shr si, 1 + shr si, 1 + shr si, 1 + neg si + add si, 7 + cmp si, 7 + jnz short loc_1026F + mov ah, 0 + mov al, [bp+si] + jmp short loc_10271 +; --------------------------------------------------------------------------- + +loc_1026F: ; CODE XREF: sub_101F7+70j + mov ax, [bp+si] + +loc_10271: ; CODE XREF: sub_101F7+76j + sub bx, bx + mov di, si + +loc_10275: ; CODE XREF: sub_101F7+85j + dec di + jl short loc_1027E + or bl, [bp+di] + mov [bp+di], bh + jmp short loc_10275 +; --------------------------------------------------------------------------- + +loc_1027E: ; CODE XREF: sub_101F7+7Fj + mov dx, 0FFh + and cl, 7 + shr dx, cl + mov di, dx + inc di + and dx, ax + jnz short loc_10291 + or bl, bl + jz short loc_10302 + +loc_10291: ; CODE XREF: sub_101F7+94j + mov ch, 20h ; ' ' + call sub_115C9 + xor ax, dx + mov cl, 0Ch + and cl, byte ptr aBorlandCCopyri+3 + cmp cl, 0Ch + jz short loc_102BB + cmp cl, 0 + jz short loc_102C6 + add cl, [bp+0Ah] + cmp cl, 4 + jz short loc_102BB + cmp cl, 9 + jz short loc_102BB + or bl, dl + jnz short loc_102DC + jmp short loc_10302 +; --------------------------------------------------------------------------- + +loc_102BB: ; CODE XREF: sub_101F7+AAj + ; sub_101F7+B7j ... + mov [bp+si], al + cmp byte ptr [bp+7], 0 + jnz short loc_10302 + jmp loc_10226 +; --------------------------------------------------------------------------- + +loc_102C6: ; CODE XREF: sub_101F7+AFj + or bl, bl + jnz short loc_102D6 + test ax, di + jnz short loc_102D6 + add dx, dx + cmp dx, di + jbe short loc_102BB + jmp short loc_102DC +; --------------------------------------------------------------------------- + +loc_102D6: ; CODE XREF: sub_101F7+D1j + ; sub_101F7+D5j + add dx, dx + cmp dx, di + jb short loc_102BB + +loc_102DC: ; CODE XREF: sub_101F7+C0j + ; sub_101F7+DDj + sub si, 7 + jl short loc_102EA + add ax, di + mov [bp+si+7], al + neg ah + jmp short loc_102F9 +; --------------------------------------------------------------------------- + +loc_102EA: ; CODE XREF: sub_101F7+E8j + add ax, di + mov [bp+si+7], ax + inc si + +loc_102F0: ; CODE XREF: sub_101F7+100j + inc si + jg short loc_102F9 + adc byte ptr [bp+si+7], 0 + jb short loc_102F0 + +loc_102F9: ; CODE XREF: sub_101F7+F1j + ; sub_101F7+FAj + jnb short loc_10302 + stc + rcr word ptr [bp+6], 1 + inc word ptr [bp+8] + +loc_10302: ; CODE XREF: sub_101F7:loc_1024Fj + ; sub_101F7+98j ... + pop di + pop si + pop bp + retn +sub_101F7 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_10306 proc near ; CODE XREF: sub_105BF+3p sub_105E0p ... + push bp + push si + push di + mov bp, word ptr aBorlandCCopyri+0Dh + mov ax, [bp+0] + mov bx, [bp+2] + mov cx, [bp+4] + mov dx, [bp+6] + sub di, di + mov si, [bp+8] + cmp si, 0C001h + jz short loc_10345 + cmp si, 0FFF0h + jg short loc_10336 + mov di, ax + mov ax, bx + mov bx, cx + mov cx, dx + sub dx, dx + add si, 10h + +loc_10336: ; CODE XREF: sub_10306+21j + ; sub_10306+3Dj + inc si + jg short loc_10345 + shr dx, 1 + rcr cx, 1 + rcr bx, 1 + rcr ax, 1 + rcr di, 1 + jmp short loc_10336 +; --------------------------------------------------------------------------- + +loc_10345: ; CODE XREF: sub_10306+1Cj + ; sub_10306+31j + shl di, 1 + mov di, 0 + adc ax, di + adc bx, di + adc cx, di + adc dx, di + mov [bp+0], ax + mov [bp+2], bx + mov [bp+4], cx + mov [bp+6], dx + mov bx, di + mov cx, di + mov si, di + test byte ptr [bp+3], 80h + jz short loc_10374 + mov bx, [bp+0] + mov cx, [bp+2] + shl bx, 1 + rcl cx, 1 + +loc_10374: ; CODE XREF: sub_10306+62j + mov ax, [bp+0] + mul word ptr [bp+4] + add bx, ax + adc cx, dx + adc si, di + add bx, ax + adc cx, dx + adc si, di + mov bx, cx + mov cx, si + sub si, si + mov ax, [bp+2] + mul word ptr [bp+4] + add bx, ax + adc cx, dx + adc si, di + add bx, ax + adc cx, dx + adc si, di + mov ax, [bp+0] + mul word ptr [bp+6] + add bx, ax + adc cx, dx + adc si, di + add bx, ax + adc cx, dx + adc si, di + shl bx, 1 + adc cx, di + adc si, di + mov bx, cx + mov cx, si + sub si, si + mov ax, [bp+4] + mul ax + add bx, ax + adc cx, dx + adc si, di + mov ax, [bp+6] + mul word ptr [bp+2] + add bx, ax + adc cx, dx + adc si, di + add bx, ax + adc cx, dx + adc si, di + mov ax, [bp+6] + mul word ptr [bp+4] + add cx, ax + adc si, dx + adc di, di + add cx, ax + adc si, dx + adc di, 0 + mov ax, [bp+6] + mul ax + add si, ax + adc di, dx + mov [bp+0], bx + mov [bp+2], cx + mov [bp+4], si + mov [bp+6], di + mov byte ptr [bp+0Ah], 0 + mov word ptr [bp+8], 0 + pop di + pop si + pop bp + retn +sub_10306 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_1040E proc near ; CODE XREF: sub_105C5+9p sub_105E3+9p ... + +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_6 = byte ptr 0Ah +arg_12 = byte ptr 16h + + push bp + mov bp, sp + push si + push di + push ds + push es + mov al, 0Ch + mul byte ptr [bp+arg_2] + sub ax, 0Ch + xchg ax, si + add si, [bp+arg_0] + call sub_FD47 + mov di, si + +loc_10426: ; CODE XREF: sub_1040E+84j + ; sub_1040E+93j + dec byte ptr [bp+arg_2] + jle short loc_104A3 + push bp + mov bp, word ptr aBorlandCCopyri+0Dh + mov al, [bp+arg_12] + xor [bp+arg_6], al + call sub_F213 + mov [bp+0], ax + mov [bp+2], bx + mov [bp+arg_0], cx + mov [bp+arg_2], dx + sub di, 0Ch + mov bx, cs:[di] + mov cx, cs:[di+2] + mov dx, cs:[di+4] + mov si, cs:[di+6] + mov al, cs:[di+0Ah] + cmp al, [bp+arg_6] + jz short loc_10494 + sub bx, [bp+0] + sbb cx, [bp+2] + sbb dx, [bp+arg_0] + sbb si, [bp+arg_2] + jnb short loc_10482 + not si + not dx + not cx + neg bx + cmc + adc cx, 0 + adc dx, 0 + adc si, 0 + xor al, 1 + +loc_10482: ; CODE XREF: sub_1040E+5Ej + mov [bp+0], bx + mov [bp+2], cx + mov [bp+arg_0], dx + mov [bp+arg_2], si + mov [bp+arg_6], al + pop bp + jmp short loc_10426 +; --------------------------------------------------------------------------- + +loc_10494: ; CODE XREF: sub_1040E+50j + add [bp+0], bx + adc [bp+2], cx + adc [bp+arg_0], dx + adc [bp+arg_2], si + pop bp + jmp short loc_10426 +; --------------------------------------------------------------------------- + +loc_104A3: ; CODE XREF: sub_1040E+1Bj + mov si, word ptr aBorlandCCopyri+0Dh + cld + lodsw + xchg ax, bx + lodsw + xchg ax, cx + lodsw + xchg ax, dx + lodsw + xchg ax, di + lodsw + lodsb + inc si + mov word ptr aBorlandCCopyri+0Dh, si + xchg si, di + sub di, di + cmp al, 1 + jnz short loc_104D0 + not si + not dx + not cx + neg bx + cmc + adc cx, di + adc dx, di + adc si, di + jmp short loc_104E2 +; --------------------------------------------------------------------------- + +loc_104D0: ; CODE XREF: sub_1040E+AFj + stc + rcr si, 1 + rcr dx, 1 + rcr cx, 1 + rcr bx, 1 + adc bx, di + adc cx, di + adc dx, di + adc si, di + inc di + +loc_104E2: ; CODE XREF: sub_1040E+C0j + mov ax, word ptr aBorlandCCopyri+0Dh + xchg ax, di + xchg ax, bx + stosw + xchg ax, cx + stosw + xchg ax, dx + stosw + xchg ax, si + stosw + xchg ax, bx + stosw + mov al, 0 + stosb + pop es + pop ds + pop di + pop si + pop bp + retn 4 +sub_1040E endp + +; --------------------------------------------------------------------------- +byte_104FB db 8 ; DATA XREF: sub_105C5r + ; Method + db 0 + db 0 ; Procedure + db 0 + db 0Ah dup(0), 0B6h, 6 dup(0AAh), 2Ah, 2 dup(0), 1, 0 + db 3, 24h, 5 dup(22h), 2, 4 dup(0), 0B3h, 0E4h, 0, 0Dh + db 0D0h, 0, 0Dh, 3 dup(0), 1, 0, 6Eh, 8, 4Bh, 0C7h, 3Bh + db 2Eh, 6 dup(0), 0C6h, 40h, 16h, 99h, 6Bh, 5 dup(0), 1 + db 0, 0Ch, 45h, 92h, 0B0h, 8 dup(0), 0D5h, 45h, 0D6h, 7 dup(0) + db 1, 0 +word_1055D dw 8 ; DATA XREF: sub_105E3r + db 0Ch dup(0), 88h, 6 dup(0FFh), 7Fh, 2 dup(0), 1, 0, 0A6h + db 9Ah, 5 dup(0AAh), 0Ah, 4 dup(0), 7Fh, 0E6h, 4, 5Bh + db 0B0h, 5, 5Bh, 3 dup(0), 1, 0, 0EFh, 26h, 9Bh, 1, 1Ah + db 0A0h, 1, 5 dup(0), 1Dh, 0CEh, 0DCh, 93h, 9Fh, 4, 4 dup(0) + db 1, 0, 0Fh, 0B1h, 4Bh, 0F7h, 8, 7 dup(0), 3, 0D8h, 7Bh + db 0Ch, 6 dup(0), 1, 0 + +; =============== S U B R O U T I N E ======================================= + + +sub_105BF proc near ; CODE XREF: seg014:loc_10B3Bp + call sub_FD2B + call sub_10306 +sub_105BF endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + + +sub_105C5 proc near ; CODE XREF: sub_105F0+9p + push word ptr cs:byte_104FB + mov ax, 163Dh + push ax + call sub_1040E + push word ptr aBorlandCCopyri+0Dh + push si + push si + call sub_F17D + add word ptr aBorlandCCopyri+0Dh, 0Ch + retn +sub_105C5 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_105E0 proc near ; CODE XREF: seg014:1C76p + call sub_10306 +sub_105E0 endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + + +sub_105E3 proc near ; CODE XREF: sub_105F0+Cp + push cs:word_1055D + mov ax, 169Fh + push ax + call sub_1040E + retn +sub_105E3 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_105F0 proc near ; CODE XREF: seg014:1CA4p + call sub_FD2B + call sub_10306 + call sub_FD7A + call sub_105C5 + call sub_105E3 + retn +sub_105F0 endp + +; --------------------------------------------------------------------------- + db 35h, 0C2h, 68h, 21h, 0A2h, 0DAh, 0Fh, 0C9h, 1, 3 dup(0) +word_1060C dw 8 ; DATA XREF: sub_10799+1Dr + db 0Ch dup(0), 57h, 6 dup(55h), 1, 2 dup(0), 1, 0, 0BEh + db 32h, 4 dup(33h), 3, 5 dup(0), 7Dh, 1Eh, 49h, 92h, 24h + db 9, 4 dup(0), 1, 0, 0BCh, 0FEh, 0C6h, 71h, 1Ch, 7 dup(0) + db 5Ch, 0FFh, 16h, 5Dh, 6 dup(0), 1, 0, 0D8h, 0BBh, 3Ah + db 1, 8 dup(0), 0Ah, 0Ch, 4, 7 dup(0), 1, 8 dup(0), 0E7h + db 0FDh, 0FFh, 2 dup(0), 0BDh, 0A4h, 0D6h, 7Bh, 0EEh, 64h + db 5Ch, 0B3h, 2 dup(0FFh), 2 dup(0), 0B5h, 85h, 47h, 0FCh + db 74h, 30h, 11h, 0A1h, 0Bh dup(0), 80h, 1, 3 dup(0), 9Ch + db 0FAh, 64h, 0B0h, 0B2h, 1Dh, 7, 0E6h, 0FEh, 0FFh, 2 dup(0) + db 9Ch, 0FAh, 64h, 0B0h, 0B2h, 1Dh, 7, 0E6h, 2 dup(0FFh) + db 2 dup(0), 0F5h, 0BBh, 4Bh, 4, 46h, 56h, 85h, 0ACh, 4 dup(0) + db 0E6h, 6Eh, 0D9h, 1Fh, 0BDh, 9, 0FAh, 0E9h, 0FEh, 0FFh + db 2 dup(0), 8Dh, 7Bh, 35h, 0BDh, 5Bh, 84h, 0DDh, 0F6h + db 2 dup(0FFh), 2 dup(0), 7Fh, 0D5h, 35h, 2, 0DBh, 80h + db 73h, 0CCh, 4 dup(0) + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_106E6 proc near ; CODE XREF: seg014:1D07p + +var_2 = word ptr -2 + + push bp + mov bp, sp + lea sp, [bp-2] + push si + push di + push si + push di + push si + call sub_F34A + mov [bp+var_2], 0 + mov di, 17AEh + +loc_106FC: ; CODE XREF: sub_106E6+3Bj + cmp [bp+var_2], 3 + jnb short loc_10723 + xchg si, di + call sub_FD47 + xchg di, si + push si + push word ptr aBorlandCCopyri+0Dh + call sub_F899 + add word ptr aBorlandCCopyri+0Dh, 0Ch + cmp ax, 0 + jnz short loc_10723 + inc [bp+var_2] + add di, 0Ch + jmp short loc_106FC +; --------------------------------------------------------------------------- + +loc_10723: ; CODE XREF: sub_106E6+1Aj + ; sub_106E6+33j + cmp [bp+var_2], 0 + jnz short loc_1072E + call sub_10799 + jmp short loc_10793 +; --------------------------------------------------------------------------- + +loc_1072E: ; CODE XREF: sub_106E6+41j + mov bx, [bp+var_2] + dec bx + ; Hack (mov bl, cs:[bx+2]) + db 02eh + db 08ah + db 09fh + db 002h + db 000h + mov [bp+var_2], bx + add bx, 1802h + mov di, bx + xchg si, di + call sub_FD47 + xchg di, si + push si + mov di, word ptr aBorlandCCopyri+0Dh + push di + lea ax, [di-0Ch] + mov word ptr aBorlandCCopyri+0Dh, ax + push ax + call sub_EFAF + push si + push di + push si + call sub_F17D + call sub_FC81 + push di + push si + push si + call sub_EFB3 + push word ptr aBorlandCCopyri+0Dh + push si + push si + call sub_F34A + add word ptr aBorlandCCopyri+0Dh, 18h + call sub_10799 + mov di, [bp+var_2] + add di, 17DEh + xchg si, di + call sub_FD47 + xchg di, si + push word ptr aBorlandCCopyri+0Dh + push si + push si + call sub_EFB3 + add word ptr aBorlandCCopyri+0Dh, 0Ch + +loc_10793: ; CODE XREF: sub_106E6+46j + pop di + pop si + mov sp, bp + pop bp + retn +sub_106E6 endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + + +sub_10799 proc near ; CODE XREF: sub_106E6+43p + ; sub_106E6+8Ep + push si + push di + call sub_FD2B + cmp word ptr [si+8], 0FFE0h + jg short loc_107AB + mov di, si + call sub_FD64 + jmp short loc_107CD +; --------------------------------------------------------------------------- + +loc_107AB: ; CODE XREF: sub_10799+9j + mov di, word ptr aBorlandCCopyri+0Dh + add word ptr [di+8], 3 + call sub_10306 + push cs:word_1060C + mov ax, 174Eh + push ax + call sub_1040E + push di + push si + push si + call sub_F17D + add word ptr aBorlandCCopyri+0Dh, 0Ch + +loc_107CD: ; CODE XREF: sub_10799+10j + pop di + pop si + retn +sub_10799 endp + +; --------------------------------------------------------------------------- +word_107D0 dw 0Dh ; DATA XREF: sub_1086E+60r + db 0Ch dup(0), 3, 6 dup(0), 40h, 4 dup(0), 0A9h, 6 dup(0AAh) + db 0Ah, 4 dup(0), 78h, 6 dup(55h), 1, 4 dup(0), 26h, 23h + db 5 dup(22h), 5 dup(0), 1Ch, 2Bh, 0D8h, 82h, 2Dh, 0D8h + db 2, 5 dup(0), 0FCh, 0F9h, 33h, 40h, 3, 34h, 6 dup(0) + db 14h, 52h, 3, 34h, 40h, 3, 6 dup(0), 1Eh, 6Ch, 0C7h + db 3Bh, 2Eh, 7 dup(0), 4Ch, 0B0h, 0C9h, 4Fh, 2, 7 dup(0) + db 91h, 0Eh, 0E6h, 1Ah, 8 dup(0), 51h, 76h, 1Fh, 1, 8 dup(0) + db 0C5h, 2Ch, 0Bh, 9 dup(0) + +; =============== S U B R O U T I N E ======================================= + + +sub_1086E proc near ; CODE XREF: seg014:1E98p + push bp + push si + push di + mov bp, word ptr aBorlandCCopyri+0Dh + lea di, [bp-0Ch] + mov word ptr aBorlandCCopyri+0Dh, di + call sub_FCD6 + push di + push si + push si + call sub_F17D + mov word ptr aBorlandCCopyri+0Dh, bp + mov di, [si+8] + cmp di, 0FFC0h + jle short loc_108E8 + mov ax, [si] + mov bx, [si+2] + mov cx, [si+4] + mov dx, [si+6] + inc di + jge short loc_108B6 + +loc_1089F: ; CODE XREF: sub_1086E+3Aj + shr dx, 1 + rcr cx, 1 + rcr bx, 1 + rcr ax, 1 + inc di + jl short loc_1089F + adc ax, 0 + adc bx, 0 + adc cx, 0 + adc dx, 0 + +loc_108B6: ; CODE XREF: sub_1086E+2Fj + sub word ptr aBorlandCCopyri+0Dh, 0Ch + cld + mov di, word ptr aBorlandCCopyri+0Dh + stosw + xchg ax, bx + stosw + xchg ax, cx + stosw + xchg ax, dx + stosw + sub ax, ax + stosw + stosb + sub di, 0Bh + push cs:word_107D0 + mov ax, 1912h + push ax + call sub_1040E + mov ax, word ptr aBorlandCCopyri+0Dh + push ax + push si + push si + call sub_F17D + add word ptr aBorlandCCopyri+0Dh, 0Ch + +loc_108E8: ; CODE XREF: sub_1086E+21j + pop di + pop si + pop bp + retn +sub_1086E endp + +; --------------------------------------------------------------------------- + db 0BBh, 0F0h, 17h, 5Ch, 29h, 3Bh, 0AAh, 0B8h, 1, 3 dup(0) +word_108F8 dw 9 ; DATA XREF: sub_10A56+34r + db 0Ch dup(0), 68h, 6 dup(55h), 5, 4 dup(0), 0BAh, 34h + db 5 dup(33h), 5 dup(0), 0A7h, 0C3h, 48h, 92h, 24h, 49h + db 2, 5 dup(0), 4Dh, 5Dh, 22h, 0C7h, 71h, 1Ch, 6 dup(0) + db 24h, 56h, 0EBh, 5Ch, 74h, 1, 6 dup(0), 39h, 0ADh, 0ECh + db 0B1h, 13h, 7 dup(0), 0FDh, 0D6h, 80h, 0Fh, 1, 7 dup(0) + db 0B5h, 7Ah, 0E4h, 10h, 8 dup(0) + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_10966 proc near ; CODE XREF: seg014:1D81p + +var_4 = word ptr -4 +var_2 = word ptr -2 + + push bp + mov bp, sp + push word ptr [di+8] + push si + push di + mov ax, [di] + mov bx, [di+2] + mov cx, [di+4] + mov dx, [di+6] + cmp dx, 0B505h + ja short loc_1098F + shl ax, 1 + rcl bx, 1 + rcl cx, 1 + rcl dx, 1 + mov si, 0 + dec [bp+var_2] + jmp short loc_109A4 +; --------------------------------------------------------------------------- + +loc_1098F: ; CODE XREF: sub_10966+17j + not dx + not cx + not bx + neg ax + cmc + adc bx, 0 + adc cx, 0 + adc dx, 0 + mov si, 1 + +loc_109A4: ; CODE XREF: sub_10966+27j + sub di, di + +loc_109A6: ; CODE XREF: sub_10966+4Dj + or dx, dx + jnz short loc_109C3 + xchg ax, bx + xchg ax, cx + xchg ax, dx + sub di, 10h + cmp di, 0FFC0h + jg short loc_109A6 + sub word ptr aBorlandCCopyri+0Dh, 0Ch + mov di, word ptr aBorlandCCopyri+0Dh + call sub_FCE7 + jmp short loc_109F0 +; --------------------------------------------------------------------------- + +loc_109C3: ; CODE XREF: sub_10966+42j + js short loc_109D0 + +loc_109C5: ; CODE XREF: sub_10966+68j + dec di + shl ax, 1 + rcl bx, 1 + rcl cx, 1 + adc dx, dx + jns short loc_109C5 + +loc_109D0: ; CODE XREF: sub_10966:loc_109C3j + push si + push di + push dx + push cx + push bx + push ax + mov si, sp + call sub_10A56 + mov si, 1A2Ch + call sub_FD47 + mov si, word ptr aBorlandCCopyri+0Dh + mov ax, sp + push si + push ax + push si + call sub_F17D + add sp, 0Ch + +loc_109F0: ; CODE XREF: sub_10966+5Bj + lea si, [bp+var_2] + sub word ptr aBorlandCCopyri+0Dh, 0Ch + mov di, word ptr aBorlandCCopyri+0Dh + call sub_FDB8 + lea si, [di+0Ch] + push si + push di + push di + call sub_EFB3 + push di + push [bp+var_4] + push [bp+var_4] + call sub_F17D + add word ptr aBorlandCCopyri+0Dh, 18h + pop di + pop si + mov sp, bp + pop bp + retn +sub_10966 endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + mov si, di + call sub_FD2B + mov si, word ptr aBorlandCCopyri+0Dh + call sub_10A56 + mov si, 1A2Ch + call sub_FD47 + mov si, word ptr aBorlandCCopyri+0Dh + push si + lea si, [si+0Ch] + push si + push si + call sub_F17D + push si + push word ptr [bp-2] + push word ptr [bp-2] + call sub_F17D + add word ptr aBorlandCCopyri+0Dh, 18h + pop di + pop si + mov sp, bp + pop bp + retn + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_10A56 proc near ; CODE XREF: sub_10966+72p + ; seg014:1B6Bp + push bp + mov bp, sp + push si + push di + cmp word ptr [si+8], 0FFC0h + jle short loc_10AA7 + sub word ptr aBorlandCCopyri+0Dh, 0Ch + mov di, word ptr aBorlandCCopyri+0Dh + call sub_FC81 + inc word ptr [di+8] + push si + push di + push di + call sub_EFB3 + push si + push di + push di + call sub_F34A + call sub_FD7A + mov bx, word ptr aBorlandCCopyri+0Dh + add word ptr [bx+8], 2 + call sub_10306 + push cs:word_108F8 + mov ax, 1A3Ah + push ax + call sub_1040E + push word ptr aBorlandCCopyri+0Dh + push di + push si + call sub_F17D + inc word ptr [si+8] + add word ptr aBorlandCCopyri+0Dh, 18h + +loc_10AA7: ; CODE XREF: sub_10A56+9j + pop di + pop si + mov sp, bp + pop bp + retn +sub_10A56 endp + +; --------------------------------------------------------------------------- + mov cl, 0 + jmp short loc_10AB7 +; --------------------------------------------------------------------------- + mov cl, 2 + jmp short loc_10AB7 +; --------------------------------------------------------------------------- + mov cl, 4 + +loc_10AB7: ; CODE XREF: seg014:1BEFj seg014:1BF3j + mov es, di + mov bp, sp + mov di, word ptr aBorlandCCopyri+0Dh + mov ch, [di+0Ah] + push cx + push ax + cmp word ptr [di+8], 0FFE0h + jg short loc_10AD5 + cmp cl, 2 + jnz short loc_10AD2 + call sub_FC81 + +loc_10AD2: ; CODE XREF: seg014:1C0Dj + jmp loc_10B8F +; --------------------------------------------------------------------------- + +loc_10AD5: ; CODE XREF: seg014:1C08j + cmp word ptr [di+8], 40h ; '@' + jle short loc_10AE6 + call sub_FD13 + mov word ptr [di+6], 21h ; '!' + jmp loc_10B8F +; --------------------------------------------------------------------------- + +loc_10AE6: ; CODE XREF: seg014:1C19j + mov byte ptr [di+0Ah], 0 + lea si, [di-0Ch] + mov word ptr aBorlandCCopyri+0Dh, si + xchg di, si + call sub_FCB4 + xchg di, si + sub word ptr [si+8], 2 + call sub_F791 + and al, 7 + mov [bp-4], al + mov bl, [bp-2] + cmp bl, 4 + jz short loc_10B47 + add bl, [bp-4] + and bl, 7 + mov [bp-4], bl + shr bx, 1 + jnb short loc_10B2A + xchg di, si + call sub_FCB4 + xchg di, si + sub word ptr [si+8], 2 + push si + push di + push di + call sub_EFAF + +loc_10B2A: ; CODE XREF: seg014:1C57j + mov word ptr aBorlandCCopyri+0Dh, di + mov si, di + test byte ptr [bp-4], 3 + jp short loc_10B3B + call sub_105E0 + jmp short loc_10B3E +; --------------------------------------------------------------------------- + +loc_10B3B: ; CODE XREF: seg014:1C74j + call sub_105BF + +loc_10B3E: ; CODE XREF: seg014:1C79j + mov bl, [bp-4] + shr bl, 1 + shr bl, 1 + jmp short loc_10B83 +; --------------------------------------------------------------------------- + +loc_10B47: ; CODE XREF: seg014:1C4Aj + test byte ptr [bp-4], 1 + jz short loc_10B5E + xchg si, di + call sub_FCB4 + xchg si, di + sub word ptr [si+8], 2 + push si + push di + push di + call sub_EFAF + +loc_10B5E: ; CODE XREF: seg014:1C8Bj + mov word ptr aBorlandCCopyri+0Dh, di + mov si, di + call sub_105F0 + lea di, [si-0Ch] + mov ax, si + test byte ptr [bp-4], 3 + jp short loc_10B74 + xchg si, di + +loc_10B74: ; CODE XREF: seg014:1CB0j + xchg ax, di + push si + push ax + push di + call sub_F34A + mov bl, [bp-4] + shr bl, 1 + and bl, 1 + +loc_10B83: ; CODE XREF: seg014:1C85j + cmp byte ptr [bp-2], 2 + jz short loc_10B8C + xor bl, [bp-1] + +loc_10B8C: ; CODE XREF: seg014:1CC7j + mov [di+0Ah], bl + +loc_10B8F: ; CODE XREF: seg014:loc_10AD2j + ; seg014:1C23j + mov word ptr aBorlandCCopyri+0Dh, di + mov sp, bp + retn +; --------------------------------------------------------------------------- + mov es, di + mov si, word ptr aBorlandCCopyri+0Dh + lea di, [si-0Ch] + mov word ptr aBorlandCCopyri+0Dh, di + call sub_FC81 + mov ax, [si+8] + cmp ax, 4001h + jge short loc_10BE6 + cmp ax, 0C001h + jle short loc_10BE1 + mov cl, 0 + mov bx, si + dec ax + jl short loc_10BC1 + call sub_FD97 + mov bx, di + mov cl, 1 + +loc_10BC1: ; CODE XREF: seg014:1CF8j + mov ch, 0 + xchg ch, [bx+0Ah] + push cx + call sub_106E6 + pop cx + cmp cl, 1 + jnz short loc_10BDE + push cx + call sub_FCB4 + dec word ptr [di+8] + push di + push si + push si + call sub_EFAF + pop cx + +loc_10BDE: ; CODE XREF: seg014:1D0Ej + mov [si+0Ah], ch + +loc_10BE1: ; CODE XREF: seg014:1CF1j seg014:1D35j + mov word ptr aBorlandCCopyri+0Dh, si + retn +; --------------------------------------------------------------------------- + +loc_10BE6: ; CODE XREF: seg014:1CECj + mov di, si + push word ptr [si+0Ah] + call sub_FCB4 + pop ax + mov [si+0Ah], al + dec word ptr [si+8] + jmp short loc_10BE1 +; --------------------------------------------------------------------------- + mov es, di + mov si, word ptr aBorlandCCopyri+0Dh + lea di, [si-0Ch] + mov word ptr aBorlandCCopyri+0Dh, di + call sub_FCD6 + jmp short loc_10C2B +; --------------------------------------------------------------------------- + mov es, di + mov si, word ptr aBorlandCCopyri+0Dh + lea di, [si-0Ch] + mov word ptr aBorlandCCopyri+0Dh, di + call sub_FC81 + jmp short loc_10C2B +; --------------------------------------------------------------------------- + mov es, di + mov si, word ptr aBorlandCCopyri+0Dh + lea di, [si-0Ch] + mov word ptr aBorlandCCopyri+0Dh, di + call near ptr byte_FCB9+0Ch + +loc_10C2B: ; CODE XREF: seg014:1D47j seg014:1D59j + call sub_FD97 + cmp byte ptr [di+0Ah], 0 + jnz short loc_10C4D + mov ax, [di+8] + cmp ax, 0C001h + jle short loc_10C49 + cmp ax, 4001h + jge short loc_10C4D + call sub_10966 + +loc_10C44: ; CODE XREF: seg014:1D9Fj seg014:1DA6j + mov word ptr aBorlandCCopyri+0Dh, si + retn +; --------------------------------------------------------------------------- + +loc_10C49: ; CODE XREF: seg014:1D7Aj + mov ch, 4 + jmp short loc_10C4F +; --------------------------------------------------------------------------- + +loc_10C4D: ; CODE XREF: seg014:1D72j seg014:1D7Fj + mov ch, 1 + +loc_10C4F: ; CODE XREF: seg014:1D8Bj + call sub_115C9 + mov ax, 4001h + mov di, si + mov cl, 0 + call sub_FCFD + cmp ch, 1 + jnz short loc_10C44 + mov word ptr [di+6], 0C000h + jmp short loc_10C44 +; --------------------------------------------------------------------------- + mov ax, 0DE3h + jmp short loc_10C7B +; --------------------------------------------------------------------------- + mov es, di + mov si, word ptr aBorlandCCopyri+0Dh + lea di, [si-0Ch] + jmp short loc_10C94 +; --------------------------------------------------------------------------- + mov ax, 0DD2h + +loc_10C7B: ; CODE XREF: seg014:1DABj + mov es, di + mov si, word ptr aBorlandCCopyri+0Dh + lea di, [si-0Ch] + mov word ptr aBorlandCCopyri+0Dh, di + call ax + push si + push di + push si + call sub_F17D + mov word ptr aBorlandCCopyri+0Dh, si + +loc_10C94: ; CODE XREF: seg014:1DB6j + mov bp, sp + mov ax, 0 + push ax + mov ax, [si+8] + cmp ax, 0Ch + jg short loc_10CF0 + cmp ax, 0FFC0h + jle short loc_10D1C + call sub_FD7A + inc word ptr [di+8] + push word ptr aBorlandCCopyri+2 + and byte ptr aBorlandCCopyri+3, 0F3h + or byte ptr aBorlandCCopyri+3, 4 + mov si, di + call sub_101F7 + pop word ptr aBorlandCCopyri+2 + push ax + mov di, sp + call sub_FDFB + dec word ptr [si+8] + lea di, [si+0Ch] + push di + push si + push di + call sub_EFAF + pop ax + sar ax, 1 + jnb short loc_10D38 + mov word ptr [si], 6485h + mov word ptr [si+2], 0F9DEh + mov word ptr [si+4], 0F333h + mov word ptr [si+6], 0B504h + jmp short loc_10D4B +; --------------------------------------------------------------------------- + +loc_10CF0: ; CODE XREF: seg014:1DE0j + cmp ax, 4001h + jnz short loc_10D05 + mov ax, 7FFFh + and ax, [si+6] + or ax, [si+4] + or ax, [si+2] + or ax, [si] + jnz short loc_10D23 + +loc_10D05: ; CODE XREF: seg014:1E33j + cmp byte ptr [si+0Ah], 0 + jnz short loc_10D31 + mov di, si + mov ch, 8 + call sub_115C9 + mov ax, 4001h + mov cl, 0 + call sub_FCFD + jmp short loc_10D71 +; --------------------------------------------------------------------------- + +loc_10D1C: ; CODE XREF: seg014:1DE5j + mov di, si + call sub_FC81 + jmp short loc_10D71 +; --------------------------------------------------------------------------- + +loc_10D23: ; CODE XREF: seg014:1E43j + mov word ptr [si+6], 0C000h + mov di, si + mov ch, 1 + call sub_115C9 + jmp short loc_10D71 +; --------------------------------------------------------------------------- + +loc_10D31: ; CODE XREF: seg014:1E49j + mov di, si + call sub_FCE7 + jmp short loc_10D71 +; --------------------------------------------------------------------------- + +loc_10D38: ; CODE XREF: seg014:1E19j + mov word ptr [si], 0 + mov word ptr [si+2], 0 + mov word ptr [si+4], 0 + mov word ptr [si+6], 8000h + +loc_10D4B: ; CODE XREF: seg014:1E2Ej + inc ax + mov [si+8], ax + mov byte ptr [si+0Ah], 0 + mov di, si + lea si, [di+0Ch] + call sub_1086E + push si + push di + push si + call sub_F17D + push si + push di + push si + call sub_EFB3 + cmp byte ptr [bp-2], 1 + jnz short loc_10D71 + xor byte ptr [si+0Ah], 1 + +loc_10D71: ; CODE XREF: seg014:1E5Aj seg014:1E61j ... + mov word ptr aBorlandCCopyri+0Dh, si + mov sp, bp + retn + +; =============== S U B R O U T I N E ======================================= + + +sub_10D78 proc near ; CODE XREF: sub_10DA7+26p + ; sub_10DA7+3Dp ... + push bx + push cx + push dx + mov cl, 4 + mov ch, 0Ah + mov bx, es:[si] + mov al, bh + shr al, cl + mul ch + mov dl, 0Fh + and dl, bh + add al, dl + mul ch + mov dx, 0F0h ; '' + and dl, bl + shr dx, cl + add ax, dx + mov cx, 0Ah + mul cx + and bx, 0Fh + add ax, bx + pop dx + pop cx + pop bx + retn +sub_10D78 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_10DA7 proc near ; CODE XREF: sub_112A3+7p + +var_4 = word ptr -4 +var_2 = word ptr -2 + + push bp + mov bp, sp + push si + push di + mov al, es:[si+9] + and ax, 80h + rol al, 1 + mov [di+0Ah], al + mov cl, 4 + mov al, es:[si+8] + shl ax, cl + shr al, cl + aad + mov di, 2710h + mul di + xchg ax, bx + lea si, [si+6] + call sub_10D78 + add ax, bx + adc dl, dh + mov bx, dx + mul di + xchg ax, bx + mov cx, dx + mul di + add cx, ax + adc dl, dh + sub si, 2 + call sub_10D78 + add ax, bx + adc cx, 0 + adc dl, dh + push si + mov bx, dx + mul di + xchg ax, cx + mov si, dx + mul di + xchg ax, bx + xchg di, dx + mul dx + add bx, si + adc di, ax + pop si + sub si, 2 + call sub_10D78 + add ax, cx + adc bx, dx + adc di, dx + mov si, 2710h + mul si + xchg ax, bx + mov cx, dx + mul si + xchg ax, si + xchg di, dx + mul dx + add cx, si + adc di, ax + adc dx, 0 + mov si, [bp+var_2] + call sub_10D78 + add bx, ax + adc cx, 0 + adc di, 0 + adc dx, 0 + mov ax, 40h ; '@' + +loc_10E38: ; CODE XREF: sub_10DA7+A0j + or dx, dx + jnz short loc_10E49 + sub ax, 10h + jz short loc_10E6D + xchg dx, di + xchg di, cx + xchg cx, bx + jmp short loc_10E38 +; --------------------------------------------------------------------------- + +loc_10E49: ; CODE XREF: sub_10DA7+93j + js short loc_10E56 + +loc_10E4B: ; CODE XREF: sub_10DA7+ADj + dec ax + shl bx, 1 + rcl cx, 1 + rcl di, 1 + adc dx, dx + jns short loc_10E4B + +loc_10E56: ; CODE XREF: sub_10DA7:loc_10E49j + ; sub_10DA7+C9j + mov si, [bp+var_4] + mov [si], bx + mov [si+2], cx + mov [si+4], di + mov [si+6], dx + mov [si+8], ax + pop di + pop si + mov sp, bp + pop bp + retn +; --------------------------------------------------------------------------- + +loc_10E6D: ; CODE XREF: sub_10DA7+98j + mov ax, 0C001h + jmp short loc_10E56 +sub_10DA7 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_10E72 proc near ; CODE XREF: sub_10E90+81p + ; sub_10E90+8Fp ... + push ax + push cx + mov al, 64h ; 'd' + mov cl, 4 + xchg ax, dx + div dl + mov dl, ah + aam + shl ah, cl + or ah, al + xchg ax, dx + aam + shl ah, cl + or al, ah + mov ah, dh + stosw + pop cx + pop ax + retn +sub_10E72 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_10E90 proc near ; CODE XREF: sub_112D0+4p + +var_2 = word ptr -2 + + push bp + mov bp, sp + push si + push di + cld + mov ax, [si+8] + mov bx, [si] + mov cx, [si+2] + mov dx, [si+6] + mov si, [si+4] + cmp ax, 0 + jl short loc_10EE1 + sub ax, 3Ch ; '<' + jl short loc_10ECD + jg short loc_10EE3 + cmp dx, 0DE0Bh + jb short loc_10ECD + ja short loc_10EE3 + cmp si, 6B3Ah + jb short loc_10ECD + ja short loc_10EE3 + cmp cx, 763Fh + jb short loc_10ECD + ja short loc_10EE3 + cmp bx, 0FFF0h + ja short loc_10EE3 + +loc_10ECD: ; CODE XREF: sub_10E90+1Cj + ; sub_10E90+24j ... + mov ah, 0 + sub al, 4 + +loc_10ED1: ; CODE XREF: sub_10E90+4Fj + add al, 10h + jg short loc_10EE5 + mov ah, bh + mov bx, cx + mov cx, si + mov si, dx + sub dx, dx + jmp short loc_10ED1 +; --------------------------------------------------------------------------- + +loc_10EE1: ; CODE XREF: sub_10E90+17j + jmp short loc_10F4A +; --------------------------------------------------------------------------- + +loc_10EE3: ; CODE XREF: sub_10E90+1Ej + ; sub_10E90+26j ... + jmp short loc_10F53 +; --------------------------------------------------------------------------- + +loc_10EE5: ; CODE XREF: sub_10E90+43j + sub al, 10h + jge short loc_10EF7 + +loc_10EE9: ; CODE XREF: sub_10E90+65j + shr dx, 1 + rcr si, 1 + rcr cx, 1 + rcr bx, 1 + rcr ah, 1 + inc al + jl short loc_10EE9 + +loc_10EF7: ; CODE XREF: sub_10E90+57j + add ah, ah + adc bx, 0 + adc cx, 0 + adc si, 0 + adc dx, 0 + xchg ax, si + mov si, 2710h + div si + xchg ax, cx + div si + xchg ax, bx + div si + call sub_10E72 + sub dx, dx + xchg ax, cx + div si + xchg ax, bx + div si + xchg ax, cx + div si + call sub_10E72 + mov dx, bx + xchg ax, cx + div si + xchg ax, cx + div si + call sub_10E72 + mov dx, cx + div si + call sub_10E72 + aam + mov cl, 4 + shl ah, cl + or al, ah + stosb + +loc_10F3D: ; CODE XREF: sub_10E90+C1j + mov si, [bp+var_2] + mov al, [si+0Ah] + ror al, 1 + stosb + pop di + pop si + pop bp + retn +; --------------------------------------------------------------------------- + +loc_10F4A: ; CODE XREF: sub_10E90:loc_10EE1j + mov al, 0 + +loc_10F4C: ; CODE XREF: sub_10E90+CAj + mov cx, 9 + rep stosb + jmp short loc_10F3D +; --------------------------------------------------------------------------- + +loc_10F53: ; CODE XREF: sub_10E90:loc_10EE3j + mov ch, 8 + call sub_115C9 + mov al, 99h ; '' + jmp short loc_10F4C +sub_10E90 endp + +; --------------------------------------------------------------------------- +off_10F5C dw offset loc_1105E ; DATA XREF: seg014:2199r + dw offset loc_11068 + dw offset loc_11072 + dw offset loc_1107C + dw offset loc_11086 + dw offset loc_1108D + dw offset loc_110AB + dw offset loc_11094 +off_10F6C dw offset loc_1143C ; DATA XREF: seg014:2217r + dw offset loc_114B1 + dw offset loc_11521 + dw offset loc_11523 +off_10F74 dw offset sub_FA49 ; DATA XREF: seg014:223Br + dw offset sub_FF4A + dw offset sub_FB4D + dw offset sub_FDB8 +off_10F7C dw offset sub_1113C ; DATA XREF: seg014:2250r seg014:2277r + dw offset sub_11143 + dw offset sub_1114D + dw offset sub_1114A + dw offset sub_11154 + dw offset sub_11153 + dw offset sub_1115C + dw offset sub_1115B +off_10F8C dw offset sub_FA49 ; DATA XREF: seg014:22C7r + dw offset sub_FF4A + dw offset sub_FB4D + dw offset sub_FDB8 +off_10F94 dw offset sub_F9CF ; DATA XREF: seg014:22DBr seg014:22EAr + dw offset sub_FFA2 + dw offset sub_FAA6 + dw offset sub_FDFB +off_10F9C dw offset sub_111D4 ; DATA XREF: seg014:22FFr + dw offset sub_111CE + dw offset sub_11235 + dw offset sub_112A3 + dw offset sub_111DD + dw offset sub_112B3 + dw offset sub_111CE + dw offset sub_11293 +off_10FAC dw offset sub_111E8 ; DATA XREF: seg014:2306r + dw offset sub_111CE + dw offset sub_11211 + dw offset sub_112D0 + dw offset sub_11267 + dw offset sub_112DD + dw offset sub_1126C + dw offset sub_112C3 +; --------------------------------------------------------------------------- + +loc_10FBC: ; CODE XREF: seg014:2109j + mov ch, 1 + call sub_115C9 + jmp loc_11551 +; --------------------------------------------------------------------------- + +loc_10FC4: ; CODE XREF: seg014:2165j + ja short loc_10FEA + test ah, 20h + jnz short loc_10FBC + mov al, ah + inc dx + mov di, ds + and al, 0C0h + jz short loc_10FE2 + cmp al, 80h ; '' + mov di, ss + jb short loc_10FE2 + mov di, [bp+0] + ja short loc_10FE2 + mov di, [bp+14h] + +loc_10FE2: ; CODE XREF: seg014:2112j seg014:2118j ... + lods byte ptr es:[si] + xchg ah, al + and al, 7 + jmp short loc_11027 +; --------------------------------------------------------------------------- + +loc_10FEA: ; CODE XREF: seg014:loc_10FC4j + cmp al, 9 + jnz short loc_11002 + mov ax, es + xor ax, ss:27h + mov es, ax + push es + pop es + mov word ptr es:[si-3], 0E489h + jmp loc_11551 +; --------------------------------------------------------------------------- + +loc_11002: ; CODE XREF: seg014:212Cj + jmp loc_11606 +; --------------------------------------------------------------------------- + db 55h, 0 +; --------------------------------------------------------------------------- + +loc_11007: ; DATA XREF: seg000:155Eo + sti + cld + push ax + push cx + push dx + push bx + push ds + push bp + push si + push di + push es + mov bp, sp + mov ss:53h, bp + les si, [bp+12h] + mov dl, 0 + dec si + lods word ptr es:[si] + sub al, 34h ; '4' + cmp al, 8 + jnb short loc_10FC4 + +loc_11027: ; CODE XREF: seg014:2128j + mov bx, 0C007h + and bl, ah + and bh, ah + xchg ax, cx + cmp bh, 0C0h ; '' + jnb short loc_1109B + cmp bh, 40h ; '@' + ja short loc_1104B + jz short loc_1104F + sub ax, ax + cmp bl, 6 + jnz short loc_11052 + lods word ptr es:[si] + mov [bp+12h], si + mov si, ds + jmp short loc_110B0 +; --------------------------------------------------------------------------- + +loc_1104B: ; CODE XREF: seg014:2177j + lods word ptr es:[si] + jmp short loc_11052 +; --------------------------------------------------------------------------- + +loc_1104F: ; CODE XREF: seg014:2179j + lods byte ptr es:[si] + cbw + +loc_11052: ; CODE XREF: seg014:2180j seg014:218Dj + mov [bp+12h], si + mov bh, 0 + shl bx, 1 + jmp cs:off_10F5C[bx] + +loc_1105E: ; DATA XREF: seg014:off_10F5Co + add ax, [bp+0Ah] + add ax, [bp+4] + mov si, ds + jmp short loc_110B0 +; --------------------------------------------------------------------------- + +loc_11068: ; CODE XREF: seg014:2199j + ; DATA XREF: seg014:209Eo + add ax, [bp+0Ah] + add ax, [bp+2] + mov si, ds + jmp short loc_110B0 +; --------------------------------------------------------------------------- + +loc_11072: ; CODE XREF: seg014:2199j + ; DATA XREF: seg014:20A0o + add ax, [bp+6] + add ax, [bp+4] + mov si, ss + jmp short loc_110B0 +; --------------------------------------------------------------------------- + +loc_1107C: ; CODE XREF: seg014:2199j + ; DATA XREF: seg014:20A2o + add ax, [bp+6] + add ax, [bp+2] + mov si, ss + jmp short loc_110B0 +; --------------------------------------------------------------------------- + +loc_11086: ; CODE XREF: seg014:2199j + ; DATA XREF: seg014:20A4o + add ax, [bp+4] + mov si, ds + jmp short loc_110B0 +; --------------------------------------------------------------------------- + +loc_1108D: ; CODE XREF: seg014:2199j + ; DATA XREF: seg014:20A6o + add ax, [bp+2] + mov si, ds + jmp short loc_110B0 +; --------------------------------------------------------------------------- + +loc_11094: ; CODE XREF: seg014:2199j + ; DATA XREF: seg014:20AAo + add ax, [bp+0Ah] + mov si, ds + jmp short loc_110B0 +; --------------------------------------------------------------------------- + +loc_1109B: ; CODE XREF: seg014:2172j + mov [bp+12h], si + mov ax, ss + mov ds, ax + mov es, ax + test cl, 1 + jz short loc_110DC + jmp short loc_110C2 +; --------------------------------------------------------------------------- + +loc_110AB: ; CODE XREF: seg014:2199j + ; DATA XREF: seg014:20A8o + add ax, [bp+6] + mov si, ss + +loc_110B0: ; CODE XREF: seg014:2189j seg014:21A6j ... + xchg ax, si + cmp dl, 1 + jnz short loc_110B7 + xchg ax, di + +loc_110B7: ; CODE XREF: seg014:21F4j + mov es, ax + mov ax, ss + mov ds, ax + test cl, 1 + jz short loc_110DC + +loc_110C2: ; CODE XREF: seg014:21E9j + cmp ch, 0C0h ; '' + jnb short loc_110CA + jmp loc_11163 +; --------------------------------------------------------------------------- + +loc_110CA: ; CODE XREF: seg014:2205j + test ch, 20h + jnz short loc_110D2 + jmp loc_1130A +; --------------------------------------------------------------------------- + +loc_110D2: ; CODE XREF: seg014:220Dj + mov bx, 6 + and bl, cl + jmp cs:off_10F6C[bx] +; --------------------------------------------------------------------------- + +loc_110DC: ; CODE XREF: seg014:21E7j seg014:2200j + mov ax, 38h ; '8' + and al, ch + shr ax, 1 + shr ax, 1 + xchg ax, bp + cmp ch, 0C0h ; '' + jnb short loc_11115 + mov di, word ptr aBorlandCCopyri+0Dh + sub di, 0Ch + mov word ptr aBorlandCCopyri+0Dh, di + mov bx, 6 + and bl, cl + call cs:off_10F74[bx] + mov cx, ss + mov es, cx + mov si, 0Ch + mov bx, di + lea ax, [bx+si] + mov dx, ax + mov cx, 268Ch + jmp cs:off_10F7C[bp] +; --------------------------------------------------------------------------- + +loc_11115: ; CODE XREF: seg014:2229j + mov bh, 0 + ; Hack (mov bl, cs:[bx+2]) + db 02eh + db 08ah + db 09fh + db 002h + db 000h + mov ax, word ptr aBorlandCCopyri+0Dh + add bx, ax + test cl, 4 + mov dx, ax + jz short loc_1112A + mov dx, bx + +loc_1112A: ; CODE XREF: seg014:2266j + sub si, si + test cl, 2 + jz short loc_11134 + mov si, 0Ch + +loc_11134: ; CODE XREF: seg014:226Fj + mov cx, 268Ch + jmp cs:off_10F7C[bp] + +; =============== S U B R O U T I N E ======================================= + + +sub_1113C proc near ; CODE XREF: seg014:2199j seg014:2217j ... + push ax + push bx + push dx + push cx + jmp sub_EFB3 +sub_1113C endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_11143 proc near ; CODE XREF: seg014:2199j seg014:2217j ... + push ax + push bx + push dx + push cx + jmp sub_F17D +sub_11143 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_1114A proc near ; CODE XREF: seg014:2199j seg014:2217j ... + add si, 0Ch +sub_1114A endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + + +sub_1114D proc near ; CODE XREF: seg014:2199j seg014:2217j ... + push ax + push bx + push cx + jmp sub_F899 +sub_1114D endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_11153 proc near ; CODE XREF: seg014:2199j seg014:2217j ... + xchg ax, bx +sub_11153 endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + + +sub_11154 proc near ; CODE XREF: seg014:2199j seg014:2217j ... + push ax + push bx + push dx + push cx + jmp sub_EFAF +sub_11154 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_1115B proc near ; CODE XREF: seg014:2199j seg014:2217j ... + xchg ax, bx +sub_1115B endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + + +sub_1115C proc near ; CODE XREF: seg014:2199j seg014:2217j ... + push ax + push bx + push dx + push cx + jmp sub_F34A +sub_1115C endp + +; --------------------------------------------------------------------------- + +loc_11163: ; CODE XREF: seg014:2207j + mov bp, 6 + and bp, cx + test ch, 20h + jnz short loc_111AF + test ch, 10h + jnz short loc_1118C + test ch, 8 + jnz short loc_111CB + mov di, word ptr aBorlandCCopyri+0Dh + mov ax, 0FFF4h + add di, ax + mov word ptr aBorlandCCopyri+4, ax + mov ax, 2687h + push ax + jmp cs:off_10F8C[bp] +; --------------------------------------------------------------------------- + +loc_1118C: ; CODE XREF: seg014:22B0j + mov di, word ptr aBorlandCCopyri+0Dh + xchg si, di + test ch, 8 + jnz short loc_111A0 + mov ax, 2691h + push ax + jmp cs:off_10F94[bp] +; --------------------------------------------------------------------------- + +loc_111A0: ; CODE XREF: seg014:22D5j + mov word ptr aBorlandCCopyri+4, 0Ch + mov ax, 2687h + push ax + jmp cs:off_10F94[bp] +; --------------------------------------------------------------------------- + +loc_111AF: ; CODE XREF: seg014:22ABj + mov ax, 8 + and al, ch + or bp, ax + mov ax, 2691h + push ax + test ch, 10h + jnz short loc_111C4 + jmp cs:off_10F9C[bp] +; --------------------------------------------------------------------------- + +loc_111C4: ; CODE XREF: seg014:22FDj + xchg si, di + jmp cs:off_10FAC[bp] +; --------------------------------------------------------------------------- + +loc_111CB: ; CODE XREF: seg014:22B5j + jmp loc_11551 + +; =============== S U B R O U T I N E ======================================= + + +sub_111CE proc near ; CODE XREF: seg014:2199j seg014:2217j ... + mov ch, 1 + call sub_115C9 + retn +sub_111CE endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_111D4 proc near ; CODE XREF: seg014:2199j seg014:2217j ... + mov cl, 4 + mov ax, es:[si+2] + mov word ptr aBorlandCCopyri, ax ; "Borland C++ - Copyright 1993 Borland In"... +sub_111D4 endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + + +sub_111DD proc near ; CODE XREF: seg014:2199j seg014:2217j ... + mov ax, es:[si] + mov word ptr aBorlandCCopyri+2, ax + mov ch, 0 + jmp sub_115C9 +sub_111DD endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_111E8 proc near ; CODE XREF: seg014:2199j seg014:2217j ... + call sub_11267 + call sub_1126C + mov ax, word ptr aBorlandCCopyri+11h + sub ax, word ptr aBorlandCCopyri+0Dh + mov cx, 60h ; '`' + cmp ax, cx + jb short loc_111FD + xchg ax, cx + +loc_111FD: ; CODE XREF: sub_111E8+12j + mov dl, 0Ch + div dl + xchg ax, cx + add cx, cx + mov ax, 0FFFFh + shr ax, cl + stosw + sub ax, ax + stosw + stosw + stosw + stosw + retn +sub_111E8 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_11211 proc near ; CODE XREF: seg014:2199j seg014:2217j ... + call sub_111E8 + mov si, word ptr aBorlandCCopyri+0Dh + mov bp, es:[di-0Ah] + neg bp + dec bp + +loc_1121F: ; CODE XREF: sub_11211+1Dj + jz short loc_11230 + call sub_FC0B + add si, 0Ch + add di, 0Ah + shl bp, 1 + shl bp, 1 + jmp short loc_1121F +; --------------------------------------------------------------------------- + +loc_11230: ; CODE XREF: sub_11211:loc_1121Fj + mov word ptr aBorlandCCopyri+0Dh, si + retn +sub_11211 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_11235 proc near ; CODE XREF: seg014:2199j seg014:2217j ... + mov di, word ptr aBorlandCCopyri+0Dh + mov bp, es:[si+4] + neg bp + dec bp + jz short sub_111D4 + add si, 5Eh ; '^' + +loc_11245: ; CODE XREF: sub_11235+17j + sub si, 0Ah + shr bp, 1 + shr bp, 1 + jnb short loc_11245 + +loc_1124E: ; CODE XREF: sub_11235+26j + sub di, 0Ch + call sub_FC38 + sub si, 0Ah + shr bp, 1 + shr bp, 1 + jb short loc_1124E + add si, 0FFFCh + mov word ptr aBorlandCCopyri+0Dh, di + jmp sub_111D4 +sub_11235 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_11267 proc near ; CODE XREF: seg014:2199j seg014:2217j ... + mov ax, word ptr aBorlandCCopyri+2 + stosw + retn +sub_11267 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_1126C proc near ; CODE XREF: seg014:2199j seg014:2217j ... + mov ax, word ptr aBorlandCCopyri+11h + sub ax, word ptr aBorlandCCopyri+0Dh + mov cx, 60h ; '`' + cmp ax, cx + jb short loc_1127B + xchg ax, cx + +loc_1127B: ; CODE XREF: sub_1126C+Cj + neg ax + mov cl, 0Ch + idiv cl + and al, 7 + mov cl, 3 + shl al, cl + mov cx, word ptr aBorlandCCopyri ; "Borland C++ - Copyright 1993 Borland In"... + and ch, 0C7h + or ch, al + xchg ax, cx + stosw + retn +sub_1126C endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_11293 proc near ; CODE XREF: seg014:2199j seg014:2217j ... + mov di, word ptr aBorlandCCopyri+0Dh + sub di, 0Ch + call sub_1008E + sub word ptr aBorlandCCopyri+0Dh, 0Ch + retn +sub_11293 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_112A3 proc near ; CODE XREF: seg014:2199j seg014:2217j ... + mov di, word ptr aBorlandCCopyri+0Dh + sub di, 0Ch + call sub_10DA7 + sub word ptr aBorlandCCopyri+0Dh, 0Ch + retn +sub_112A3 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_112B3 proc near ; CODE XREF: seg014:2199j seg014:2217j ... + mov di, word ptr aBorlandCCopyri+0Dh + sub di, 0Ch + call sub_FC38 + sub word ptr aBorlandCCopyri+0Dh, 0Ch + retn +sub_112B3 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_112C3 proc near ; CODE XREF: seg014:2199j seg014:2217j ... + mov si, word ptr aBorlandCCopyri+0Dh + call sub_10101 + add word ptr aBorlandCCopyri+0Dh, 0Ch + retn +sub_112C3 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_112D0 proc near ; CODE XREF: seg014:2199j seg014:2217j ... + mov si, word ptr aBorlandCCopyri+0Dh + call sub_10E90 + add word ptr aBorlandCCopyri+0Dh, 0Ch + retn +sub_112D0 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_112DD proc near ; CODE XREF: seg014:2199j seg014:2217j ... + mov si, word ptr aBorlandCCopyri+0Dh + call sub_FC0B + add word ptr aBorlandCCopyri+0Dh, 0Ch + retn +sub_112DD endp + +; --------------------------------------------------------------------------- +off_112EA dw offset loc_11329 ; DATA XREF: seg014:2464r + dw offset loc_11383 + dw offset loc_1133C + dw offset loc_11337 + dw offset loc_1138A + dw offset loc_11383 + dw offset loc_1138A + dw offset loc_1138A + dw offset loc_1137E + dw offset loc_11383 + dw offset loc_1139B + dw offset loc_113A6 + dw offset loc_113A6 + dw offset loc_11383 + dw offset loc_113A6 + dw offset loc_113A6 +; --------------------------------------------------------------------------- + +loc_1130A: ; CODE XREF: seg014:220Fj + mov bh, 0 + ; Hack (mov bl, cs:[bx+2]) + db 02eh + db 08ah + db 09fh + db 002h + db 000h + mov si, word ptr aBorlandCCopyri+0Dh + add si, bx + mov bl, 18h + and bl, ch + and cl, 6 + or bl, cl + cld + mov cx, 6 + jmp cs:off_112EA[bx] + +loc_11329: ; DATA XREF: seg014:off_112EAo + sub word ptr aBorlandCCopyri+0Dh, 0Ch + mov di, word ptr aBorlandCCopyri+0Dh + rep movsw + jmp loc_11551 +; --------------------------------------------------------------------------- + +loc_11337: ; CODE XREF: seg014:2464j + ; DATA XREF: seg014:2430o + mov di, 0Ch + jmp short loc_1133F +; --------------------------------------------------------------------------- + +loc_1133C: ; CODE XREF: seg014:2464j + ; DATA XREF: seg014:242Eo + mov di, 0 + +loc_1133F: ; CODE XREF: seg014:247Aj + mov ax, word ptr aBorlandCCopyri+11h + sub ax, 0Ch + cmp si, ax + jz short loc_11359 + xchg di, si + mov ax, 4001h + mov cl, 0 + call sub_FCFD + add word ptr aBorlandCCopyri+0Dh, si + jmp short loc_113B2 +; --------------------------------------------------------------------------- + +loc_11359: ; CODE XREF: seg014:2487j + add di, 0Ch + mov dx, di + mov cx, si + sub cx, word ptr aBorlandCCopyri+0Dh + jz short loc_11378 + push ss + pop es + sub si, 2 + mov di, word ptr aBorlandCCopyri+11h + sub di, 2 + std + shr cx, 1 + rep movsw + cld + +loc_11378: ; CODE XREF: seg014:24A4j + add word ptr aBorlandCCopyri+0Dh, dx + jmp short loc_113B2 +; --------------------------------------------------------------------------- + +loc_1137E: ; CODE XREF: seg014:2464j + ; DATA XREF: seg014:243Ao + test ch, 7 + jz short loc_113B2 + +loc_11383: ; CODE XREF: seg014:2464j + ; DATA XREF: seg014:242Co ... + mov ch, 1 + call sub_115C9 + jmp short loc_113B2 +; --------------------------------------------------------------------------- + +loc_1138A: ; CODE XREF: seg014:2464j + ; DATA XREF: seg014:2432o ... + mov di, word ptr aBorlandCCopyri+0Dh + +loc_1138E: ; CODE XREF: seg014:24D6j + mov ax, [di] + xchg ax, [si] + stosw + add si, 2 + loop loc_1138E + jmp loc_11551 +; --------------------------------------------------------------------------- + +loc_1139B: ; CODE XREF: seg014:2464j + ; DATA XREF: seg014:243Eo + mov di, si + mov si, word ptr aBorlandCCopyri+0Dh + rep movsw + jmp loc_11551 +; --------------------------------------------------------------------------- + +loc_113A6: ; CODE XREF: seg014:2464j + ; DATA XREF: seg014:2440o ... + mov di, si + mov si, word ptr aBorlandCCopyri+0Dh + rep movsw + mov word ptr aBorlandCCopyri+0Dh, si + +loc_113B2: ; CODE XREF: seg014:2497j seg014:24BCj ... + jmp loc_11551 +; --------------------------------------------------------------------------- + db 8 dup(4), 7 dup(0), 2 dup(4), 8, 6, 8, 6, 4, 2, 0, 0Ah + db 8, 3 dup(4), 0Ah, 2 dup(4) +off_113D5 dw offset sub_11415 ; DATA XREF: sub_11427+2Fr + ; sub_11427+45r ... + dw offset sub_1141A + dw offset sub_11427 + dw offset sub_11427 + dw offset sub_F959 + dw offset sub_F995 + dw offset sub_11427 + dw offset sub_11427 + dw offset sub_FC81 + db 0D2h, 0Dh, 0E3h, 0Dh, 0F4h, 0Dh, 5, 0Eh, 16h, 0Eh, 27h + db 0Eh, 67h, 25h, 0AEh, 19h, 0A6h, 1Ah, 30h, 17h, 26h + db 18h, 5Fh, 25h, 67h, 25h, 67h, 25h, 67h, 25h, 0D1h, 8 + db 5Dh, 1Bh, 5, 8, 67h, 25h, 37h, 2 dup(13h), 10h, 67h + db 25h, 67h, 25h + +; =============== S U B R O U T I N E ======================================= + + +sub_11415 proc near ; CODE XREF: sub_11427+2Fp + ; sub_11427+45j ... + xor byte ptr [si+0Ah], 1 + retn +sub_11415 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_1141A proc near ; CODE XREF: sub_11427+2Fp + ; sub_11427+45j ... + mov byte ptr [si+0Ah], 0 + retn +sub_1141A endp + +; --------------------------------------------------------------------------- + push si + push di + call sub_FE9E + pop di + pop si + retn + +; =============== S U B R O U T I N E ======================================= + + +sub_11427 proc far ; CODE XREF: sub_11427+2Fp + ; sub_11427+45j ... + mov ch, 1 + call sub_115C9 + jmp loc_11551 +; --------------------------------------------------------------------------- + retn +; --------------------------------------------------------------------------- +off_11430 dw offset loc_1144F ; DATA XREF: sub_11427+23r + dw offset loc_11486 + dw offset loc_11462 + dw offset loc_11471 + dw offset loc_1148E + dw offset loc_114A1 +; --------------------------------------------------------------------------- + +loc_1143C: ; CODE XREF: seg014:2199j seg014:2217j + ; DATA XREF: ... + mov bx, 1Fh + and bl, ch + mov al, cs:[bx+24F5h] + cbw + xchg ax, di + shl bx, 1 + jmp cs:off_11430[di] + +loc_1144F: ; DATA XREF: sub_11427:off_11430o + mov di, word ptr aBorlandCCopyri+0Dh + sub di, 0Ch + call cs:off_113D5[bx] + mov word ptr aBorlandCCopyri+0Dh, di + jmp loc_11551 +; --------------------------------------------------------------------------- + +loc_11462: ; CODE XREF: sub_11427+23j + ; DATA XREF: sub_11427+Do + mov si, word ptr aBorlandCCopyri+0Dh + mov di, si + mov ax, 2691h + push ax + jmp cs:off_113D5[bx] +; --------------------------------------------------------------------------- + +loc_11471: ; CODE XREF: sub_11427+23j + ; DATA XREF: sub_11427+Fo + mov si, word ptr aBorlandCCopyri+0Dh + mov di, si + sub di, 0Ch + call cs:off_113D5[bx] + mov word ptr aBorlandCCopyri+0Dh, di + jmp loc_11551 +; --------------------------------------------------------------------------- + +loc_11486: ; CODE XREF: sub_11427+23j + ; DATA XREF: sub_11427+Bo + add word ptr aBorlandCCopyri+0Dh, 0Ch + jmp loc_11551 +; --------------------------------------------------------------------------- + +loc_1148E: ; CODE XREF: sub_11427+23j + ; DATA XREF: sub_11427+11o + mov di, word ptr aBorlandCCopyri+0Dh + lea si, [di+0Ch] + call cs:off_113D5[bx] + mov word ptr aBorlandCCopyri+0Dh, si + jmp loc_11551 +; --------------------------------------------------------------------------- + +loc_114A1: ; CODE XREF: sub_11427+23j + ; DATA XREF: sub_11427+13o + mov di, word ptr aBorlandCCopyri+0Dh + lea si, [di+0Ch] + mov ax, 2691h + push ax + jmp cs:off_113D5[bx] +; --------------------------------------------------------------------------- + +loc_114B1: ; CODE XREF: seg014:2199j seg014:2217j + ; DATA XREF: ... + and ch, 1Fh + cmp ch, 3 + jnz short loc_1150E + mov word ptr aDivideError+0Eh, 2 + mov word ptr aDivideError+0Ah, 6D65h + mov word ptr aDivideError+0Ch, 8775h + mov word ptr aBorlandCCopyri+4, 0 + mov di, word ptr aBorlandCCopyri+11h + mov word ptr aBorlandCCopyri+0Dh, di + mov bx, word ptr aBorlandCCopyri+0Fh + sub bx, di + neg bx + mov ax, 4001h + mov cl, 0 + call sub_FCFD + mov byte ptr [di+7], 0C0h ; '' + lea si, [di+0Ah] + sub di, 2 + mov cx, word ptr aBorlandCCopyri+0Fh + sub cx, di + neg cx + shr cx, 1 + std + rep movsw + mov word ptr aBorlandCCopyri, 4100h ; "Borland C++ - Copyright 1993 Borland In"... + mov word ptr aBorlandCCopyri+2, 33Fh + jmp short loc_1151F +; --------------------------------------------------------------------------- + +loc_1150E: ; CODE XREF: sub_11427+90j + cmp ch, 2 + jnz short loc_1151A + mov byte ptr aBorlandCCopyri, 0 ; "Borland C++ - Copyright 1993 Borland In"... + jmp short loc_1151F +; --------------------------------------------------------------------------- + +loc_1151A: ; CODE XREF: sub_11427+EAj + ; sub_11427:loc_11521j ... + mov ch, 1 + call sub_115C9 + +loc_1151F: ; CODE XREF: sub_11427+E5j + ; sub_11427+F1j + jmp short loc_11551 +; --------------------------------------------------------------------------- + +loc_11521: ; CODE XREF: seg014:2199j seg014:2217j + ; DATA XREF: ... + jmp short loc_1151A +; --------------------------------------------------------------------------- + +loc_11523: ; CODE XREF: seg014:2199j seg014:2217j + ; DATA XREF: ... + test ch, 1Fh + jnz short loc_1151A + mov ax, word ptr aBorlandCCopyri+0Dh + sub ax, word ptr aBorlandCCopyri+11h + mov cl, 0Ch + idiv cl + and al, 7 + mov cl, 3 + shl al, cl + mov cx, word ptr aBorlandCCopyri ; "Borland C++ - Copyright 1993 Borland In"... + and ch, 0C7h + or ch, al + mov [bp+10h], cx + jmp short loc_11551 +; --------------------------------------------------------------------------- + mov si, ss:24h + add ss:2Dh, si + +loc_11551: ; CODE XREF: seg014:2101j seg014:213Fj ... + mov ax, ss:2Fh + cmp ss:2Dh, ax + jb short loc_1156B + +loc_1155C: ; CODE XREF: sub_11427+152j + mov sp, ss:53h + pop es + pop di + pop si + pop bp + pop ds + pop bx + pop dx + pop cx + pop ax + iret +; --------------------------------------------------------------------------- + +loc_1156B: ; CODE XREF: sub_11427+133j + mov ch, 40h ; '@' + mov di, word ptr aBorlandCCopyri+11h + mov word ptr aBorlandCCopyri+0Dh, di + call sub_115C9 + int 3 ; Trap to Debugger + jmp short loc_1155C +sub_11427 endp ; sp-analysis failed + +; --------------------------------------------------------------------------- + in ax, dx + sbb si, cx + sbb si, bp + sbb bp, bp + sbb si, cx + sbb si, bp + sbb dx, si + sbb al, 37h ; '7' + sbb ax, 1D49h + pop bx + sbb ax, 1DA8h + lodsw + sbb ax, 1DB8h + +loc_11595: ; DATA XREF: seg000:1568o + sti + cld + push ax + push cx + push dx + push bx + push ds + push bp + push si + push di + push es + mov bp, sp + mov ss:53h, sp + lds si, [bp+12h] + lodsb + mov [bp+12h], si + mov di, ss + mov ds, di + cbw + xchg ax, bx + cmp bl, 0E6h ; '' + jb short loc_115C2 + mov ax, 2691h + push ax + jmp word ptr cs:[bx+26D5h] +; --------------------------------------------------------------------------- + +loc_115C2: ; CODE XREF: seg014:26F7j + mov ch, 1 + call sub_115C9 + jmp short loc_11551 + +; =============== S U B R O U T I N E ======================================= + + +sub_115C9 proc near ; CODE XREF: sub_EED2+77p + ; sub_EFB3:loc_F119p ... + push ax + push cx + push ds + push ss + pop ds + mov al, byte ptr aBorlandCCopyri ; "Borland C++ - Copyright 1993 Borland In"... + mov cl, byte ptr aBorlandCCopyri+2 + and cl, 7Fh + xor cl, 7Fh + or al, ch + mov ah, al + and ah, cl + xor ah, al + test ah, 8 + jz short loc_115EA + or al, 20h + +loc_115EA: ; CODE XREF: sub_115C9+1Dj + test al, cl + jz short loc_115FD + or al, 80h + mov byte ptr aBorlandCCopyri, al ; "Borland C++ - Copyright 1993 Borland In"... + and al, cl + cmp al, 20h ; ' ' + jnz short loc_11606 + pop ds + pop cx + pop ax + retn +; --------------------------------------------------------------------------- + +loc_115FD: ; CODE XREF: sub_115C9+23j + and al, 7Fh + mov byte ptr aBorlandCCopyri, al ; "Borland C++ - Copyright 1993 Borland In"... + pop ds + pop cx + pop ax + retn +; --------------------------------------------------------------------------- + +loc_11606: ; CODE XREF: seg014:loc_11002j + ; sub_115C9+2Ej + call sub_16B7 + cmp ax, 0FFFFh + jz short loc_1161E + mov ah, 35h + int 21h ; DOS - 2+ - GET INTERRUPT VECTOR + ; AL = interrupt number + ; Return: ES:BX = value of interrupt vector + mov ss:61h, bx + mov word ptr ss:63h, es + +loc_1161E: ; CODE XREF: sub_115C9+45j + mov sp, ss:53h + pop es + pop di + pop si + pop bp + pop ds + pop bx + pop dx + pop cx + pop ax + jmp dword ptr ss:61h +sub_115C9 endp + +; --------------------------------------------------------------------------- + dd 0 + dd 0 + dd 0 + dw 0 + db 0 +seg014 ends + +; =========================================================================== + +; Segment type: Pure code +seg015 segment byte public 'CODE' use16 + assume cs:seg015 + assume es:nothing, ss:nothing, ds:dseg, fs:nothing, gs:nothing + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; string::string(string const &) +@string@$bctr$qmx6string proc far ; CODE XREF: xmsg::xmsg(string &)+52P + ; xmsg::xmsg(xmsg &)+56P ... + +var_1E = word ptr -1Eh +arg_0 = dword ptr 6 +arg_4 = dword ptr 0Ah + + push bp + mov bp, sp + sub sp, 1Eh + push si + push di + mov ax, seg seg000 + mov bx, 988Bh + call ___InitExceptBlocks + mov ax, word ptr [bp+arg_0] + or ax, word ptr [bp+arg_0+2] + jnz short loc_1166F + mov ax, 4 + push ax + call @$bnew$qui ; operator new(uint) + pop cx + mov word ptr [bp+arg_0+2], dx + mov word ptr [bp+arg_0], ax + or ax, dx + jz short loc_11689 + +loc_1166F: ; CODE XREF: string::string(string &)+19j + les bx, [bp+arg_4] + mov dx, es:[bx+2] + mov ax, es:[bx] + les bx, [bp+arg_0] + mov es:[bx+2], dx + mov es:[bx], ax + les bx, es:[bx] + inc word ptr es:[bx] + +loc_11689: ; CODE XREF: string::string(string &)+2Dj + call @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + push [bp+var_1E] + call ___ExitExceptBlocks + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + pop di + pop si + mov sp, bp + pop bp + retf +@string@$bctr$qmx6string endp + +; --------------------------------------------------------------------------- +byte_116AF db 6, 0, 3, 0, 26h, 0, 2 dup(0FFh), 7, 0, 2Eh, 0, 3Ah + ; DATA XREF: seg000:9883o + db 0Dh dup(0), 2, 0, 2, 0, 91h, 98h + dw seg seg000 + db 5, 0, 3Eh, 0, 78h, 61h, 2 dup(6Ch), 6Fh, 63h, 2 dup(0) + db 0B1h, 0 + dw seg seg015 + db 2 dup(0), 3, 0Dh dup(0), 4, 0, 3, 0, 26h, 0, 2 dup(0FFh) + db 3, 0, 2Ch, 0, 30h, 0Dh dup(0), 1, 0, 1, 0, 1Eh, 5Eh + dw seg seg000 + db 5, 0, 34h, 0, 78h, 6Dh, 73h, 67h, 0Eh dup(0) + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl __far string__string(__int32, char *s) +@string@$bctr$qnxc proc far ; CODE XREF: string::contains(char *)+25P + ; string::assert_element(uint)+5Ap ... + +var_22 = word ptr -22h +var_16 = word ptr -16h +var_4 = dword ptr -4 +arg_0 = dword ptr 6 +src = dword ptr 0Ah + + push bp + mov bp, sp + sub sp, 22h + push si + push di + mov ax, seg seg000 + mov bx, 98FDh + call ___InitExceptBlocks + mov ax, word ptr [bp+arg_0] + or ax, word ptr [bp+arg_0+2] + jnz short loc_11758 + mov ax, 4 + push ax + call @$bnew$qui ; operator new(uint) + pop cx + mov word ptr [bp+arg_0+2], dx + mov word ptr [bp+arg_0], ax + or ax, dx + jz short loc_117CC + +loc_11758: ; CODE XREF: string::string(char *)+19j + mov ax, 0Ch + push ax + call @$bnew$qui ; operator new(uint) + pop cx + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + or ax, dx + jz short loc_117BC + mov [bp+var_16], 0Eh + xor ax, ax + push ax ; int + push ax ; int + push ax ; int + push ax ; int + mov ax, word ptr [bp+src] + or ax, word ptr [bp+src+2] + jz short loc_1178E + push word ptr [bp+src+2] + push word ptr [bp+src] ; s + call _strlen + pop cx + pop cx + jmp short loc_11790 +; --------------------------------------------------------------------------- + +loc_1178E: ; CODE XREF: string::string(char *)+54j + xor ax, ax + +loc_11790: ; CODE XREF: string::string(char *)+63j + push ax ; n + push word ptr [bp+src+2] + push word ptr [bp+src] ; src + push word ptr [bp+var_4+2] + push word ptr [bp+var_4] ; __int32 + nop + push cs + call near ptr @TStringRef@$bctr$qnxcuit1uiui ; TStringRef::TStringRef(char *,uint,char *,uint,uint) + add sp, 12h + call @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + mov [bp+var_16], 6 + +loc_117BC: ; CODE XREF: string::string(char *)+41j + mov dx, word ptr [bp+var_4+2] + mov ax, word ptr [bp+var_4] + les bx, [bp+arg_0] + mov es:[bx+2], dx + mov es:[bx], ax + +loc_117CC: ; CODE XREF: string::string(char *)+2Dj + call @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + push [bp+var_22] + call ___ExitExceptBlocks + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + pop di + pop si + mov sp, bp + pop bp + retf +@string@$bctr$qnxc endp + +; --------------------------------------------------------------------------- + db 4, 0, 90h, 20h, 0Ah, 0, 91h, 2 + dw seg seg015 +aTstringref db 'TStringRef *',0 +byte_11809 db 4, 0, 3, 0, 26h, 0, 2 dup(0FFh), 7, 0, 3Ah, 0, 46h + ; DATA XREF: seg000:98E7o + db 0Dh dup(0), 2, 0, 2, 0, 13h, 99h + dw seg seg000 + db 5, 0, 4Ah, 0 +aStringLengther db 'string::lengtherror',0 + dd byte_11899 + db 2 dup(0), 3, 0Dh dup(0) +byte_11857 db 6, 0, 3, 0, 26h, 0, 2 dup(0FFh), 7, 0, 2Eh, 0, 3Ah + ; DATA XREF: seg000:98E3o + db 0Dh dup(0), 2, 0, 2, 0, 60h, 99h + dw seg seg000 + db 5, 0, 3Eh, 0, 78h, 61h, 2 dup(6Ch), 6Fh, 63h, 2 dup(0) + db 59h, 2 + dw seg seg015 + db 2 dup(0), 3, 0Dh dup(0) +byte_11899 db 4, 0, 3, 0, 26h, 0, 2 dup(0FFh), 3, 0, 2Ch, 0, 30h + ; DATA XREF: seg015:0203o + db 0Dh dup(0), 1, 0, 1, 0, 1Eh, 5Eh + dw seg seg000 + db 5, 0, 34h, 0, 78h, 6Dh, 73h, 67h, 0Eh dup(0), 0Ch, 0 + db 3, 0, 26h, 0, 2 dup(0FFh), 7, 0, 32h, 0, 3Eh, 0Dh dup(0) + db 1, 0, 1, 0, 0A8h, 6 + dw seg seg015 + db 5, 0, 42h, 0, 54h, 53h, 74h, 72h, 69h, 6Eh, 67h, 52h + db 65h, 66h, 2 dup(0), 0D7h, 2 + dw seg seg015 + db 2 dup(0), 3, 0Dh dup(0), 2, 0, 3, 0, 1Ah, 0, 2 dup(0FFh) + db 1, 0, 26h, 0, 2Ah, 0Dh dup(0), 54h, 52h, 65h, 66h, 65h + db 72h, 65h, 6Eh, 63h, 65h, 0Ah dup(0) + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl __far string___string(void (*driver)(void), char) +@string@$bdtr$qv proc far ; CODE XREF: string::contains(char *)+45P + ; xmsg::~xmsg(void)+3FP ... + +var_1E = word ptr -1Eh +driver = dword ptr 6 +arg_4 = byte ptr 0Ah + + push bp + mov bp, sp + sub sp, 1Eh + push si + push di + mov ax, seg seg000 + mov bx, 99B6h + call ___InitExceptBlocks + call @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + mov ax, word ptr [bp+driver] + or ax, word ptr [bp+driver+2] + jz short loc_119BD + les bx, [bp+driver] + les bx, es:[bx] + dec word ptr es:[bx] + mov ax, es:[bx] + or ax, ax + jnz short loc_119AA + call @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + mov ax, 3 + push ax ; char + les bx, [bp+driver] + push word ptr es:[bx+2] + push word ptr es:[bx] ; driver + nop + push cs + call near ptr sub_11CE8 + add sp, 6 + +loc_119AA: ; CODE XREF: string::~string(void)+3Bj + test [bp+arg_4], 1 + jz short loc_119BD + push word ptr [bp+driver+2] + push word ptr [bp+driver] ; driver + call _registerbgidriver + pop cx + pop cx + +loc_119BD: ; CODE XREF: string::~string(void)+2Bj + ; string::~string(void)+69j + push [bp+var_1E] + call ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf +@string@$bdtr$qv endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; string::assert_element(unsigned int)const +@string@assert_element$xqui proc far + +var_28 = word ptr -28h +var_26 = word ptr -26h +var_1A = word ptr -1Ah +src = byte ptr -8 +driver = byte ptr -4 +arg_0 = dword ptr 6 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + sub sp, 28h + push si + push di + mov ax, seg seg000 + mov bx, 99EAh + call ___InitExceptBlocks + mov ax, [bp+arg_4] + mov [bp+var_28], ax + les bx, [bp+arg_0] + les bx, es:[bx] + mov ax, es:[bx+6] + cmp ax, [bp+var_28] + jbe short loc_119F8 + mov ax, 1 + jmp short loc_119FA +; --------------------------------------------------------------------------- + +loc_119F8: ; CODE XREF: string::assert_element(uint)+26j + xor ax, ax + +loc_119FA: ; CODE XREF: string::assert_element(uint)+2Bj + or ax, ax + jnz short loc_11A7B + xor ax, ax + push ax ; int + push ax ; int + push ax ; int + push ax ; int + mov ax, 5 + push ax ; int + mov ax, seg seg000 + push ax ; int + mov ax, 9ADCh + push ax ; int + xor ax, ax + push ax ; int + push ax ; int + mov [bp+var_1A], 6 + push ds + mov ax, 0FB2h + push ax ; s + push ss + lea ax, [bp+driver] + push ax ; __int32 + nop + push cs + call near ptr @string@$bctr$qnxc ; string::string(char *) + add sp, 8 + lea ax, [bp+driver] + push ss + push ax + push ss + lea ax, [bp+src] + push ax + call @xmsg@$bctr$qmx6string ; xmsg::xmsg(string &) + add sp, 8 + mov [bp+var_1A], 0Eh + mov ax, 2 + push ax ; char + push ss + lea ax, [bp+driver] + push ax ; driver + push cs + call near ptr @string@$bdtr$qv ; string::~string(void) + add sp, 6 + mov [bp+var_1A], 6 + call @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + lea ax, [bp+src] + push ss + push ax ; src + push cs ; int + mov ax, 0BFAh + push ax ; int + call @_ThrowException$qnvt1t1t1uiuiuinuc ; _ThrowException(void *,void *,void *,void *,uint,uint,uint,uchar *) + add sp, 1Ah + +loc_11A7B: ; CODE XREF: string::assert_element(uint)+31j + push [bp+var_26] + call ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf +@string@assert_element$xqui endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; string::assert_index(unsigned int)const +@string@assert_index$xqui proc far + +var_28 = word ptr -28h +var_26 = word ptr -26h +var_1A = word ptr -1Ah +src = byte ptr -8 +driver = byte ptr -4 +arg_0 = dword ptr 6 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + sub sp, 28h + push si + push di + mov ax, seg seg000 + mov bx, 9A2Eh + call ___InitExceptBlocks + mov ax, [bp+arg_4] + mov [bp+var_28], ax + les bx, [bp+arg_0] + les bx, es:[bx] + mov ax, es:[bx+6] + cmp ax, [bp+var_28] + jb short loc_11AB6 + mov ax, 1 + jmp short loc_11AB8 +; --------------------------------------------------------------------------- + +loc_11AB6: ; CODE XREF: string::assert_index(uint)+26j + xor ax, ax + +loc_11AB8: ; CODE XREF: string::assert_index(uint)+2Bj + or ax, ax + jnz short loc_11B39 + xor ax, ax + push ax ; int + push ax ; int + push ax ; int + push ax ; int + mov ax, 5 + push ax ; int + mov ax, seg seg000 + push ax ; int + mov ax, 9ADCh + push ax ; int + xor ax, ax + push ax ; int + push ax ; int + mov [bp+var_1A], 6 + push ds + mov ax, 0FD0h + push ax ; s + push ss + lea ax, [bp+driver] + push ax ; __int32 + nop + push cs + call near ptr @string@$bctr$qnxc ; string::string(char *) + add sp, 8 + lea ax, [bp+driver] + push ss + push ax + push ss + lea ax, [bp+src] + push ax + call @xmsg@$bctr$qmx6string ; xmsg::xmsg(string &) + add sp, 8 + mov [bp+var_1A], 0Eh + mov ax, 2 + push ax ; char + push ss + lea ax, [bp+driver] + push ax ; driver + push cs + call near ptr @string@$bdtr$qv ; string::~string(void) + add sp, 6 + mov [bp+var_1A], 6 + call @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + lea ax, [bp+src] + push ss + push ax ; src + push cs ; int + mov ax, 0BFAh + push ax ; int + call @_ThrowException$qnvt1t1t1uiuiuinuc ; _ThrowException(void *,void *,void *,void *,uint,uint,uint,uchar *) + add sp, 1Ah + +loc_11B39: ; CODE XREF: string::assert_index(uint)+31j + push [bp+var_26] + call ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf +@string@assert_index$xqui endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; TSubString::assert_element(unsigned int)const +@TSubString@assert_element$xqui proc far + +var_28 = word ptr -28h +var_26 = word ptr -26h +var_1A = word ptr -1Ah +src = byte ptr -8 +driver = byte ptr -4 +arg_0 = dword ptr 6 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + sub sp, 28h + push si + push di + mov ax, seg seg000 + mov bx, 9A72h + call ___InitExceptBlocks + mov ax, [bp+arg_4] + mov [bp+var_28], ax + les bx, [bp+arg_0] + mov ax, es:[bx+6] + cmp ax, [bp+var_28] + jbe short loc_11B71 + mov ax, 1 + jmp short loc_11B73 +; --------------------------------------------------------------------------- + +loc_11B71: ; CODE XREF: TSubString::assert_element(uint)+23j + xor ax, ax + +loc_11B73: ; CODE XREF: TSubString::assert_element(uint)+28j + or ax, ax + jnz short loc_11BF4 + xor ax, ax + push ax ; int + push ax ; int + push ax ; int + push ax ; int + mov ax, 5 + push ax ; int + mov ax, seg seg000 + push ax ; int + mov ax, 9ADCh + push ax ; int + xor ax, ax + push ax ; int + push ax ; int + mov [bp+var_1A], 6 + push ds + mov ax, 0FEEh + push ax ; s + push ss + lea ax, [bp+driver] + push ax ; __int32 + nop + push cs + call near ptr @string@$bctr$qnxc ; string::string(char *) + add sp, 8 + lea ax, [bp+driver] + push ss + push ax + push ss + lea ax, [bp+src] + push ax + call @xmsg@$bctr$qmx6string ; xmsg::xmsg(string &) + add sp, 8 + mov [bp+var_1A], 0Eh + mov ax, 2 + push ax ; char + push ss + lea ax, [bp+driver] + push ax ; driver + push cs + call near ptr @string@$bdtr$qv ; string::~string(void) + add sp, 6 + mov [bp+var_1A], 6 + call @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + lea ax, [bp+src] + push ss + push ax ; src + push cs ; int + mov ax, 0BFAh + push ax ; int + call @_ThrowException$qnvt1t1t1uiuiuinuc ; _ThrowException(void *,void *,void *,void *,uint,uint,uint,uchar *) + add sp, 1Ah + +loc_11BF4: ; CODE XREF: TSubString::assert_element(uint)+2Ej + push [bp+var_26] + call ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf +@TSubString@assert_element$xqui endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl __far TStringRef__TStringRef(__int32, void *src, size_t n, int, int, int, int) +@TStringRef@$bctr$qnxcuit1uiui proc far ; CODE XREF: string::string(char *)+76p + +arg_0 = dword ptr 6 +src = dword ptr 0Ah +n = word ptr 0Eh +arg_A = word ptr 10h +arg_C = word ptr 12h +arg_E = word ptr 14h +arg_10 = word ptr 16h + + push bp + mov bp, sp + push si + push di + mov ax, word ptr [bp+arg_0] + or ax, word ptr [bp+arg_0+2] + jnz short loc_11C26 + mov ax, 0Ch + push ax + call @$bnew$qui ; operator new(uint) + pop cx + mov word ptr [bp+arg_0+2], dx + mov word ptr [bp+arg_0], ax + or ax, dx + jnz short loc_11C26 + jmp loc_11CCC +; --------------------------------------------------------------------------- + +loc_11C26: ; CODE XREF: TStringRef::TStringRef(char *,uint,char *,uint,uint)+Bj + ; TStringRef::TStringRef(char *,uint,char *,uint,uint)+1Fj + les bx, [bp+arg_0] + mov word ptr es:[bx], 1 + mov word ptr es:[bx+0Ah], 0 + mov ax, [bp+n] + add ax, [bp+arg_E] + mov es:[bx+6], ax + mov ax, es:[bx+6] + add ax, [bp+arg_10] + push ax + nop + push cs + call near ptr sub_11E80 + pop cx + les bx, [bp+arg_0] + mov es:[bx+8], ax + mov ax, es:[bx+8] + inc ax + push ax + call sub_32C1 + pop cx + les bx, [bp+arg_0] + mov es:[bx+4], dx + mov es:[bx+2], ax + mov ax, es:[bx+2] + or ax, es:[bx+4] + jnz short loc_11C80 + push ds + mov ax, 0C20h + push ax + call @xalloc@raise$qv ; xalloc::raise(void) + pop cx + pop cx + +loc_11C80: ; CODE XREF: TStringRef::TStringRef(char *,uint,char *,uint,uint)+70j + push [bp+n] ; n + push word ptr [bp+src+2] + push word ptr [bp+src] ; src + les bx, [bp+arg_0] + push word ptr es:[bx+4] + push word ptr es:[bx+2] ; dest + call _memcpy + push [bp+arg_E] ; n + push [bp+arg_C] + push [bp+arg_A] ; src + les bx, [bp+arg_0] + mov ax, es:[bx+2] + add ax, [bp+n] + push word ptr es:[bx+4] + push ax ; dest + call _memcpy + add sp, 14h + les bx, [bp+arg_0] + les bx, es:[bx+2] + mov ax, [bp+n] + add ax, [bp+arg_E] + add bx, ax + mov byte ptr es:[bx], 0 + +loc_11CCC: ; CODE XREF: TStringRef::TStringRef(char *,uint,char *,uint,uint)+21j + call @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + pop di + pop si + pop bp + retf +@TStringRef@$bctr$qnxcuit1uiui endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl __far sub_11CE8(void (*driver)(void), char) +sub_11CE8 proc far ; CODE XREF: string::~string(void)+5Fp + +var_1E = word ptr -1Eh +driver = dword ptr 6 +arg_4 = byte ptr 0Ah + + push bp + mov bp, sp + +; TStringRef::~TStringRef(void) +@TStringRef@$bdtr$qv: + sub sp, 1Eh + push si + push di + mov ax, seg seg000 + mov bx, 9A8Ch + call ___InitExceptBlocks + call @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + mov ax, word ptr [bp+driver] + or ax, word ptr [bp+driver+2] + jz short loc_11D3A + les bx, [bp+driver] + push word ptr es:[bx+4] + push word ptr es:[bx+2] + call sub_318E + pop cx + pop cx + test [bp+arg_4], 1 + jz short loc_11D3A + push word ptr [bp+driver+2] + push word ptr [bp+driver] ; driver + call _registerbgidriver + pop cx + pop cx + +loc_11D3A: ; CODE XREF: sub_11CE8+2Bj + ; sub_11CE8+43j + push [bp+var_1E] + call ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf +sub_11CE8 endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + +; TStringRef::reserve(unsigned int) +@TStringRef@reserve$qui: + sub sp, 20h + push si + push di + mov ax, seg seg000 + mov bx, 9A9Eh + call ___InitExceptBlocks + les bx, [bp+6] + or word ptr es:[bx+0Ah], 1 + mov ax, [bp+0Ah] + inc ax + push ax + nop + push cs + call near ptr sub_11E80 + pop cx + mov [bp-20h], ax + les bx, [bp+6] + mov ax, es:[bx+8] + sub ax, [bp-20h] + cmp ax, word_13240 + jbe short loc_11DA8 + mov ax, [bp-20h] + inc ax + push ax + push word ptr es:[bx+4] + push word ptr es:[bx+2] + call sub_3428 + add sp, 6 + les bx, [bp+6] + mov es:[bx+4], dx + mov es:[bx+2], ax + mov ax, [bp-20h] + mov es:[bx+8], ax + +loc_11DA8: ; CODE XREF: seg015:073Fj + push word ptr [bp-1Eh] + call ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + +; TStringRef::check_freeboard(void) +@TStringRef@check_freeboard$qv: + sub sp, 20h + push si + push di + mov ax, seg seg000 + mov bx, 9AA8h + call ___InitExceptBlocks + les bx, [bp+6] + push word ptr es:[bx+6] + nop + push cs + call near ptr sub_11E80 + pop cx + mov [bp-20h], ax + les bx, [bp+6] + mov ax, es:[bx+8] + sub ax, [bp-20h] + cmp ax, word_13240 + jbe short loc_11E10 + mov ax, [bp-20h] + inc ax + push ax + push word ptr es:[bx+4] + push word ptr es:[bx+2] + call sub_3428 + add sp, 6 + les bx, [bp+6] + mov es:[bx+4], dx + mov es:[bx+2], ax + mov ax, [bp-20h] + mov es:[bx+8], ax + +loc_11E10: ; CODE XREF: seg015:07A7j + push word ptr [bp-1Eh] + call ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_11E1E proc far ; CODE XREF: seg015:08BFp + +var_1E = word ptr -1Eh +arg_0 = dword ptr 6 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + +; TStringRef::grow_to(unsigned int) +@TStringRef@grow_to$qui: + sub sp, 1Eh + push si + push di + mov ax, seg seg000 + mov bx, 9ABAh + call ___InitExceptBlocks + les bx, [bp+arg_0] + mov ax, [bp+arg_4] + mov es:[bx+8], ax + mov ax, es:[bx+8] + inc ax + push ax + push word ptr es:[bx+4] + push word ptr es:[bx+2] + call sub_3428 + add sp, 6 + les bx, [bp+arg_0] + mov es:[bx+4], dx + mov es:[bx+2], ax + mov ax, es:[bx+2] + or ax, es:[bx+4] + jnz short loc_11E72 + push ds + mov ax, 0C20h + push ax + call @xalloc@raise$qv ; xalloc::raise(void) + pop cx + pop cx + +loc_11E72: ; CODE XREF: sub_11E1E+46j + push [bp+var_1E] + call ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf +sub_11E1E endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_11E80 proc far ; CODE XREF: TStringRef::TStringRef(char *,uint,char *,uint,uint)+46p + ; seg015:072Ap ... + +var_20 = word ptr -20h +var_1E = word ptr -1Eh +arg_0 = word ptr 6 + + push bp + mov bp, sp + +; TStringRef::round_capacity(unsigned int) +@TStringRef@round_capacity$qui: + sub sp, 20h + push si + push di + mov ax, seg seg000 + mov bx, 9AC4h + call ___InitExceptBlocks + mov ax, word_1323C + mov [bp+var_20], ax + mov cx, word_1323E + mov ax, [bp+arg_0] + sub ax, [bp+var_20] + add ax, cx + dec ax + xor dx, dx + div cx + imul cx + add ax, [bp+var_20] + push ax + push [bp+var_1E] + call ___ExitExceptBlocks + pop ax + pop di + pop si + mov sp, bp + pop bp + retf +sub_11E80 endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + +; TStringRef::splice(unsigned int, unsigned int, char const *, unsigned int) +@TStringRef@splice$quiuinxcui: + sub sp, 26h + push si + push di + mov ax, seg seg000 + mov bx, 9AD6h + call ___InitExceptBlocks + les bx, [bp+6] + mov ax, es:[bx+6] + add ax, [bp+12h] + sub ax, [bp+0Ch] + mov [bp-24h], ax + push ax + push cs + call near ptr sub_11E80 + pop cx + mov [bp-26h], ax + les bx, [bp+6] + mov ax, es:[bx+8] + cmp ax, [bp-26h] + jnb short loc_11F07 + push word ptr [bp-26h] + push word ptr [bp+8] + push bx + push cs + call near ptr sub_11E1E + add sp, 6 + jmp short loc_11F76 +; --------------------------------------------------------------------------- + +loc_11F07: ; CODE XREF: seg015:08B5j + les bx, [bp+6] + mov ax, es:[bx+8] + sub ax, [bp-26h] + cmp ax, word_13240 + jbe short loc_11F76 + test byte ptr es:[bx+0Ah], 1 + jnz short loc_11F76 + mov ax, [bp-26h] + inc ax + push ax + call sub_32C1 + pop cx + mov [bp-20h], dx + mov [bp-22h], ax + les bx, [bp+6] + mov ax, es:[bx+2] + or ax, es:[bx+4] + jnz short loc_11F48 + push ds + mov ax, 0C20h + push ax + call @xalloc@raise$qv ; xalloc::raise(void) + pop cx + pop cx + +loc_11F48: ; CODE XREF: seg015:08FAj + cmp word ptr [bp+0Ah], 0 + jz short loc_11F6A + push word ptr [bp+0Ah] + les bx, [bp+6] + push word ptr es:[bx+4] + push word ptr es:[bx+2] + push word ptr [bp-20h] + push word ptr [bp-22h] + call _memcpy + add sp, 0Ah + +loc_11F6A: ; CODE XREF: seg015:090Cj + les bx, [bp+6] + mov ax, [bp-26h] + mov es:[bx+8], ax + jmp short loc_11F87 +; --------------------------------------------------------------------------- + +loc_11F76: ; CODE XREF: seg015:08C5j seg015:08D5j ... + les bx, [bp+6] + mov dx, es:[bx+4] + mov ax, es:[bx+2] + mov [bp-20h], dx + mov [bp-22h], ax + +loc_11F87: ; CODE XREF: seg015:0934j + les bx, [bp+6] + mov dx, es:[bx+4] + mov ax, es:[bx+2] + cmp dx, [bp-20h] + jnz short loc_11FA4 + cmp ax, [bp-22h] + jnz short loc_11FA4 + mov ax, [bp+12h] + cmp ax, [bp+0Ch] + jz short loc_11FD6 + +loc_11FA4: ; CODE XREF: seg015:0955j seg015:095Aj + les bx, [bp+6] + mov ax, es:[bx+6] + sub ax, [bp+0Ah] + sub ax, [bp+0Ch] + push ax + mov ax, es:[bx+2] + add ax, [bp+0Ah] + add ax, [bp+0Ch] + push word ptr es:[bx+4] + push ax + mov ax, [bp-22h] + add ax, [bp+0Ah] + add ax, [bp+12h] + push word ptr [bp-20h] + push ax + call _memmove + add sp, 0Ah + +loc_11FD6: ; CODE XREF: seg015:0962j + cmp word ptr [bp+12h], 0 + jz short loc_1201A + mov ax, [bp+0Eh] + or ax, [bp+10h] + jz short loc_12001 + push word ptr [bp+12h] + push word ptr [bp+10h] + push word ptr [bp+0Eh] + mov ax, [bp-22h] + add ax, [bp+0Ah] + push word ptr [bp-20h] + push ax + call _memmove + add sp, 0Ah + jmp short loc_1201A +; --------------------------------------------------------------------------- + +loc_12001: ; CODE XREF: seg015:09A2j + push word ptr [bp+12h] + mov ax, 20h ; ' ' + push ax + mov ax, [bp-22h] + add ax, [bp+0Ah] + push word ptr [bp-20h] + push ax + call far ptr _memset + add sp, 8 + +loc_1201A: ; CODE XREF: seg015:099Aj seg015:09BFj + les bx, [bp+6] + mov ax, [bp-24h] + mov es:[bx+6], ax + push es + les ax, [bp-22h] + mov dx, es + pop es + add ax, es:[bx+6] + mov bx, ax + mov es, dx + mov byte ptr es:[bx], 0 + les bx, [bp+6] + mov dx, es:[bx+4] + mov ax, es:[bx+2] + cmp dx, [bp-20h] + jnz short loc_1204C + cmp ax, [bp-22h] + jz short loc_1206F + +loc_1204C: ; CODE XREF: seg015:0A05j + les bx, [bp+6] + push word ptr es:[bx+4] + push word ptr es:[bx+2] + call sub_318E + pop cx + pop cx + les bx, [bp+6] + mov dx, [bp-20h] + mov ax, [bp-22h] + mov es:[bx+4], dx + mov es:[bx+2], ax + +loc_1206F: ; CODE XREF: seg015:0A0Aj + push word ptr [bp-1Eh] + call ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + +; string::set_case_sensitive(int) +@string@set_case_sensitive$qi: + sub sp, 2 + push si + push di + mov ax, word_13236 + mov [bp-2], ax + mov ax, [bp+6] + mov word_13236, ax + mov ax, [bp-2] + pop di + pop si + mov sp, bp + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + +; string::set_paranoid_check(int) +@string@set_paranoid_check$qi: + sub sp, 2 + push si + push di + mov ax, word_13238 + mov [bp-2], ax + mov ax, [bp+6] + mov word_13238, ax + mov ax, [bp-2] + pop di + pop si + mov sp, bp + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + +; string::skip_whitespace(int) +@string@skip_whitespace$qi: + sub sp, 2 + push si + push di + mov ax, word_1323A + mov [bp-2], ax + mov ax, [bp+6] + mov word_1323A, ax + mov ax, [bp-2] + pop di + pop si + mov sp, bp + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + +; string::initial_capacity(unsigned int) +@string@initial_capacity$qui: + sub sp, 2 + push si + push di + mov ax, word_1323C + mov [bp-2], ax + mov ax, [bp+6] + mov word_1323C, ax + mov ax, [bp-2] + pop di + pop si + mov sp, bp + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + +; string::resize_increment(unsigned int) +@string@resize_increment$qui: + sub sp, 2 + push si + push di + mov ax, word_1323E + mov [bp-2], ax + mov ax, [bp+6] + mov word_1323E, ax + cmp word_1323E, 0 + jnz short loc_12112 + mov word_1323E, 1 + +loc_12112: ; CODE XREF: seg015:0ACAj + mov ax, [bp-2] + pop di + pop si + mov sp, bp + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + +; string::max_waste(unsigned int) +@string@max_waste$qui: + sub sp, 2 + push si + push di + mov ax, word_13240 + mov [bp-2], ax + mov ax, [bp+6] + mov word_13240, ax + mov ax, [bp-2] + pop di + pop si + mov sp, bp + pop bp + retf +; --------------------------------------------------------------------------- +byte_12138 db 4, 0, 3, 0, 26h, 0, 2 dup(0FFh), 7, 0, 3Ah, 0, 46h + ; DATA XREF: seg000:9AB2o seg000:9ACEo + db 0Dh dup(0), 2, 0, 2, 0, 11h, 9Bh + dw seg seg000 + db 5, 0, 4Ah, 0 +aStringLength_0 db 'string::lengtherror',0 + dd byte_121C8 + dw 0 + db 3, 0Dh dup(0), 6, 0, 3, 0, 26h, 0, 2 dup(0FFh), 7, 0 + db 2Eh, 0, 3Ah, 0Dh dup(0), 2, 0, 2, 0, 5Eh, 9Bh + dw seg seg000 + db 5, 0, 3Eh, 0, 78h, 61h, 2 dup(6Ch), 6Fh, 63h, 2 dup(0) + db 88h, 0Bh + dw seg seg015 + db 2 dup(0), 3, 0Dh dup(0) +byte_121C8 db 4, 0, 3, 0, 26h, 0, 2 dup(0FFh), 3, 0, 2Ch, 0, 30h + ; DATA XREF: seg015:0B32o seg015:0C34o + db 0Dh dup(0), 1, 0, 1, 0, 1Eh, 5Eh + dw seg seg000 + db 5, 0, 34h, 0, 78h, 6Dh, 73h, 67h, 0Eh dup(0) +byte_12200 db 4, 0, 3, 0, 26h, 0, 2 dup(0FFh), 3, 0, 2Eh, 0, 32h + ; DATA XREF: seg000:9A08o + db 0Dh dup(0), 1, 0, 1, 0, 5, 3 + dw seg seg015 + db 5, 0, 36h, 0, 73h, 74h, 72h, 69h, 6Eh, 67h, 0Eh dup(0) +byte_1223A db 4, 0, 3, 0, 26h, 0, 2 dup(0FFh), 7, 0, 3Ah, 0, 46h + ; DATA XREF: seg000:9A96o + db 0Dh dup(0), 2, 0, 2, 0, 0ABh, 9Bh + dw seg seg000 + db 5, 0, 4Ah, 0 +aStringOutofran db 'string::outofrange',0 + db 0 + dd byte_121C8 + db 2 dup(0), 3, 15h dup(0) +seg015 ends + +; =========================================================================== + +; Segment type: Pure data +dseg segment para public 'DATA' use16 + assume cs:dseg +word_12290 dw 0 ; DATA XREF: sub_30BD+20r + ; sub_30BD:loc_3118r ... +word_12292 dw 0 ; DATA XREF: sub_305A+9r sub_305A+Dr ... +aNullCheck db 'NULL CHECK',0 ; DATA XREF: sub_312E+Cr sub_3157+18w ... + dd 0 + dd 0 + dd 0 + dd 0 + db 0 +aBorlandCCopyri db 'Borland C++ - Copyright 1993 Borland Intl.',0 ; DATA XREF: sub_E940-34r + ; sub_111D4+6w ... +aDivideError db 'Divide error',0Dh,0Ah,0 ; DATA XREF: sub_EA68+2Br + ; sub_EA68+3Br ... +dword_122EA dd 0 ; DATA XREF: sub_178+6w + ; __restorezero+4r ... +dword_122EE dd 0 ; DATA XREF: sub_178+13w + ; __restorezero+Fr ... +dword_122F2 dd 0 ; DATA XREF: sub_178+20w + ; __restorezero+1Ar ... +dword_122F6 dd 0 ; DATA XREF: sub_178+2Dw + ; __restorezero+25r ... +; int argc +argc dw 0 ; DATA XREF: start+137r seg000:97F3w +; char **argv +argv dw 0 ; DATA XREF: start+133r seg000:97FFw +word_122FE dw 0 ; DATA XREF: start+12Fr seg000:97F9w +; char **envp +envp dw 0 ; DATA XREF: start+12Br seg000:987Aw +word_12302 dw 0 ; DATA XREF: start+127r seg000:9874w +word_12304 dw 0 ; DATA XREF: start+46w seg000:96DCr +word_12306 dw 0 ; DATA XREF: start+1Dw start+28r ... +word_12308 dw 0 ; DATA XREF: start+55w seg000:982Fr +; unsigned int segx +segx dw 0 ; DATA XREF: start+19w start+8Fr ... +word_1230C dw 0 ; DATA XREF: start+16w start+C7r ... +word_1230E dw 0 ; DATA XREF: __IOERROR:loc_216Aw + ; seg000:394Fw ... + db 0FFh + db 0FFh + db 2Ah ; * + db 1Dh +word_12314 dw 0 ; DATA XREF: __brk+9r __sbrk+45r +word_12316 dw 0 ; DATA XREF: start+87w __brk+5r ... +word_12318 dw 0 ; DATA XREF: sub_34A9+6Ew __sbrk+12r ... +word_1231A dw 0 ; DATA XREF: start+8Bw sub_34A9+6Aw ... +word_1231C dw 0 ; DATA XREF: sub_34A9+7Ew __brk+1Cr ... +word_1231E dw 0 ; DATA XREF: start+21w start+F5w ... +word_12320 dw 101h ; DATA XREF: sub_A240+6Bw + ; sub_A240:loc_A2CEw ... +word_12322 dw 201h ; DATA XREF: sub_A240+77w sub_A240+98w ... +byte_12324 db 0 ; DATA XREF: sub_A7B5+33r + ; sub_A7B5:loc_A7FCr ... +byte_12325 db 0 ; DATA XREF: sub_A363+4Cr sub_A363+51w ... +byte_12326 db 0 ; DATA XREF: sub_A4AB:loc_A524w + ; sub_A4AB:loc_A52Bw ... +byte_12327 db 0 ; DATA XREF: sub_A363+DEw + ; sub_A363:loc_A448w ... +byte_12328 db 0 ; DATA XREF: sub_A363+10Cw + ; sub_A363:loc_A476w ... +byte_12329 db 0 ; DATA XREF: sub_A363+13Aw + ; sub_A363:loc_A4A4w ... +byte_1232A db 0 ; DATA XREF: sub_AB97:loc_AC5Cw + ; sub_AC84:loc_AE34w ... +byte_1232B db 0 ; DATA XREF: sub_A4AB:loc_A591w + ; sub_A4AB:loc_A598w ... +byte_1232C db 0 ; DATA XREF: sub_AB97:loc_AC69w + ; sub_AB97+DEw ... +byte_1232D db 0 ; DATA XREF: _main:loc_B015w _main+A6w +byte_1232E db 0 ; DATA XREF: _main+28w _main+D8w +byte_1232F db 0 ; DATA XREF: sub_A79D+3r _main+22Cw +dword_12330 dd 0 ; DATA XREF: _main+1Fw _main+BDw ... +word_12334 dw 0 ; DATA XREF: sub_A363:loc_A3A8r + ; sub_A363:loc_A3C1w ... +word_12336 dw 0 ; DATA XREF: sub_A363:loc_A3F7r + ; sub_A363:loc_A411w ... +byte_12338 db 3 ; DATA XREF: sub_A4AB+59r sub_A4AB+BDr ... +word_12339 dw 0 ; DATA XREF: sub_A4AB:loc_A4F0r + ; sub_A4AB:loc_A50Aw ... +word_1233B dw 0 ; DATA XREF: sub_A4AB:loc_A558r + ; sub_A4AB:loc_A577w ... +unk_1233D db 0 ; DATA XREF: sub_A66A+16o + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 0 +word_123C0 dw 0 ; DATA XREF: seg000:03EDw seg000:050Er ... +word_123C2 dw 0 ; DATA XREF: seg000:03F1w + ; seg000:loc_519r ... +word_123C4 dw 0 ; DATA XREF: seg000:053Fw seg000:057Dr ... +word_123C6 dw 0 ; DATA XREF: seg000:0589w +byte_123C8 db 0 ; DATA XREF: seg000:02FCw seg000:0350w ... +word_123C9 dw 0 ; DATA XREF: seg000:03F5w + ; seg000:loc_490r ... +byte_123CB db 0 ; DATA XREF: seg000:03FFw sub_904+26w ... +word_123CC dw 0 ; DATA XREF: seg000:0562w +word_123CE dw 0 ; DATA XREF: seg000:loc_538w + ; sub_930+2r ... +word_123D0 dw 0 ; DATA XREF: seg000:047Ew sub_8D8+3r ... +word_123D2 dw 0 ; DATA XREF: seg000:055Dw sub_930+233r +word_123D4 dw 0 ; DATA XREF: seg000:0568w + ; sub_930:loc_949r +word_123D6 dw 0 ; DATA XREF: seg000:0410w sub_8D8+Br + db 0 + db 0 +word_123DA dw 0 ; DATA XREF: seg000:058Cw sub_930+225w +word_123DC dw 0 ; DATA XREF: seg000:0581w sub_930+1A8r + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 0 + db 0 +off_124CD dd aVrvsvVqvs ; DATA XREF: sub_A96A+Eo + ; " rs`qs " + dd aVbvnvmvsvhvmvt ; "bnmshmtd" + dd aB@vnvovsvhvnvm ; "@noshnm@" + dd aB@b@vpvtvhvsb@ ; "@@pths@@" +off_124DD dd aB@vqvVmvjb@ ; DATA XREF: sub_A9B9+Fo + ; "@q`mj@ " + dd aVlvtvrvhvb ; " ltrhb " + dd aVovkvVxvdvq ; "ok`xdq " + dd aVlbdvsvdvrvs ; "lDsdrs " + dd aB@vpvtvhvsb@ ; "@pths@ " +off_124F1 dd aEasy ; DATA XREF: sub_A9B9+20o + ; " EASY " + dd aNormal ; "NORMAL" + dd aHard ; " HARD " + dd aLunatic ; "LUNATIC" +off_12501 dd aOff ; DATA XREF: sub_A9B9+31o + ; " OFF " + dd aFm ; " FM " +off_12509 dd a3 ; DATA XREF: sub_A9B9+42o + ; " 3 " + dd a4 ; " 4 " + dd a5 ; " 5 " + dd a6 ; " 6 " + dd a7 ; " 7 " +byte_1251D db 0 ; DATA XREF: sub_AAB6+63r sub_AAB6+8Dr ... +off_1251E dd aVlvtvrvhvbb@vm ; DATA XREF: sub_AAB6+Fo + ; "ltrhb@mD" + dd aB@b@vpvxvivf ; "@@p " +off_12526 dd aASacretLot ; DATA XREF: sub_AAB6+20o + ; " A Sacret Lot" + dd aXcvR_o ; " ̐_ " + dd aIiiuvIPc ; " i̛ޏ " + dd aHighlyResponsi ; " Highly Responsive" + dd unk_12763 + dd aOrientalMagici ; " Oriental Magician" + dd aB@FjoVPmsUbb@ ; "@ jׂ̏@ " + dd aTheLegendOfKag ; " The Legend of KAGE" + dd aPositiveAndNeg ; "Positive and Negative" + dd aB@b@UvoguRrb@b ; "@@ Vg`@@ " + dd aB@b@b@CvlB@b@b ; "@@@ @@@ " + dd aVvvUVRVnvVOuvV ; "|̎܂" + dd aB@b@oavVVrvivV ; "@@Ȃ΂Ƃ@@" + dd aB@b@Rpchmxom ; "@@ Hm" + dd aB@b@b@gagcgkgx ; "@@@ACX" +word_12562 dw 63h ; DATA XREF: sub_AB97+6Aw sub_AB97+71r ... +word_12564 dw 0 ; DATA XREF: sub_AB97+3r sub_AB97+60w ... +word_12566 dw 0 ; DATA XREF: sub_AC84+3r sub_AC84+15w ... +word_12568 dw 0 ; DATA XREF: sub_AC84+Fw sub_AC84+79r ... +word_1256A dw 0 ; DATA XREF: sub_AC84+AAr + ; sub_AC84+10Aw ... +word_1256C dw 0 ; DATA XREF: sub_AC84+121r + ; sub_AC84+184w ... +off_1256E dd aReimu_mdt ; DATA XREF: sub_AE6D+Ao + ; "reimu.mdt" + dd aZipangu_mdt ; "ZIPANGU.mdt" + dd aSt0_mdt ; "st0.mdt" + dd aSt1_mdt ; "st1.mdt" + dd aSt2_mdt ; "st2.mdt" + dd aSt3_mdt ; "st3.mdt" + dd aSt4_mdt ; "st4.mdt" + dd aSt5_mdt ; "st5.mdt" + dd aPositive_mdt ; "positive.mdt" + dd aLegend_mdt ; "legend.mdt" + dd aKami_mdt ; "kami.mdt" + dd aTensi_mdt ; "tensi.mdt" + dd aSyugen_mdt ; "syugen.mdt" + dd aAlice_mdt ; "alice.mdt" + dd aIris_mdt ; "iris.mdt" +word_125AA dw 0 ; DATA XREF: sub_AEA8+3r sub_AEA8+15w ... +word_125AC dw 0 ; DATA XREF: sub_AEA8+Fw sub_AEA8+5Cr ... +word_125AE dw 0 ; DATA XREF: sub_AEA8+8Dr sub_AEA8+B9w ... +word_125B0 dw 0 ; DATA XREF: sub_AEA8+D0r sub_AEA8+FCw ... +; char path[] +path db 'reiiden.cfg',0 ; DATA XREF: sub_A240+Do sub_A2E4+Do +; char mode[3] +mode db 'rb',0 ; DATA XREF: sub_A240+9o +; char s[] +s db 'REIIDEN',0 ; DATA XREF: sub_A240+46o sub_A2E4+31o ... +; char aWb[] +aWb db 'wb',0 ; DATA XREF: sub_A2E4+9o +; char aReimu_mdt[] +aReimu_mdt db 'reimu.mdt',0 ; DATA XREF: sub_A719+4o _main+1B8o ... +aReiiden2_grp db 'REIIDEN2.grp',0 ; DATA XREF: sub_A719+1Do +aReiiden3_grp db 'REIIDEN3.grp',0 ; DATA XREF: sub_A719+33o +aOp_win_grp db 'op_win.grp',0 ; DATA XREF: sub_A772+19o +; char aReiiden_0[] +aReiiden_0 db 'reiiden',0 ; DATA XREF: sub_A7B5+E6o sub_A7B5+EAo +aVgvhvsb@vjvdvx db ' ghs@jdx',0 ; DATA XREF: sub_A92C+12o +aVrvsvVqvs db ' rs`qs ',0 ; DATA XREF: dseg:off_124CDo +aVbvnvmvsvhvmvt db 'bnmshmtd',0 ; DATA XREF: dseg:0241o +aB@vnvovsvhvnvm db '@noshnm@',0 ; DATA XREF: dseg:0245o +aB@b@vpvtvhvsb@ db '@@pths@@',0 ; DATA XREF: dseg:0249o +aB@vqvVmvjb@ db '@q`mj@ ',0 ; DATA XREF: dseg:off_124DDo +aVlvtvrvhvb db ' ltrhb ',0 ; DATA XREF: dseg:0251o +aVovkvVxvdvq db 'ok`xdq ',0 ; DATA XREF: dseg:0255o +aVlbdvsvdvrvs db 'lDsdrs ',0 ; DATA XREF: dseg:0259o +aB@vpvtvhvsb@ db '@pths@ ',0 ; DATA XREF: dseg:025Do +aEasy db ' EASY ',0 ; DATA XREF: dseg:off_124F1o +aNormal db 'NORMAL',0 ; DATA XREF: dseg:0265o +aHard db ' HARD ',0 ; DATA XREF: dseg:0269o +aLunatic db 'LUNATIC',0 ; DATA XREF: dseg:026Do +aOff db ' OFF ',0 ; DATA XREF: dseg:off_12501o +aFm db ' FM ',0 ; DATA XREF: dseg:0275o +a3 db ' 3 ',0 ; DATA XREF: dseg:off_12509o +a4 db ' 4 ',0 ; DATA XREF: dseg:027Do +a5 db ' 5 ',0 ; DATA XREF: dseg:0281o +a6 db ' 6 ',0 ; DATA XREF: dseg:0285o +a7 db ' 7 ',0 ; DATA XREF: dseg:0289o +; char aSS[] +aSS db '%s%s',0 ; DATA XREF: sub_A9B9+B2o sub_A9B9+E3o ... +aVlvtvrvhvbb@vm db 'ltrhb@mD',0 ; DATA XREF: dseg:off_1251Eo +aB@b@vpvxvivf db '@@p ',0 ; DATA XREF: dseg:0292o +aASacretLot db ' A Sacret Lot',0 ; DATA XREF: dseg:off_12526o +aXcvR_o db ' ̐_ ',0 ; DATA XREF: dseg:029Ao +aIiiuvIPc db ' i̛ޏ ',0 ; DATA XREF: dseg:029Eo +aHighlyResponsi db ' Highly Responsive',0 ; DATA XREF: dseg:02A2o +unk_12763 db 20h ; DATA XREF: dseg:02A6o + db 20h + db 20h + db 20h + db 20h + db 93h ; + db 8Ch ; + db 95h ; + db 0FBh ; + db 89h ; + db 0F6h ; + db 8Ah ; + db 0EFh ; + db 92h ; + db 6Bh ; k + db 20h + db 20h + db 20h + db 20h + db 0 +aOrientalMagici db ' Oriental Magician',0 ; DATA XREF: dseg:02AAo +aB@FjoVPmsUbb@ db '@ jׂ̏@ ',0 ; DATA XREF: dseg:02AEo +aTheLegendOfKag db ' The Legend of KAGE',0 ; DATA XREF: dseg:02B2o +aPositiveAndNeg db 'Positive and Negative',0 ; DATA XREF: dseg:02B6o +aB@b@UvoguRrb@b db '@@ Vg`@@ ',0 ; DATA XREF: dseg:02BAo +aB@b@b@CvlB@b@b db '@@@ @@@ ',0 ; DATA XREF: dseg:02BEo +aVvvUVRVnvVOuvV db '|̎܂',0 ; DATA XREF: dseg:02C2o +aB@b@oavVVrvivV db '@@Ȃ΂Ƃ@@',0 ; DATA XREF: dseg:02C6o +aB@b@Rpchmxom db '@@ Hm',0 ; DATA XREF: dseg:02CAo +aB@b@b@gagcgkgx db '@@@ACX',0 ; DATA XREF: dseg:02CEo +; char aS_2d[] +aS_2d db '%s%.2d',0 ; DATA XREF: sub_AAB6+77o +aZipangu_mdt db 'ZIPANGU.mdt',0 ; DATA XREF: dseg:02E2o +aSt0_mdt db 'st0.mdt',0 ; DATA XREF: dseg:02E6o +aSt1_mdt db 'st1.mdt',0 ; DATA XREF: dseg:02EAo +aSt2_mdt db 'st2.mdt',0 ; DATA XREF: dseg:02EEo +aSt3_mdt db 'st3.mdt',0 ; DATA XREF: dseg:02F2o +aSt4_mdt db 'st4.mdt',0 ; DATA XREF: dseg:02F6o +aSt5_mdt db 'st5.mdt',0 ; DATA XREF: dseg:02FAo +aPositive_mdt db 'positive.mdt',0 ; DATA XREF: dseg:02FEo +aLegend_mdt db 'legend.mdt',0 ; DATA XREF: dseg:0302o +aKami_mdt db 'kami.mdt',0 ; DATA XREF: dseg:0306o +aTensi_mdt db 'tensi.mdt',0 ; DATA XREF: dseg:030Ao +aSyugen_mdt db 'syugen.mdt',0 ; DATA XREF: dseg:030Eo +aAlice_mdt db 'alice.mdt',0 ; DATA XREF: dseg:0312o +aIris_mdt db 'iris.mdt',0 ; DATA XREF: dseg:0316o +aGogbgGtg@gcglv db 'ob`t@CNĂ',0 ; DATA XREF: _main+14o +aCon db 'CON',0 ; DATA XREF: _main+77o +; char format[] +format db '‚ꂳ܂łII',0Ah,0 ; DATA XREF: _main+25Fo +byte_12902 db 0 ; DATA XREF: sub_B2C3+3r sub_B2C3+Aw ... +word_12903 dw 0 ; DATA XREF: isr+27r seg003:00DCw ... + db 7 + dd 0 + db 0 + db 0 + db 0 +word_1290D dw 140h ; DATA XREF: isr+13r +word_1290F dw 0C8h ; DATA XREF: isr+19r + dd 0 + db 7Fh ;  + db 2 + db 8Fh ; + db 1 + db 0 + db 0C0h ; + db 0 + db 0E0h ; + db 0 + db 0F0h ; + db 0 + db 0F8h ; + db 0 + db 0FCh ; + db 0 + db 0FEh ; + db 0 + db 0FFh + db 80h ; + db 0FFh + db 0C0h ; + db 0FFh + db 0E0h ; + db 0FFh + db 0 + db 0FEh ; + db 0 + db 0EFh ; + db 0 + db 0CFh ; + db 80h ; + db 7 + db 80h ; + db 7 + db 0 + db 3 + db 0 + db 0 + db 0 + db 40h ; @ + db 0 + db 60h ; ` + db 0 + db 70h ; p + db 0 + db 78h ; x + db 0 + db 7Ch ; | + db 0 + db 7Eh ; ~ + db 0 + db 7Fh ;  + db 80h ; + db 7Fh ;  + db 0 + db 7Ch ; | + db 0 + db 6Ch ; l + db 0 + db 46h ; F + db 0 + db 6 + db 0 + db 3 + db 0 + db 3 + db 0 + db 0 + db 0 +a3l db 1Bh,'[>3l',0 ; DATA XREF: sub_B3D1+4o +a3h db 1Bh,'[>3h',0 ; DATA XREF: seg004:0076o +a1l db 1Bh,'[>1l',0 ; DATA XREF: sub_B3F3+4o +a1h db 1Bh,'[>1h',0 ; DATA XREF: sub_B404+4o +a2j db 1Bh,'[2J',0 ; DATA XREF: sub_B415+4o + db 0 +byte_12978 db 0 ; DATA XREF: sub_B6E9+3r sub_B6E9+Aw ... + db 0 +unk_1297A db 0 ; DATA XREF: seg006:0026o sub_BD3A+9o ... + dd 0 + db 0Fh + db 0 + db 0Fh + db 0 + db 0 + db 0Fh + db 0Fh + db 0Fh + db 0 + db 0 + db 0Fh + db 0 + db 0Fh + db 0Fh + db 0Fh + db 0 + db 0Fh + db 0Fh + db 0Fh + db 8 + db 8 + db 8 + db 0 + db 0 + db 0Ah + db 0 + db 0Ah + db 0 + db 0 + db 0Ah + db 0Ah + db 0Ah + db 0 + db 0 + db 0Ah + db 0 + db 0Ah + db 0Ah + db 0Ah + db 0 + db 0Ch + db 0Ch + db 0Ch +byte_129AA db 0 ; DATA XREF: sub_C028+9Dr + ; sub_C028:loc_C0D4r ... +word_129AB dw 80h ; DATA XREF: sub_C13B+78r sub_C13B+89r ... +aPal98Grb db 'pal98 grb',0 ; DATA XREF: sub_D0E5+Co + db 0 +word_129B8 dw 1 ; DATA XREF: sub_D631+82r seg009:019Aw ... +word_129BA dw 1 ; DATA XREF: sub_DAEC:loc_DB17r + ; seg009:0563w ... + dd 0 + dd 0 + db 0 + db 0 + db 0 +byte_129C7 db 0 ; DATA XREF: sub_DAEC:loc_DB0Dr + ; sub_DBAF+4w ... +byte_129C8 db 0 ; DATA XREF: seg009:05BEw seg009:05C8w ... +byte_129C9 db 0 ; DATA XREF: seg009:05D8w seg009:05E4w ... +aHgrx db 'HGRX',0 ; DATA XREF: seg009:07F6o seg009:0962o ... +aHgrz db 'HGRZ',0 ; DATA XREF: seg009:0AB9o +aMasterl_libVer db 'MASTERL.LIB Version 0.23 Copyright (c)1995 A.Koizuka,Kazumi,steel' + db 'man,iR,All rights reserved.',0 + db 0 +word_12A32 dw 0A800h ; DATA XREF: sub_C6A+9w sub_CB8+18r +word_12A34 dw 3E80h ; DATA XREF: sub_C6A+Fw sub_CB8+14r +word_12A36 dw 190h ; DATA XREF: sub_C6A+3Cw + db 50h ; P + db 0 +word_12A3A dw 0 ; DATA XREF: sub_C6A+2Dw + db 55h ; U + db 0 +word_12A3E dw 64h ; DATA XREF: sub_CE2+4w seg000:0D0Ar ... + dd 0 + db 0 + db 0FFh + db 0FFh + db 0 + db 0 + db 0FFh + db 0 + db 0FFh + db 0 + db 0FFh + db 0 + db 0 + db 0FFh + db 0FFh + db 0FFh + db 0FFh + db 0 + db 0FFh + db 0FFh + db 0FFh + db 77h ; w + db 77h ; w + db 77h ; w + db 0 + db 0 + db 0AAh ; + db 0AAh ; + db 0 + db 0 + db 0AAh ; + db 0 + db 0AAh ; + db 0 + db 0AAh ; + db 0 + db 0 + db 0AAh ; + db 0AAh ; + db 0AAh ; + db 0AAh ; + db 0 + db 0AAh ; + db 0AAh ; + db 0AAh ; +word_12A70 dw 0 ; DATA XREF: seg000:0D33r +word_12A72 dw 0 ; DATA XREF: sub_E46+36w sub_E82+45w ... + db 0 + db 0 + db 70h ; p + db 61h ; a + db 6Ch ; l + db 39h ; 9 + db 38h ; 8 + db 20h + db 67h ; g + db 72h ; r + db 62h ; b + db 0 + db 70h ; p + db 61h ; a + db 6Ch ; l + db 39h ; 9 + db 38h ; 8 + db 20h + db 67h ; g + db 72h ; r + db 62h ; b + db 0 +word_12A8A dw 0 ; DATA XREF: sub_FD8+5r sub_FD8+26r +word_12A8C dw 0FFFFh ; DATA XREF: sub_FD8+2Ar sub_FD8+88r ... + db 3 + db 0 + db 12h + db 0 + db 16h + db 0 + db 7 + db 0 + db 5 + db 0 + db 13h + db 0 + db 4 + db 0 + db 18h + db 0 + db 19h + db 0 + db 0 + db 1 + db 0 + db 0 + db 1Ah + db 0 + db 17h + db 0 + db 0 + db 0 + db 14h + db 0 + db 12h + db 0 + db 1 + db 0 + db 6 + db 0 + db 3 + dd 0 + db 1 + db 0 + db 0 + db 3 + db 2 + db 12h + db 2 + db 16h + db 2 + db 7 + db 2 + db 5 + db 2 + db 13h + db 2 + db 4 + db 2 + db 18h + db 2 + db 0 + db 1 + db 0 + db 1 + db 0 + db 0 + db 3 + db 3 + db 12h + db 3 + db 16h + db 3 + db 7 + db 3 + db 5 + db 3 + db 13h + db 3 + db 4 + db 3 + db 18h + db 3 + db 0 + db 1 + db 0 + db 1 + db 0 + db 0 +word_12AE6 dw 0 ; DATA XREF: sub_1196+8r sub_1196+10w ... +word_12AE8 dw 0 ; DATA XREF: seg000:1228w seg000:128Cw +byte_12AEA db 0 ; DATA XREF: sub_12BC+4r + db 0 +word_12AEC dw 0 ; DATA XREF: sub_C6A+17w +word_12AEE dw 27Fh ; DATA XREF: sub_C6A+36w +word_12AF0 dw 27Fh ; DATA XREF: sub_C6A+33w +word_12AF2 dw 0 ; DATA XREF: sub_C6A+1Aw +word_12AF4 dw 18Fh ; DATA XREF: sub_C6A+43w +word_12AF6 dw 18Fh ; DATA XREF: sub_C6A+40w +word_12AF8 dw 0A800h ; DATA XREF: sub_C6A+Cw +word_12AFA dw 7CB0h ; DATA XREF: sub_C6A+46w +dword_12AFC dd 1 ; DATA XREF: sub_1338+Cr sub_1338+15r ... +aReiidenconfig db 'ReiidenConfig',0 ; DATA XREF: sub_E27C+5o sub_E27C+18o ... +byte_12B0E db 0 ; DATA XREF: sub_E450+5r sub_E4F9+3r ... + db 0 +aMdrv2system db 'Mdrv2System',0 ; DATA XREF: sub_E3E5+Bo +aXx db '',0 ; DATA XREF: sub_E783+Bo + db 0 +word_12B20 dw 1330h ; DATA XREF: seg000:1624r + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dw 0 +word_12B40 dw 0FFFFh ; DATA XREF: seg000:1543r seg000:158Ar ... + db 81h ; + db 0 + dd aDomain ; "Domain" + db 82h ; + db 0 + dd aDenormal ; "Denormal" + db 83h ; + db 0 + dd aDivideBy0 ; "Divide by 0" + db 84h ; + db 0 + dd aOverflow ; "Overflow" + db 85h ; + db 0 + dd aUnderflow ; "Underflow" + db 86h ; + db 0 + dd aPartialLossOfP ; "Partial loss of precision" + db 87h ; + db 0 + dd aStackFault ; "Stack fault" +aDomain db 'Domain',0 ; DATA XREF: dseg:08B4o +aDenormal db 'Denormal',0 ; DATA XREF: dseg:08BAo +aDivideBy0 db 'Divide by 0',0 ; DATA XREF: dseg:08C0o +aOverflow db 'Overflow',0 ; DATA XREF: dseg:08C6o +aUnderflow db 'Underflow',0 ; DATA XREF: dseg:08CCo +aPartialLossOfP db 'Partial loss of precision',0 ; DATA XREF: dseg:08D2o +aStackFault db 'Stack fault',0 ; DATA XREF: dseg:08D8o +aFloatingPointE db 'Floating point error: %s.',0Ah,0 +flt_12BDC dd 1.0 ; DATA XREF: sub_1B47+BFr + db 0 + db 0 + db 20h + db 41h ; A + db 0 + db 0 + db 0C8h ; + db 42h ; B + db 0 + db 0 + db 7Ah ; z + db 44h ; D + db 0 + db 40h ; @ + db 1Ch + db 46h ; F + db 0 + db 50h ; P + db 0C3h ; + db 47h ; G + db 0 + db 24h ; $ + db 74h ; t + db 49h ; I + db 80h ; + db 96h ; + db 18h + db 4Bh ; K +flt_12BFC dd 1.0e8 ; DATA XREF: sub_1B47+47r +dbl_12C00 dq 1.0e16 ; DATA XREF: sub_1B47+54r + ; Hack. Let's better use bytes for accuracy here. +tbyte_12C08 db 09eh, 0b5h, 070h, 02bh, 0a8h, 0adh, 0c5h, 09dh, 069h, 040h +tbyte_12C12 db 0d5h, 0a6h, 0cfh, 0ffh, 049h, 01fh, 078h, 0c2h, 0d3h, 040h +tbyte_12C1C db 0e0h, 08ch, 0e9h, 080h, 0c9h, 047h, 0bah, 093h, 0a8h, 041h +tbyte_12C26 db 08eh, 0deh, 0f9h, 09dh, 0fbh, 0ebh, 07eh, 0aah, 051h, 043h +tbyte_12C30 db 0c7h, 091h, 00eh, 0a6h, 0aeh, 0a0h, 019h, 0e3h, 0a3h, 046h +tbyte_12C3A db 017h, 00ch, 075h, 081h, 086h, 075h, 076h, 0c9h, 048h, 04dh +tbyte_12C44 db 0e5h, 05dh, 03dh, 0c5h, 05dh, 03bh, 08bh, 09eh, 092h, 05ah +tbyte_12C4E db 09bh, 097h, 020h, 08ah, 002h, 052h, 060h, 0c4h, 025h, 075h +flt_12C58 dd 3.4028237e38 ; DATA XREF: sub_1B47+17r +aAbnormalProgra db 'Abnormal program termination',0Dh,0Ah,0 + db 0 +word_12C7C dw 0 ; DATA XREF: _atexit+5r + ; _atexit:loc_1CC4r ... +off_12C7E dd sub_1F1C ; DATA XREF: sub_1F21+29r sub_554E+BBw ... +off_12C82 dd sub_1F1C ; DATA XREF: sub_1F21+43r sub_3F4C+B4w ... +off_12C86 dd sub_1F1C ; DATA XREF: sub_1F21+47r _open+157w ... + dw 0 +word_12C8C dw 209h ; DATA XREF: seg000:2719w seg000:2723r +byte_12C8E db 0 ; DATA XREF: seg000:270Ar + dd 0 + dd 0 + dd 0 + db 0 + db 0FAh ; + db 9 + db 0 + db 0 +word_12CA0 dw 20Ah ; DATA XREF: seg000:2752w seg000:275Cr +byte_12CA2 db 1 ; DATA XREF: seg000:2743r + dd 0 + dd 0 + dd 0 + db 0 + db 0Eh + db 0Ah + db 0 + db 0 + db 2 + db 2 +byte_12CB6 db 2 ; DATA XREF: ___ErrorMessage+19r + dd 0 + dd 0 + dd 0 + db 0 + db 22h ; " + db 0Ah + db 0 + db 0 + db 43h ; C + db 2 + db 3 + dd 0 + dd 0 + dd 0 + db 0 + db 36h ; 6 + db 0Ah + db 0 + db 0 + db 42h ; B + db 2 + db 4 + dd 0 + dd 0 + dd 0 + db 0 + db 4Ah ; J + db 0Ah + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 +word_12E1A dw 14h ; DATA XREF: start+C0r start+E3r ... + db 1 + db 60h ; ` + db 2 + db 60h ; ` + db 2 + db 60h ; ` + db 4 + db 0A0h ; + db 2 + db 0A0h ; + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 0 +word_12E44 dw 4000h ; DATA XREF: sub_3F4C:loc_3FE7r + ; _open+Er +word_12E46 dw 0FFFFh ; DATA XREF: _open:loc_4D42r + db 0CCh ; + db 0 +word_12E4A dw 0 ; DATA XREF: __IOERROR:loc_214Dw + ; __IOERROR+2Bw ... + db 0 + db 13h + db 2 + db 2 + db 4 + db 5 + db 6 + db 8 + db 8 + db 8 + db 14h + db 15h + db 5 + db 13h + db 0Eh + db 5 + db 5 + db 11h + db 2 + db 1Eh + db 29h ; ) + db 2Ch ; , + db 28h ; ( + db 28h ; ( + db 28h ; ( + db 28h ; ( + db 28h ; ( + db 29h ; ) + db 2Ch ; , + db 28h ; ( + db 28h ; ( + db 28h ; ( + db 5 + db 5 + db 29h ; ) + db 17h + db 17h + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Fh + db 2Ch ; , + db 23h ; # + db 2 + db 2Ch ; , + db 0Fh + db 2Ah ; * + db 28h ; ( + db 28h ; ( + db 28h ; ( + db 13h + db 1Bh + db 1Ch + db 2 + db 2 + db 5 + db 0Fh + db 2 + db 17h + db 28h ; ( + db 2Ah ; * + db 13h + db 2Ah ; * + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 23h ; # + db 0Eh + db 1Ch + db 28h ; ( + db 17h + db 23h ; # + db 25h ; % + db 13h + db 28h ; ( + db 0 + db 54h ; T + db 4Dh ; M + db 50h ; P + db 0 + db 2Eh ; . + db 24h ; $ + db 24h ; $ + db 24h ; $ + dd 0 + db 0 + db 0 +word_12EB4 dw 0 ; DATA XREF: seg000:2386r +word_12EB6 dw 234Bh ; DATA XREF: set_new_handler(void (*)(void))+Cr + ; set_new_handler(void (*)(void))+1Fw ... +seg_12EB8 dw seg seg000 ; DATA XREF: set_new_handler(void (*)(void))+8r + ; set_new_handler(void (*)(void))+1Bw ... +aOutOfMemory db 'Out of memory',0 +word_12EC8 dw 1000h ; DATA XREF: start+62r start+70w ... + public __ctype +; unsigned __int8 _ctype[257] +__ctype db 0, 20h, 20h, 20h, 20h, 20h, 20h, 20h ; DATA XREF: _toupper+18r + db 20h, 20h, 21h, 21h, 21h, 21h, 21h, 20h + db 20h, 20h, 20h, 20h, 20h, 20h, 20h, 20h + db 20h, 20h, 20h, 20h, 20h, 20h, 20h, 20h + db 20h, 81h, 40h, 40h, 40h, 40h, 40h, 40h + db 40h, 40h, 40h, 40h, 40h, 40h, 40h, 40h + db 40h, 12h, 12h, 12h, 12h, 12h, 12h, 12h + db 12h, 12h, 12h, 40h, 40h, 40h, 40h, 40h + db 40h, 40h, 14h, 14h, 14h, 14h, 14h, 14h + db 4, 4, 4, 4, 4, 4, 4, 4 + db 4, 4, 4, 4, 4, 4, 4, 4 + db 4, 4, 4, 4, 40h, 40h, 40h, 40h + db 40h, 40h, 18h, 18h, 18h, 18h, 18h, 18h + db 8, 8, 8, 8, 8, 8, 8, 8 + db 8, 8, 8, 8, 8, 8, 8, 8 + db 8, 8, 8, 8, 40h, 40h, 40h, 40h + db 20h, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0 + db 0 +off_12FCC dd unk_12FFC ; DATA XREF: sub_16DE+8r + dd unk_12FFE + dd unk_12FFF + dd unk_13000 + dd unk_13001 + dd unk_13002 + dd unk_13003 + dd unk_13004 + dd unk_13005 + dd unk_13006 + db 7Fh ;  + db 7Fh ;  + db 7Fh ;  + db 7Fh ;  + db 7Fh ;  + db 7Fh ;  + db 7Fh ;  + db 7Fh ;  +unk_12FFC db 2Eh ; . ; DATA XREF: dseg:off_12FCCo + db 0 +unk_12FFE db 0 ; DATA XREF: dseg:0D40o +unk_12FFF db 0 ; DATA XREF: dseg:0D44o +unk_13000 db 0 ; DATA XREF: dseg:0D48o +unk_13001 db 0 ; DATA XREF: dseg:0D4Co +unk_13002 db 0 ; DATA XREF: dseg:0D50o +unk_13003 db 0 ; DATA XREF: dseg:0D54o +unk_13004 db 0 ; DATA XREF: dseg:0D58o +unk_13005 db 0 ; DATA XREF: dseg:0D5Co +unk_13006 db 0 ; DATA XREF: dseg:0D60o + db 0 + db 28h ; ( + db 6Eh ; n + db 75h ; u + db 6Ch ; l + db 6Ch ; l + db 29h ; ) + db 0 + db 0 + db 14h + db 14h + db 1 + db 14h + db 15h + db 14h + db 14h + db 14h + db 14h + db 2 + db 0 + db 14h + db 3 + db 4 + db 14h + db 9 + db 5 + db 5 + db 5 + db 5 + db 5 + db 5 + db 5 + db 5 + db 5 + db 14h + db 14h + db 14h + db 14h + db 14h + db 14h + db 14h + db 14h + db 14h + db 14h + db 14h + db 0Fh + db 17h + db 0Fh + db 8 + db 14h + db 14h + db 14h + db 7 + db 14h + db 16h + db 14h + db 14h + db 14h + db 14h + db 14h + db 14h + db 14h + db 14h + db 14h + db 0Dh + db 14h + db 14h + db 14h + db 14h + db 14h + db 14h + db 14h + db 14h + db 14h + db 14h + db 10h + db 0Ah + db 0Fh + db 0Fh + db 0Fh + db 8 + db 0Ah + db 14h + db 14h + db 6 + db 14h + db 12h + db 0Bh + db 0Eh + db 14h + db 14h + db 11h + db 14h + db 0Ch + db 14h + db 14h + db 0Dh + db 14h + db 14h + db 14h + db 14h + db 14h + db 14h + db 14h + dd 0 + dd 0 + db 0 + db 0 + db 0 + dd @terminate$qv ; terminate(void) + dd @unexpected$qv ; unexpected(void) +word_13082 dw 0 ; DATA XREF: __ExceptInit+28w +word_13084 dw 0 ; DATA XREF: __ExceptInit+25w + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 0 +word_13198 dw 0 ; DATA XREF: seg000:3003w seg000:3016w ... +word_1319A dw 0 ; DATA XREF: sub_34A9+22r sub_34A9+61w +byte_1319C db 0 ; DATA XREF: seg000:398Cr seg000:39A4w +byte_1319D db 0 ; DATA XREF: seg000:3927r seg000:393Aw +word_1319E dw 0 ; DATA XREF: seg000:3894r seg000:38CAw +word_131A0 dw 0 ; DATA XREF: seg000:3890r + ; seg000:loc_38C4w + dd 0 +word_131A6 dw 0 ; DATA XREF: seg000:37AEr seg000:37E4w ... +word_131A8 dw 0 ; DATA XREF: seg000:37AAr + ; seg000:loc_37DEw ... + dd 0 + dd 0 + dd 0 + db 2 + db 4 + db 8 + db 0Bh + db 0Fh + db 16h + db 0 + db 15h + db 8Ch ; + db 0Bh + db 0 + db 0 +dword_131C2 dd 0 ; DATA XREF: seg000:3B08w sub_3B1C+Ar ... + dd 0 + dd 0 + dd 0 + db 0Dh + db 0 + db 0 + db 0 + db 5Ch ; \ + db 0 +word_131D8 dw 0 ; DATA XREF: sub_554E:loc_5586r + ; sub_554E+46w +word_131DA dw 0 ; DATA XREF: sub_554E:loc_5570r + ; sub_554E+30w +word_131DC dw 30h ; DATA XREF: __IOERROR+25r +aNotype db '',0 +aBccxh1 db '**BCCxh1',0 +aPrintScanfFloa db 'print scanf : floating point formats not linked',0Dh,0Ah,0 +word_13222 dw 0 ; DATA XREF: seg000:97A5w seg000:97F0r +word_13224 dw 0 ; DATA XREF: seg000:97B8w seg000:97FCr +word_13226 dw 0 ; DATA XREF: seg000:97BCw seg000:97F6r +word_13228 dw 0 ; DATA XREF: seg000:unknown_libname_4w + ; seg000:9802r +word_1322A dw 0 ; DATA XREF: seg000:96B5w seg000:97ECr +word_1322C dw 0 ; DATA XREF: seg000:96B9w seg000:97E8r +word_1322E dw 0 ; DATA XREF: seg000:96C2w seg000:97E0r +word_13230 dw 0 ; DATA XREF: seg000:96C6w seg000:97E4r +dword_13232 dd 0 ; DATA XREF: _getenv+21r seg000:983Cw ... +word_13236 dw 1 ; DATA XREF: seg015:0A45r seg015:0A4Ew +word_13238 dw 0 ; DATA XREF: seg015:0A62r seg015:0A6Bw +word_1323A dw 1 ; DATA XREF: seg015:0A7Fr seg015:0A88w +word_1323C dw 3Fh ; DATA XREF: sub_11E80+13r + ; seg015:0A9Cr ... +word_1323E dw 40h ; DATA XREF: sub_11E80+19r + ; seg015:0AB9r ... +word_13240 dw 3Fh ; DATA XREF: seg015:073Br seg015:07A3r ... +aStringReferenc db 'String reference out of range',0 +aStringRefere_0 db 'String reference out of range',0 +aStringRefere_1 db 'String reference out of range',0 +word_1329C dw 952h ; DATA XREF: seg000:9C65w sub_9C7C+1Br +word_1329E dw 0 ; DATA XREF: seg000:9C5Fw sub_9C7C+17r +word_132A0 dw 0 ; DATA XREF: sub_9BF8+8r + ; sub_9BF8:loc_9C0Fr ... + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + dd 0 + db 0 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 0 + db 8 + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 8 + db 0Ah + db 0Ah + db 0Ah + db 0Ah + db 0Ah + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + dd 0 + db 50h ; P + db 41h ; A + db 54h ; T + db 48h ; H + db 0 + db 2Fh ; / + db 5Ch ; \ + db 0 + db 0 + db 2Eh ; . + db 42h ; B + db 41h ; A + db 54h ; T + db 0 + db 2Eh ; . + db 43h ; C + db 4Fh ; O + db 4Dh ; M + db 0 + db 2Eh ; . + db 45h ; E + db 58h ; X + db 45h ; E + db 0 + db 2Eh ; . + db 42h ; B + db 41h ; A + db 54h ; T + db 0 + db 43h ; C + db 4Fh ; O + db 4Dh ; M + db 53h ; S + db 50h ; P + db 45h ; E + db 43h ; C + db 0 + db 2Fh ; / + db 63h ; c + db 0 +off_133CC dw offset sub_16DE ; DATA XREF: sub_96ABr +aNstststs db '',0 + db 10h + db 0E4h ; + db 13h + db 0 + db 0 + db 1 + db 20h + dd @string@contains$xqnxc ; string::contains(char *) + db 0 + db 2 + db 0DBh ; + db 26h ; & + db 0 + db 0 + db 0 + db 10h + db 0F2h ; + db 2Fh ; / + db 0 + db 0 + db 0 + db 0Fh + db 0D3h ; + db 3Ah ; : + db 0 + db 0 + db 0 + db 10h + db 0B1h ; + db 96h ; + db 0 + db 0 + db 0 + db 10h + db 26h ; & + db 98h ; + db 0 + db 0 + db 1 + db 10h + dd loc_9C44 + db 0 + db 0Fh + dd loc_9DF3 + db 0 + db 10h + db 4Bh ; K + db 16h + db 0 + db 0 + db 1 + db 20h + dd loc_24F9 +dword_13418 dd ? ; DATA XREF: sub_A7B5+8r sub_A8AD+7r ... + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? +word_1355C dw ? ; DATA XREF: sub_B269:loc_B26Cr + ; sub_B269+Bw ... +word_1355E dw ? ; DATA XREF: isr+23w +; void (__interrupt far *off_13560)() +off_13560 dw ? ; DATA XREF: sub_B2C3+1Cw sub_B305+1Er +word_13562 dw ? ; DATA XREF: sub_B2C3+18w sub_B305+1Ar +dword_13564 dd ? ; DATA XREF: isr+2Er seg003:00ECw ... + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + db ? ; + db ? ; + db ? ; +word_13627 dw ? ; DATA XREF: seg000:15B2w + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? +word_13665 dw ? ; DATA XREF: seg000:15A8w +word_13667 dw ? ; DATA XREF: seg000:15AEw sub_B6E9+1Bw ... + db ? +word_1366A dw ? ; DATA XREF: sub_B6E9+17w +word_1366C dw ? ; DATA XREF: sub_C028+4Bw sub_C13B+38w ... +word_1366E dw ? ; DATA XREF: sub_C028+4Ew sub_C13B+3Bw ... + db ? ; +byte_13671 db ? ; DATA XREF: sub_B943+6w sub_BB85+25r ... +dword_13672 dd ? ; DATA XREF: seg001:loc_A206r + ; sub_A629:loc_A64Ar ... +dword_13676 dd ? ; DATA XREF: sub_C247+291r + ; sub_C247+2D2r ... +dword_1367A dd ? ; DATA XREF: sub_C247+29Fr + ; sub_C247+2E0r ... +dword_1367E dd ? ; DATA XREF: sub_C247+2ADr + ; sub_C247+2EEr ... + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? +unk_136D2 db ? ; ; DATA XREF: sub_D9E3+20o sub_D9E3+2Bo ... + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + db ? ; + db ? ; + db ? ; +; void (*font)(void) +font dd ? ; DATA XREF: sub_DAEC+14w sub_DAEC+3Fr ... + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? +dword_13BAA dd ? ; DATA XREF: sub_FD8+2Er sub_FD8+69r ... +word_13BAE dw ? ; DATA XREF: sub_FD8+1Bw sub_FD8+94w ... +word_13BB0 dw ? ; DATA XREF: sub_FD8+1Fw sub_FD8+98w ... +word_13BB2 dw ? ; DATA XREF: sub_FD8+15r sub_FD8+42w ... +word_13BB4 dw ? ; DATA XREF: sub_FD8:loc_FEAr + ; sub_FD8+3Dw ... +word_13BB6 dw ? ; DATA XREF: sub_FD8:loc_107Bw + ; sub_1108+2Ew ... +word_13BB8 dw ? ; DATA XREF: sub_108C:loc_10BDw + ; sub_1108+31w + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + db ? ; + db ? ; +byte_13ECC db ? ; DATA XREF: sub_1196:loc_11B7w + ; sub_1196+4Fw +word_13ECD dw ? ; DATA XREF: sub_1196+26w + ; sub_1196:loc_11EDw +word_13ECF dw ? ; DATA XREF: sub_1196+2Cw +word_13ED1 dw ? ; DATA XREF: sub_1196+32w +word_13ED3 dw ? ; DATA XREF: sub_1196:loc_11D1w + dd ? + dd ? + dd ? + dd ? + db ? ; +dword_13EE6 dd ? ; DATA XREF: sub_A7B5+3Cr sub_A7B5+50r ... +dword_13EEA dd ? ; DATA XREF: seg012:0017w + ; seg012:loc_E5B4r ... +dword_13EEE dd ? ; DATA XREF: sub_E783+4Aw sub_E783+57r ... +word_13EF2 dw ? ; DATA XREF: sub_E62E+18r sub_E783+16w ... +word_13EF4 dw ? ; DATA XREF: seg012:loc_E612w + ; sub_E783:loc_E7B3r +byte_13EF6 db ? ; DATA XREF: sub_E783+7Cw + ; sub_E783:loc_E806w ... +byte_13EF7 db ? ; DATA XREF: sub_E67B+Cr sub_E697+26r +; void (*off_13EF8)(void) +off_13EF8 dd ? ; DATA XREF: sub_E6DA:loc_E6FAr + ; sub_E6DA+46r ... +; void (*off_13EFC)(void) +off_13EFC dd ? ; DATA XREF: sub_E697+Br + ; sub_E697:loc_E6AFr ... +unk_13F00 db ? ; ; DATA XREF: sub_E783+4Fo + dd ? + dd ? + dd ? +word_13F0D dw ? ; DATA XREF: sub_E783:loc_E80Bw + ; sub_E889:loc_E899r ... +word_13F0F dw ? ; DATA XREF: sub_E697+4r sub_E697+1Cr ... + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + dd ? + db ? ; + db ? ; + db ? ; +dword_13FA0 dd ? ; DATA XREF: sub_1AA0+Cr sub_1AA0+1Dr ... + dd ? +word_13FA8 dw ? ; DATA XREF: seg000:38D4r seg000:39A1w ... +word_13FAA dw ? ; DATA XREF: seg000:38D0r seg000:399Dw ... +byte_13FAC db ? ; DATA XREF: _fgetc:loc_4A83r + ; _fgetc+F0r + db ? +byte_13FAE db ? ; DATA XREF: _fputc+8w + ; _fputc:loc_4F78r ... + db ? +dword_13FB0 dd ? ; DATA XREF: sub_7AE5+ACw sub_7AE5+C2r ... +dword_13FB4 dd ? ; DATA XREF: __ExceptionHandler+2BEw + ; __ExceptionHandler+2D1r ... + dd ? + dd ? +dseg ends + +; =========================================================================== + +; Segment type: Uninitialized +seg017 segment byte stack 'STACK' use16 + assume cs:seg017 + assume es:nothing, ss:nothing, ds:dseg, fs:nothing, gs:nothing + db 80h dup(?) +seg017 ends + + + end start