// delphi executes this when it finds there is a new console
TextOpen:
0000000000403DA0 55 push rbp
0000000000403DA1 56 push rsi
0000000000403DA2 53 push rbx
0000000000403DA3 4883EC50 sub rsp,$50
0000000000403DA7 488BEC mov rbp,rsp
0000000000403DAA 4889CB mov rbx,rcx
0000000000403DAD 4833F6 xor rsi,rsi
0000000000403DB0 C7431000000000 mov [rbx+$10],$00000000
0000000000403DB7 C7431400000000 mov [rbx+$14],$00000000
0000000000403DBE 480FB74308 movzx rax,word ptr [rbx+$08]
0000000000403DC3 6681E8B1D7 sub ax,$d7b1
0000000000403DC8 6685C0 test ax,ax
0000000000403DCB 7418 jz TextOpen + $45
0000000000403DCD 6683E801 sub ax,$01
0000000000403DD1 6685C0 test ax,ax
0000000000403DD4 7428 jz TextOpen + $5E
0000000000403DD6 6683E801 sub ax,$01
0000000000403DDA 6685C0 test ax,ax
0000000000403DDD 0F85B5020000 jnz TextOpen + $2F8
0000000000403DE3 EB32 jmp TextOpen + $77
0000000000403DE5 C7C000000080 mov eax,$80000000
0000000000403DEB C7C103000000 mov ecx,$00000003
0000000000403DF1 488D1578FEFFFF lea rdx,[rel $fffffe78]
0000000000403DF8 48895328 mov [rbx+$28],rdx
0000000000403DFC EB30 jmp TextOpen + $8E
0000000000403DFE C7C000000040 mov eax,$40000000
0000000000403E04 C7C102000000 mov ecx,$00000002
0000000000403E0A 488D15BFFEFFFF lea rdx,[rel $fffffebf]
0000000000403E11 48895328 mov [rbx+$28],rdx
0000000000403E15 EB17 jmp TextOpen + $8E
0000000000403E17 C7C0000000C0 mov eax,$c0000000
0000000000403E1D C7C103000000 mov ecx,$00000003
0000000000403E23 488D15A6FEFFFF lea rdx,[rel $fffffea6]
0000000000403E2A 48895328 mov [rbx+$28],rdx
0000000000403E2E 488D158BFEFFFF lea rdx,[rel $fffffe8b]
0000000000403E35 48895330 mov [rbx+$30],rdx
0000000000403E39 66837B6000 cmp word ptr [rbx+$60],$00
0000000000403E3E 0F85B9000000 jnz TextOpen + $15D
0000000000403E44 48837B1800 cmp qword ptr [rbx+$18],$00
0000000000403E49 7512 jnz TextOpen + $BD
0000000000403E4B 488D8368020000 lea rax,[rbx+$00000268]
0000000000403E52 48894318 mov [rbx+$18],rax
0000000000403E56 C7430C80000000 mov [rbx+$0c],$00000080
0000000000403E5D 488D055CFEFFFF lea rax,[rel $fffffe5c]
0000000000403E64 48894338 mov [rbx+$38],rax
0000000000403E68 66817B08B2D7 cmp word ptr [rbx+$08],$d7b2
0000000000403E6E 7526 jnz TextOpen + $F6
0000000000403E70 488D0501A80000 lea rax,[rel $0000a801]
0000000000403E77 483BD8 cmp rbx,rax
0000000000403E7A 7508 jnz TextOpen + $E4
0000000000403E7C C7C0F4FFFFFF mov eax,$fffffff4
0000000000403E82 EB06 jmp TextOpen + $EA
0000000000403E84 C7C0F5FFFFFF mov eax,$fffffff5
0000000000403E8A 89C1 mov ecx,eax
0000000000403E8C E87FD1FFFF call GetStdHandle
0000000000403E91 488903 mov [rbx],rax
0000000000403E94 EB0E jmp TextOpen + $104
0000000000403E96 C7C1F6FFFFFF mov ecx,$fffffff6
// GetStdHandle to get the handle
0000000000403E9C E86FD1FFFF call GetStdHandle
0000000000403EA1 488903 mov [rbx],rax
0000000000403EA4 6683BBE802000000 cmp word ptr [rbx+$000002e8],$00
0000000000403EAC 0F85AA010000 jnz TextOpen + $2BC
0000000000403EB2 488B0B mov rcx,[rbx]
// determine the file type
0000000000403EB5 E886D1FFFF call GetFileType
0000000000403EBA 83F802 cmp eax,$02
0000000000403EBD 752A jnz TextOpen + $149
0000000000403EBF 66817B08B2D7 cmp word ptr [rbx+$08],$d7b2
0000000000403EC5 7511 jnz TextOpen + $138
0000000000403EC7 E8C4D2FFFF call GetConsoleOutputCP
0000000000403ECC 668983E8020000 mov [rbx+$000002e8],ax
0000000000403ED3 E984010000 jmp TextOpen + $2BC
// and the code page
0000000000403ED8 E8A3D2FFFF call GetConsoleCP
// etc
0000000000403EDD 668983E8020000 mov [rbx+$000002e8],ax
0000000000403EE4 E973010000 jmp TextOpen + $2BC
0000000000403EE9 480FB7057BAA0000 movzx rax,word ptr [rel $0000aa7b]
0000000000403EF1 668983E8020000 mov [rbx+$000002e8],ax
0000000000403EF8 E95F010000 jmp TextOpen + $2BC
0000000000403EFD 488D153CFEFFFF lea rdx,[rel $fffffe3c]
0000000000403F04 48895338 mov [rbx+$38],rdx
0000000000403F08 488D5360 lea rdx,[rbx+$60]
0000000000403F0C 41C7C001000000 mov r8d,$00000001
0000000000403F13 4D33C9 xor r9,r9
0000000000403F16 894C2420 mov [rsp+$20],ecx
0000000000403F1A C744242880000000 mov [rsp+$28],$00000080
0000000000403F22 48C744243000000000 mov qword ptr [rsp+$30],$0000000000000000
0000000000403F2B 4889D1 mov rcx,rdx
0000000000403F2E 89C2 mov edx,eax
0000000000403F30 E8EBD0FFFF call CreateFile
0000000000403F35 4883F8FF cmp rax,-$01
0000000000403F39 7512 jnz TextOpen + $1AD
0000000000403F3B 66C74308B0D7 mov word ptr [rbx+$08],$d7b0
0000000000403F41 E8CAD1FFFF call GetLastError
0000000000403F46 89C6 mov esi,eax
0000000000403F48 E94B010000 jmp TextOpen + $2F8
0000000000403F4D 488903 mov [rbx],rax
0000000000403F50 66817B08B3D7 cmp word ptr [rbx+$08],$d7b3
0000000000403F56 0F85E7000000 jnz TextOpen + $2A3
0000000000403F5C 66C74308B2D7 mov word ptr [rbx+$08],$d7b2
0000000000403F62 488B0B mov rcx,[rbx]
0000000000403F65 4833D2 xor rdx,rdx
0000000000403F68 E8C3D0FFFF call GetFileSize
0000000000403F6D 83F8FF cmp eax,-$01
0000000000403F70 750F jnz TextOpen + $1E1
0000000000403F72 4889D9 mov rcx,rbx
0000000000403F75 E8F6FDFFFF call TextOpenCleanup
0000000000403F7A 89C6 mov esi,eax
0000000000403F7C E917010000 jmp TextOpen + $2F8
0000000000403F81 81E880000000 sub eax,$00000080
0000000000403F87 85C0 test eax,eax
0000000000403F89 7D03 jnl TextOpen + $1EE
0000000000403F8B 4833C0 xor rax,rax
0000000000403F8E 488B0B mov rcx,[rbx]
0000000000403F91 89C2 mov edx,eax
0000000000403F93 4D33C0 xor r8,r8
0000000000403F96 4D33C9 xor r9,r9
0000000000403F99 E8D2D0FFFF call SetFilePointer
0000000000403F9E 83F8FF cmp eax,-$01
0000000000403FA1 7427 jz TextOpen + $22A
0000000000403FA3 488B0B mov rcx,[rbx]
0000000000403FA6 488D9368020000 lea rdx,[rbx+$00000268]
0000000000403FAD 41C7C080000000 mov r8d,$00000080
0000000000403FB4 4C8D4D4C lea r9,[rbp+$4c]
0000000000403FB8 48C744242000000000 mov qword ptr [rsp+$20],$0000000000000000
0000000000403FC1 E88AD0FFFF call ReadFile
0000000000403FC6 85C0 test eax,eax
0000000000403FC8 750F jnz TextOpen + $239
0000000000403FCA 4889D9 mov rcx,rbx
0000000000403FCD E89EFDFFFF call TextOpenCleanup
0000000000403FD2 89C6 mov esi,eax
0000000000403FD4 E9BF000000 jmp TextOpen + $2F8
0000000000403FD9 480FB7430A movzx rax,word ptr [rbx+$0a]
0000000000403FDE 66F7C00100 test ax,$0001
0000000000403FE3 745E jz TextOpen + $2A3
0000000000403FE5 837D4C00 cmp dword ptr [rbp+$4c],$00
0000000000403FE9 7658 jbe TextOpen + $2A3
0000000000403FEB 4833C0 xor rax,rax
0000000000403FEE 8B4D4C mov ecx,[rbp+$4c]
0000000000403FF1 83E901 sub ecx,$01
0000000000403FF4 3BC1 cmp eax,ecx
0000000000403FF6 774A jnbe TextOpen + $2A2
0000000000403FF8 83C101 add ecx,$01
0000000000403FFB 8BD0 mov edx,eax
0000000000403FFD 80BC13680200001A cmp byte ptr [rbx+rdx+$0268],$1a
0000000000404005 7534 jnz TextOpen + $29B
0000000000404007 488B0B mov rcx,[rbx]
000000000040400A 8BD0 mov edx,eax
000000000040400C 2B554C sub edx,[rbp+$4c]
000000000040400F 4D33C0 xor r8,r8
0000000000404012 41C7C102000000 mov r9d,$00000002
0000000000404019 E852D0FFFF call SetFilePointer
000000000040401E 83F8FF cmp eax,-$01
0000000000404021 740C jz TextOpen + $28F
0000000000404023 488B0B mov rcx,[rbx]
0000000000404026 E835D0FFFF call SetEndOfFile
000000000040402B 85C0 test eax,eax
000000000040402D 7513 jnz TextOpen + $2A2
000000000040402F 4889D9 mov rcx,rbx
0000000000404032 E839FDFFFF call TextOpenCleanup
0000000000404037 89C6 mov esi,eax
0000000000404039 EB5D jmp TextOpen + $2F8
000000000040403B 83C001 add eax,$01
000000000040403E 3BC1 cmp eax,ecx
0000000000404040 75B9 jnz TextOpen + $25B
0000000000404042 90 nop
0000000000404043 6683BBE802000000 cmp word ptr [rbx+$000002e8],$00
000000000040404B 750F jnz TextOpen + $2BC
000000000040404D 480FB70517A90000 movzx rax,word ptr [rel $0000a917]
0000000000404055 668983E8020000 mov [rbx+$000002e8],ax
000000000040405C 66817B08B1D7 cmp word ptr [rbx+$08],$d7b1
0000000000404062 7434 jz TextOpen + $2F8
0000000000404064 488B0B mov rcx,[rbx]
0000000000404067 E8D4CFFFFF call GetFileType
000000000040406C 83E801 sub eax,$01
000000000040406F 83F8FF cmp eax,-$01
0000000000404072 7409 jz TextOpen + $2DD
0000000000404074 83E801 sub eax,$01
0000000000404077 85C0 test eax,eax
0000000000404079 751D jnz TextOpen + $2F8
000000000040407B EB10 jmp TextOpen + $2ED
000000000040407D 4889D9 mov rcx,rbx
0000000000404080 E8EBFCFFFF call TextOpenCleanup
0000000000404085 C7C669000000 mov esi,$00000069
000000000040408B EB0B jmp TextOpen + $2F8
000000000040408D 488D053CFCFFFF lea rax,[rel $fffffc3c]
0000000000404094 48894330 mov [rbx+$30],rax
0000000000404098 89F0 mov eax,esi
000000000040409A 488D6550 lea rsp,[rbp+$50]
000000000040409E 5B pop rbx
000000000040409F 5E pop rsi
00000000004040A0 5D pop rbp
00000000004040A1 C3 ret
// return to the writeln routines with valid console handles