From 1007a12c832f60aeb81cec45d73cc29ba4d81b06 Mon Sep 17 00:00:00 2001 From: Robert Pengelly <robertapengelly@hotmail.com> Date: Tue, 24 Sep 2024 02:03:16 +0100 Subject: [PATCH] Expand environment variables --- build/chimaera.img | Bin 368640 -> 368640 bytes build/chimaera.vhd | Bin 34120704 -> 34120704 bytes src/apps/pcomm/pcomm.asm | 245 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 245 insertions(+) diff --git a/build/chimaera.img b/build/chimaera.img index 003447778d4fdad0f15b9754364be6a216cae4cf..3bee871bde57d30677390954a2766c212aa1c5bf 100644 GIT binary patch delta 3841 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 TqTnZhpAdcl2Njg)o1Om#1$6~M delta 3619 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 diff --git a/build/chimaera.vhd b/build/chimaera.vhd index 2f3513afae545ce74a944d64b344438a6c80473c..a6a2267b4f72caa6fa67b0b04533f40015122c0c 100644 GIT binary patch delta 6704 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 delta 6170 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 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) -- 2.34.1