Expand environment variables
authorRobert Pengelly <robertapengelly@hotmail.com>
Tue, 24 Sep 2024 01:03:16 +0000 (02:03 +0100)
committerRobert Pengelly <robertapengelly@hotmail.com>
Tue, 24 Sep 2024 01:03:16 +0000 (02:03 +0100)
build/chimaera.img
build/chimaera.vhd
src/apps/pcomm/pcomm.asm

index 003447778d4fdad0f15b9754364be6a216cae4cf..3bee871bde57d30677390954a2766c212aa1c5bf 100644 (file)
Binary files a/build/chimaera.img and b/build/chimaera.img differ
index 2f3513afae545ce74a944d64b344438a6c80473c..a6a2267b4f72caa6fa67b0b04533f40015122c0c 100644 (file)
Binary files a/build/chimaera.vhd and b/build/chimaera.vhd differ
index 8a67bf55057baae4f4657c87b6125d44075cd014..a8bd36536739327d3033a0f0a6a71cf342abf33b 100644 (file)
@@ -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)