
PUSH 0
GOTO ::main
POPA
NEW
NEW
NEW
NEW
NEW
NEW
MOV $14 1
MOV $16 0
MOV $15 $14
MOV $17 $16
MOV $18 0
MOV $19 0
NEW
STR "Koral"
MOV $1A $0
PUSH 0
GOTO ::main
POPA
EXT
::MsgBox
NEW
POP1
MOV $1B $0
NEW
POP1
MOV $1C $0
PUSH 0
PUSH $1C
PUSH $1B
PUSH 0

CALL user32  MessageBoxA
POPA
RET
::puts
NEW
POP1
MOV $1D $0
PUSH $1D

CALL msvcr100  puts
POPA
RET
::printf
NEW
POP1
MOV $1E $0
NEW
POP1
MOV $1F $0
PUSH $1F
PUSH $1E

CALL msvcr100  printf
POPA
RET
::system
NEW
POP1
MOV $20 $0
PUSH $20

CALL msvcr100  system
POPA
RET
::fopen
NEW
POP1
MOV $21 $0
NEW
POP1
MOV $22 $0
PUSH $22
PUSH $21

CALL msvcr100  fopen
POPA
RET
::getc
NEW
POP1
MOV $23 $0
PUSH $23

CALL msvcr100  fgetc
POPA
MOV $0 $0
POPA
RET
::fgetc
NEW
POP1
MOV $24 $0
PUSH $24

CALL msvcr100  fgetc
POPA
MOV $0 $0
POPA
RET
::fscanf
NEW
POP1
MOV $25 $0
NEW
POP1
MOV $26 $0
NEW
POP1
MOV $27 $0
NEW
STR "%s"
MOV $28 $0
PUSH $27
PUSH $26
PUSH $25

CALL msvcr100  fscanf
POPA
RET
::showwindow
NEW
POP1
MOV $29 $0
PUSH $29

CALL stdlib  showwindow
POPA
RET
::comparestr
NEW
POP1
MOV $2A $0
NEW
POP1
MOV $2B $0
PUSH $2B
PUSH $2A

CALL stdlib  comparestr
POPA
CMP $2C $0==1
 ::0004FD35
MOV $0 $14
POPA
RET
::0004FD35
CMP $2C $0==0
::0004FD35 ::000A00EF
MOV $0 $16
POPA
RET
::000A00EF
RET
::comparetext
NEW
POP1
MOV $2C $0
NEW
POP1
MOV $2D $0
PUSH $2D
PUSH $2C

CALL stdlib  comparetext
POPA
CMP $2E $0==1
::000A00EF ::00059B06
MOV $0 $14
POPA
RET
::00059B06
CMP $2E $0==0
::00059B06 ::0004985D
MOV $0 $16
POPA
RET
::0004985D
RET
::concat
NEW
POP1
MOV $2E $0
NEW
POP1
MOV $2F $0
PUSH $2F
PUSH $2E

CALL stdlib  concat
POPA
RET
::delete
NEW
POP1
MOV $30 $0
NEW
POP1
MOV $31 $0
NEW
POP1
MOV $32 $0
PUSH $32
PUSH $31
PUSH $30

CALL stdlib  delete
POPA
RET
::pos
NEW
POP1
MOV $33 $0
NEW
POP1
MOV $34 $0
PUSH $34
PUSH $33

CALL stdlib  pos
POPA
RET
::freadtostr
NEW
POP1
MOV $35 $0
PUSH $35

CALL stdlib  freadtostr
POPA
MOV $0 $0
POPA
RET
::pause
NEW
POP1
MOV $36 $0
STR "pause"
MOV $36 $0
PUSH $36

CALL msvcr100  system
POPA
RET
::shellexecute
NEW
POP1
MOV $37 $0
NEW
POP1
MOV $38 $0
NEW
POP1
MOV $39 $0
NEW
POP1
MOV $3A $0
NEW
POP1
MOV $3B $0
STR "open"
MOV $3B $0
PUSH $3B
PUSH $3A
PUSH $39
PUSH $38
PUSH $37

CALL stdlib  shellexecute
POPA
MOV $0 $0
POPA
RET
::inttostr
NEW
POP1
MOV $3C $0
NEW
PUSH $3C

CALL stdlib  inttostr
POPA
MOV $0 $0
POPA
RET
::ishowwindow
NEW
POP1
MOV $3E $0
PUSH $3E
GOTO ::inttostr
POPA
MOV $3E $0
PUSH $3E
GOTO ::showwindow
POPA
RET
::_mypid
NEW
POP1
MOV $3F $0
PUSH $40

CALL kernel32  GetCurrentProcessId
POPA
MOV $0 $0
POPA
RET
::OpenProcess
NEW
POP1
MOV $40 $0
NEW
POP1
MOV $41 $0
NEW
POP1
MOV $42 $0
PUSH $42
PUSH $41
PUSH $40

CALL kernel32  OpenProcess
POPA
MOV $0 $0
POPA
RET
::preparemyself
NEW
POP1
MOV $43 $0
NEW
PUSH $45
GOTO ::_mypid
POPA
MOV $44 $0
PUSH 48
PUSH 0
PUSH $44
GOTO ::OpenProcess
POPA
MOV $0 $0
POPA
RET
::allocmem
NEW
POP1
MOV $45 $0
PUSH $45

CALL stdlib  allocmem
POPA
MOV $0 $0
POPA
RET
::GetLastError
NEW
POP1
MOV $46 $0
PUSH $47

CALL kernel32  GetLastError
POPA
MOV $0 $0
POPA
RET
::_sreadpr
NEW
POP1
MOV $47 $0
NEW
POP1
MOV $48 $0
NEW
POP1
MOV $49 $0
NEW
EVAL $49+$48
MOV $4A $0
NEW
PTR $4B
MOV $4B $0
NEW
PUSH $4D
GOTO ::preparemyself
POPA
MOV $4C $0
PUSH $4C
PUSH $4A
PUSH $4B
PUSH $47
PUSH $18

CALL kernel32  ReadProcessMemory
POPA
PUSH $4C
GOTO ::CloseHandle
POPA
MOV $0 $4B
POPA
RET
::GetStartupInfo
NEW
POP1
MOV $4D $0
PUSH $4D

CALL kernel32  GetStartupInfoA
POPA
RET
::CloseHandle
NEW
POP1
MOV $4E $0
PUSH $4E

CALL kernel32  CloseHandle
POPA
RET
::CreateProcess
NEW
POP1
MOV $4F $0
NEW
POP1
MOV $50 $0
NEW
NEW
NEW
NEW
NEW
STR "C:\"
MOV $55 $0
PUSH 220
GOTO ::allocmem
POPA
MOV $53 $0
PUSH 220
GOTO ::allocmem
POPA
MOV $54 $0
POPA
PUSH $50
PUSH $4F
PUSH 0
PUSH 0
PUSH $17
PUSH 0
PUSH 0
PUSH 0
PUSH $54
PUSH $53

CALL kernel32  CreateProcessA
POPA
CMP $0 0
JMNE ::00003635
PUSH $56
GOTO ::GetLastError
POPA
MOV $52 $0
STR "Failed to create process"
MOV $51 $0
PUSH $51
GOTO ::showwindow
POPA
PUSH $52
GOTO ::ishowwindow
POPA
::00003635
MOV $0 $53
POPA
RET
::readstruct
NEW
POP1
MOV $56 $0
NEW
POP1
MOV $57 $0
EVAL $56*4
MOV $56 $0
PUSH $57
PUSH $56
PUSH 4
GOTO ::_sreadpr
POPA
MOV $0 $0
POPA
RET
::makefloat
NEW
POP1
MOV $58 $0
PUSH $58

CALL stdlib  makefloat
POPA
MOV $0 $0
POPA
RET
::makeint
NEW
POP1
MOV $59 $0
PUSH $59

CALL stdlib  makeint
POPA
MOV $0 $0
POPA
RET
::GetAsyncKeyState
NEW
POP1
MOV $5A $0
PUSH $5A

CALL User32  GetAsyncKeyState
POPA
MOV $0 $0
POPA
RET
::main
NEW
POP1
MOV $5B $0
NEW
NEW
NEW
NEW
PUSH $61
GOTO ::p.init
POPA
::p.create
NEW
POP1
MOV $61 $0
NEW
POP1
MOV $62 $0
NEW
PUSH $62
PUSH $61
GOTO ::CreateProcess
POPA
MOV $63 $0
PUSH $63
PUSH 0
GOTO ::readstruct
POPA
MOV $5D $0
PUSH $63
PUSH 1
GOTO ::readstruct
POPA
MOV $5E $0
PUSH $63
PUSH 2
GOTO ::readstruct
POPA
MOV $5F $0
PUSH $63
PUSH 3
GOTO ::readstruct
POPA
MOV $60 $0
RET
::p.init
NEW
POP1
MOV $64 $0
NEW
STR "winver.exe"
MOV $65 $0
PUSH 0
PUSH $65
GOTO ::p.create
POPA
