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