utils/dosfstools/mcopy -i $@ boot/freeldr/core/freeldr.sys ::
utils/dosfstools/mcopy -i $@ kernel/kernel.sys ::
utils/dosfstools/mcopy -i $@ apps/pcomm/pcomm.com ::command.com
-# utils/dosfstools/mcopy -i $@ apps/hello/hello.com ::hello.com
+
+# utils/dosfstools/mmd -i $@ dos
+# utils/dosfstools/mcopy -i $@ apps/hello/hello.com ::dos/hello.com
chimaera.vhd: all
if [ -f $@ ]; then rm -rf $@; fi
pop ax
ret
+;******************************************************************************
+; @function _get_paths
+;******************************************************************************
+global _get_paths
+_get_paths:
+
+ push ax
+ push bx
+ push cx
+ push dx
+ push si
+ push di
+ push es
+ push ds
+
+ mov ax, cs:[_vec_paths]
+
+ and ax, ax
+ jz _get_paths.clear
+
+ push ax
+
+ call _free
+ add sp, 2
+
+ xor ax, ax
+ mov cs:[_vec_paths], ax
+
+_get_paths.clear:
+
+ mov di, offset _vec_paths
+ xor al, al
+
+ mov cx, 6
+ rep stosb
+
+ mov si, cs:[_vec_env]
+ mov cx, cs:[_vec_env + 4]
+
+ mov es, si
+ xor di, di
+
+_get_paths.find:
+
+ and cx, cx
+ jz _get_paths.done
+
+ push es
+ mov ax, es:[di]
+
+ mov es, ax
+ push es
+
+ xor bx, bx
+ mov ax, es:[bx]
+
+ push cx
+ push es
+ push ds
+
+ mov cx, ds
+ mov es, cx
+ mov ds, ax
+
+ push es
+ push di
+
+ mov di, offset _temp
+ xor al, al
+
+ mov cx, 255
+ rep stosb
+
+ pop di
+ pop es
+
+ xor ax, ax
+ push ax
+
+ mov ax, offset _temp
+ push ax
+
+ call _strcpy
+ add sp, 4
+
+ pop ds
+
+ mov ax, ds
+ mov es, ax
+
+ mov ax, offset _var
+ push ax
+
+ mov ax, offset _temp
+ push ax
+
+ call _strcmp
+ add sp, 4
+
+ pop es
+ pop cx
+
+ and ax, ax
+ jz _get_paths.found
+
+ pop ax
+ pop es
+
+ add di, 2
+ dec cx
+
+ jmp _get_paths.find
+
+_get_paths.found:
+
+ pop si
+ pop es
+
+ mov es, si
+ xor bx, bx
+
+ mov ax, es:[bx + 2]
+
+ and ax, ax
+ jz _get_paths.done
+
+ push cx
+ push es
+ push ds
+
+ mov cx, ds
+ mov es, cx
+ mov ds, ax
+
+ push es
+ push di
+
+ mov di, offset _temp
+ xor al, al
+
+ mov cx, 255
+ rep stosb
+
+ pop di
+ pop es
+
+ xor ax, ax
+ push ax
+
+ mov ax, offset _temp
+ push ax
+
+ call _strcpy
+ add sp, 4
+
+ pop ds
+ pop es
+ pop cx
+
+ mov di, offset _temp
+ xor bx, bx
+
+ mov ax, ds
+ mov es, ax
+
+_get_paths.loop:
+
+ push di
+
+ mov ax, offset _vec_paths
+ push ax
+
+ call _vec_push
+ add sp, 4
+
+ mov ax, ';'
+ push ax
+
+ push di
+
+ call _strchr
+ add sp, 4
+
+ and ax, ax
+ jz _get_paths.done
+
+ mov di, ax
+
+ xor al, al
+ stosb
+
+ jmp _get_paths.loop
+
+_get_paths.done:
+
+ pop ds
+ pop es
+ pop di
+ pop si
+ pop dx
+ pop cx
+ pop bx
+ pop ax
+ ret
+
;******************************************************************************
; @function _skip_whitespace
;******************************************************************************
-global _skip_whitespace
_skip_whitespace:
cmp byte ptr [bx], 0
xor al, al
stosb
+ push bx
+
mov dx, offset _app_path
inc bx
mov di, bx
mov ax, HEX (4B00)
int HEX (21)
+ pop bx
jnc .L5
+ mov ax, '\\'
+ push ax
+
+ mov ax, offset _app_path
+ push ax
+
+ call _strrchr
+ add sp, 4
+
+ and ax, ax
+ jnz .L98
+
+.L99:
+
+ call _get_paths
+
+ push ax
+ push bx
+ push cx
+ push di
+ push es
+
+ mov ax, cs:[_vec_paths]
+ mov es, ax
+ mov cx, cs:[_vec_paths + 4]
+
+ xor di, di
+
+.L96:
+
+ and cx, cx
+ jz .L97
+
+ mov ax, offset _app_path
+ push ax
+
+ mov ax, es:[di]
+ push ax
+
+ call _concat_exec
+ jnc .L100
+ add sp, 4
+
+ add di, 2
+ dec cx
+
+ jmp .L96
+
+.L100:
+
+ add sp, 4
+
+ pop es
+ pop di
+ pop cx
+ pop bx
+ pop ax
+
+ jmp .L5
+
+.L97:
+
+ pop es
+ pop di
+ pop cx
+ pop bx
+ pop ax
+
+.L98:
+
mov bx, offset _err_invalid
call _writestr
jmp .L11
+;******************************************************************************
+; @function _concat_exec
+;******************************************************************************
+_concat_exec:
+
+ push bp
+ mov bp, sp
+
+ push ax
+ push bx
+ push cx
+ push dx
+ push si
+ push di
+ push es
+
+ mov ax, ds
+ mov es, ax
+
+ mov di, offset _full_path
+
+ mov si, word ptr [bp + 4]
+ call _format_path
+
+ mov al, '\\'
+ stosb
+
+ mov si, word ptr [bp + 6]
+ call _format_path
+
+ mov dx, offset _full_path
+ inc bx
+ mov di, bx
+
+ mov bx, offset _param_blk
+
+ mov word ptr [bx + 2], di
+ mov word ptr [bx + 4], ds
+
+ mov ax, HEX (4B00)
+ int HEX (21)
+
+_concat_exec.done:
+
+ pop es
+ pop di
+ pop si
+ pop dx
+ pop cx
+ pop bx
+ pop ax
+ pop bp
+ ret
+
;******************************************************************************
; @function _get_env
;******************************************************************************
;; Variables for executing application.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;_formatted_cmd: db 255 dup (0)
-_app_path: db 255 dup (0)
+_app_path: db 256 dup (0)
_param_blk: db 16 dup (0)
+_full_path: db 256 dup (0)
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Error messages.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
global _vec_env
_vec_env: db 6 dup (0)
+global _vec_paths
+_vec_paths: db 6 dup (0)
+
global _curr_row
_curr_row: db HEX (00)