155 lines
4.7 KiB
PHP
155 lines
4.7 KiB
PHP
|
;;================================================================================================;;
|
||
|
console: ;////////////////////////////////////////////////////////////////////////////////////////;;
|
||
|
;;------------------------------------------------------------------------------------------------;;
|
||
|
;? Console-specific functions - initialization, clear screen, ;;
|
||
|
;? .get_cmd - Takes user command as input from the console ;;
|
||
|
;? .server_addr - Gets server address from user in the form address:port ;;
|
||
|
;? .get_username/.get_pass - Takes username/password as input from the user ;;
|
||
|
;;------------------------------------------------------------------------------------------------;;
|
||
|
;> ;;
|
||
|
;;------------------------------------------------------------------------------------------------;;
|
||
|
;< none ;;
|
||
|
;;================================================================================================;;
|
||
|
|
||
|
dd .init
|
||
|
dd .server_addr
|
||
|
dd .get_username
|
||
|
dd .get_cmd
|
||
|
dd .print
|
||
|
dd .set_flags
|
||
|
dd .list
|
||
|
dd .progress
|
||
|
dd .error
|
||
|
|
||
|
.init:
|
||
|
; load console library
|
||
|
stdcall dll.Load, @IMPORT_CONSOLE
|
||
|
; initialize console
|
||
|
invoke con_start, 1
|
||
|
invoke con_init, 120, 43, 120, 300, str_title
|
||
|
invoke con_cls
|
||
|
; Welcome user
|
||
|
invoke con_write_asciiz, str_welcome
|
||
|
ret
|
||
|
|
||
|
.server_addr:
|
||
|
mov [initial_login], 1
|
||
|
invoke con_cls
|
||
|
invoke con_set_flags, 0x07
|
||
|
; ask for server addr
|
||
|
invoke con_write_asciiz, str_srv_addr
|
||
|
; write prompt (in green color)
|
||
|
invoke con_set_flags, 0x0a
|
||
|
invoke con_write_asciiz, str_prompt
|
||
|
; read string
|
||
|
invoke con_gets, param_server_addr, 256
|
||
|
; check for exit
|
||
|
test eax, eax
|
||
|
jz .exit
|
||
|
cmp byte [param_server_addr], 10
|
||
|
jz .exit
|
||
|
|
||
|
.port:
|
||
|
invoke con_write_asciiz, str_port
|
||
|
invoke con_gets, param_port, 256
|
||
|
|
||
|
; read username
|
||
|
.get_username:
|
||
|
invoke con_set_flags, 0x0a
|
||
|
invoke con_write_asciiz, str_user
|
||
|
invoke con_gets, param_user, 256
|
||
|
|
||
|
; read password
|
||
|
.get_pass:
|
||
|
invoke con_write_asciiz, str_pass
|
||
|
invoke con_set_flags, 0x00 ; black text on black background for password
|
||
|
invoke con_gets, param_password, 256
|
||
|
invoke con_set_flags, 0x0a
|
||
|
|
||
|
cmp [initial_login], 1
|
||
|
jne arg_handler.copy_user
|
||
|
mov [initial_login], 0
|
||
|
|
||
|
; get initial path
|
||
|
.get_path:
|
||
|
invoke con_write_asciiz, str_path
|
||
|
invoke con_gets, param_path, 256
|
||
|
invoke con_write_asciiz, str_newline
|
||
|
|
||
|
jmp arg_handler.connect
|
||
|
|
||
|
.get_cmd:
|
||
|
; write prompt
|
||
|
invoke con_write_asciiz, str_prompt
|
||
|
; read string
|
||
|
invoke con_gets, buf_cmd, 256
|
||
|
|
||
|
; print a newline and reset the color back to grey
|
||
|
invoke con_write_asciiz, str_newline
|
||
|
invoke con_set_flags, 0x07
|
||
|
|
||
|
jmp wait_for_usercommand.parse_cmd
|
||
|
|
||
|
.print:
|
||
|
pushad
|
||
|
|
||
|
invoke con_write_asciiz, [esp+36]
|
||
|
mov esi, [esp+36]
|
||
|
mov ecx, -1
|
||
|
@@:
|
||
|
inc ecx
|
||
|
lodsb
|
||
|
test al, al
|
||
|
jnz @b
|
||
|
; write to log file
|
||
|
mov eax, [esp+36]
|
||
|
cmp [logfile_offset], -1
|
||
|
je @f
|
||
|
call write_to_file
|
||
|
|
||
|
@@:
|
||
|
popad
|
||
|
ret 4
|
||
|
|
||
|
.set_flags:
|
||
|
invoke con_set_flags, [esp+4]
|
||
|
ret 4
|
||
|
|
||
|
.list:
|
||
|
invoke con_write_asciiz, buf_buffer2
|
||
|
jmp data_loop
|
||
|
|
||
|
.progress: ; edx = no. of bytes transferred
|
||
|
mov eax, edx
|
||
|
mov edi, str_bytes_done
|
||
|
call dword_ascii
|
||
|
mov byte[edi],0
|
||
|
icall eax, interface_addr, interface.print, str_downloaded, str_bytes_done, str_bytes
|
||
|
ret
|
||
|
|
||
|
.error:
|
||
|
invoke con_getch2
|
||
|
jmp .server_addr
|
||
|
|
||
|
.exit:
|
||
|
invoke con_exit, 1
|
||
|
jmp exit
|
||
|
|
||
|
|
||
|
align 4
|
||
|
@IMPORT_CONSOLE:
|
||
|
|
||
|
library console, 'console.obj'
|
||
|
|
||
|
import console, \
|
||
|
con_start, 'START', \
|
||
|
con_init, 'con_init', \
|
||
|
con_write_asciiz, 'con_write_asciiz', \
|
||
|
con_exit, 'con_exit', \
|
||
|
con_gets, 'con_gets', \
|
||
|
con_cls, 'con_cls', \
|
||
|
con_getch2, 'con_getch2', \
|
||
|
con_set_cursor_pos, 'con_set_cursor_pos', \
|
||
|
con_write_string, 'con_write_string', \
|
||
|
con_get_flags, 'con_get_flags', \
|
||
|
con_set_flags, 'con_set_flags'
|