kolibrios/programs/network/ftpc/console.inc

155 lines
4.7 KiB
PHP
Raw Normal View History

;;================================================================================================;;
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'