From: Robert Pengelly Date: Tue, 24 Sep 2024 01:03:16 +0000 (+0100) Subject: Expand environment variables X-Git-Url: https://git.candlhat.org/?a=commitdiff_plain;h=1007a12c832f60aeb81cec45d73cc29ba4d81b06;p=chimaera.git Expand environment variables --- diff --git a/build/chimaera.img b/build/chimaera.img index 0034477..3bee871 100644 Binary files a/build/chimaera.img and b/build/chimaera.img differ diff --git a/build/chimaera.vhd b/build/chimaera.vhd index 2f3513a..a6a2267 100644 Binary files a/build/chimaera.vhd and b/build/chimaera.vhd differ diff --git a/src/apps/pcomm/pcomm.asm b/src/apps/pcomm/pcomm.asm index 8a67bf5..a8bd365 100644 --- a/src/apps/pcomm/pcomm.asm +++ b/src/apps/pcomm/pcomm.asm @@ -1251,9 +1251,24 @@ _main: .L32: + mov di, offset _formatted_command + push di + + xor al, al + + mov cx, 255 + rep stosb + + push bx + + call _expand_vars + add sp, 4 + lodsw + mov bx, offset _formatted_command call cs:[si] + jmp .L5 .L23: @@ -1527,6 +1542,235 @@ _main: jmp .L11 +;****************************************************************************** +; @function _get_env +;****************************************************************************** +_get_env: + + push bp + mov bp, sp + + push bx + push cx + push dx + push si + push di + push es + + xor ax, ax + + mov si, cs:[_vec_env] + mov cx, cs:[_vec_env + 4] + + mov es, si + xor di, di + +.L91: + + and cx, cx + jz .L92 + + 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 + + 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, word ptr [bp + 4] + push ax + + mov ax, offset _temp + push ax + + call _strcmp + add sp, 4 + + pop es + pop cx + + and ax, ax + jz .L93 + + pop ax + pop es + + add di, 2 + dec cx + + jmp .L91 + +.L93: + + pop ax + pop es + + jmp .L90 + +.L92: + + xor ax, ax + +.L90: + + pop es + pop di + pop si + pop dx + pop cx + pop bx + pop bp + ret + +;****************************************************************************** +; @function _expand_vars +;****************************************************************************** +_expand_vars: + + push bp + mov bp, sp + + push ax + push bx + push cx + push dx + push si + push di + + mov di, word ptr [bp + 6] + mov si, word ptr [bp + 4] + + mov dx, di + +.L87: + + cmp byte ptr [si], 0 + je .L84 + + mov cx, di + sub cx, dx + + cmp cx, 255 + jae .L84 + + cmp byte ptr [si], '%' + jne .L85 + + inc si + + cmp byte ptr [si], 0 + jne .L86 + + mov al, '%' + stosb + + jmp .L87 + +.L86: + + cmp byte ptr [si], '%' + je .L85 + + mov ax, '%' + push ax + + push si + + call _strchr + add sp, 4 + + and ax, ax + jnz .L88 + + mov al, '%' + stosb + + jmp .L87 + +.L88: + + mov bx, ax + mov byte ptr [bx], 0 + + push si + + call _get_env + add sp, 2 + + and ax, ax + jz .L89 + + push si + push ds + + mov ds, ax + xor si, si + + mov ax, [si + 2] + mov ds, ax + +.L94: + + lodsb + + and al, al + jz .L95 + + stosb + jmp .L94 + +.L95: + + pop ds + pop si + +.L89: + + mov si, bx + inc si + + jmp .L87 + +.L85: + + movsb + jmp .L87 + +.L84: + + pop di + pop si + pop dx + pop cx + pop bx + pop ax + pop bp + ret + ;****************************************************************************** ; @function _format_path ;****************************************************************************** @@ -1991,6 +2235,7 @@ _err_invalid: db "Bad command or file name - ", HEX ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Data area. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +_formatted_command: db 256 dup (0) _fn_wild: db "*.*", HEX (00) _temp: db 257 dup (0)