Prompt.inc
[ Return to Browse Source Page ]
prompt_start:
mov ax,OS_Data
mov dx,ax
mov es,ax
mov esi,offset welcome_message
call domessage
prompt_loop:
call print_sn
mov ecx,69
call stringin
mov edi,offset stringin_buffer
call decode_string
here:
jmp prompt_loop
cmpstr_cmd:
;source = command
;dest = source
push eax
push ebx
push edi
push ecx
push esi
call tolower ; d=source,s=command
cmpstr_cmd_nospaces:
mov al,[edi]
cmp al,020h
jnz cmpstr_cmd_loop
inc edi
jmp cmpstr_cmd_nospaces
cmpstr_cmd_loop:
mov bl,[esi]
mov al,[edi]
test bl,bl
lea edi,[edi+1]
jz cmpstr_cmd_success0
cmp al,bl
lea esi,[esi+1]
jnz cmpstr_cmd_nodice
jmp cmpstr_cmd_loop
cmpstr_cmd_success0:
cmp al,020h
jz cmpstr_cmd_success1
test al,al
jnz cmpstr_cmd_nodice
;cmpstr_cmd_success2:
lea esi,[edi-1] ; esi -> 0.
lea esp,[esp+8] ; fudge stack to return esi and ecx
xor ecx,ecx
jmp cmpstr_cmd_success2_ret
cmpstr_cmd_success1:
; edi -> command tail
lea esp,[esp+8] ; fudge stack to return esi and ecx
push edi
xor ecx,ecx
mov al,[edi]
jmp cmpstr_cmd_success1_ret
cmpstr_cmd_countparams:
xor ah,ah
jmp cmpstr_cmd_countparams0
cmpstr_cmd_countparams1:
or ah,1
cmpstr_cmd_countparams0:
mov al,[edi]
lea edi,[edi+1]
test al,al
jz cmpstr_cmd_countparams_done_1
cmp al,020h
jnz cmpstr_cmd_countparams1
test ah,ah
jz cmpstr_cmd_noinc0
xor ah,ah
inc ecx
cmpstr_cmd_noinc0:
mov byte ptr [edi-1],ah ; ,0
cmpstr_cmd_success1_ret:
mov al,[edi]
cmp al,020h
jnz cmpstr_cmd_countparams
lea ebx,[edi]
cmpstr_cmd_countspaces:
lea ebx,[ebx+1]
mov al,[ebx]
cmp al,020h
jz cmpstr_cmd_countspaces
mov esi,edi
cmpstr_cmd_removespaces:
mov al,[ebx]
lea ebx,[ebx+1]
test al,al
mov [esi],al
lea esi,[esi+1]
jnz cmpstr_cmd_removespaces
jmp cmpstr_cmd_countparams
cmpstr_cmd_countparams_done_1:
test ah,ah
jz cmpstr_cmd_countparams_done
inc ecx
cmpstr_cmd_countparams_done:
pop esi
cmpstr_cmd_success2_ret:
clc
jmp cmpstr_cmd_sucess_ret
cmpstr_cmd_nodice:
stc
pop esi
pop ecx
cmpstr_cmd_sucess_ret:
pop edi
pop ebx
pop eax
ret
decode_string:
ifdef bscmd
mov al,[edi]
sub al,031h
cmp al,3
jb bscmdland
endif
mov ebx,offset commandtable
decodeloop:
mov esi,[ebx]
lea ebx,[ebx+8]
test esi,esi
jz decode_end
call cmpstr_cmd
jc decodeloop
mov eax,[ebx-4]
jmp eax
decode_end:
call strlen_d ;if(no 0) { stringin screwed up; you locked up }
mov esi,edi
mov word ptr [edi+ecx],003fh ;'?',0
jmp domessage ; call domessage / ret
do_test_delay:
mov ecx,400
jmp common_delay_2 ; call common_delay_2 / ret
change_sn:
cmp ecx,1
jz change_sn_correctuseage
mov esi,offset prompt_sn_msg
call print
ret
change_sn_correctuseage:
lea edi,[esi]
mov edi,offset screen_name
mov ecx,8
change_sn_loop:
dec ecx
mov al,[esi]
lea esi,[esi+1]
mov [edi],al
lea edi,[edi+1]
jnz change_sn_loop
ret
;mov esi,offset
;call print
;mov ecx,9
;call stringin
;mov edi,offset stringin_buffer
;call strlen_d
;test ecx,ecx
;jz bad_sn
;inc ecx
;mov esi,offset screen_name
;xchg edi,esi
;change_sn_loop:
;rep movsb
;bad_sn:
;jmp do_crlf ; call do_crlf / ret
prompt_root:
xor eax,eax
mov ds:[current_directory],eax
mov dword ptr ds:[current_directory_str],eax
dec eax
mov ds:[current_partition],eax
ret
prompt_err:
db 0Fh,0B9h
jmp prompt_err
prompt_tmp_dir:
jmp tmp_dir
prompt_cd:
test ecx,ecx
jz prompt_cd_ret ; usage?
mov eax,esi
call fs_cd_ll
jnc prompt_cd_ret
mov esi,offset cd_nonesuch
call print
prompt_cd_ret:
ret
prompt_help:
mov esi,offset prompt_help_msg
jmp domessage ; call domessage / ret
Download this file.
[ Return to Browse Source Page ]
Copyright 2000, Ed Pizzi