c39 TITLE EXEC.ASM ;==== executes a program and show the errorlevel afterwards ;---------------------------------------------------------------------- INCLUDE SCREEN.MAC INCLUDE KEYB.MAC B EQU BYTE PTR 0 W EQU WORD PTR 0 CSEG SEGMENT ASSUME CS:CSEG,DS:CSEG ORG 100h ;--------------------------------------------------------------------- Start: jmp Begin fcb1 db 40 dup (0) fcb2 db 40 dup (0) parmblk dw 0 ; Segment address of environment string dd 0 ; Pointer to command line dd 0 ; Pointer to default FCB to be passed at PSP+5CH dd 0 ; Pointer to default FCB to be passed at PSP+6CH buffer db 70 db 75 dup (0) cmdline db 50 dup (0) stacksp db 32 dup ('STACK ') newstack dw 0 oldstack dw 0 Mshrink PROC NEAR mov ah,04aH ;Mshrink mov bx,5000/16 ;Bytes left for program int 21H ret Mshrink ENDP get_input PROC NEAR Print 'Enter full pathname + filename and optional parameters: ' cr_lf readstr buffer cr_lf mov si,OFFSET buffer+1 mov cx,00h spc_lp: inc si cmp b[si],20h jz spc_lp push si ;Save start of filename fn_lp: ;Loop as long as "real" characters inc si cmp b[si],20h jz go_on inc cx jmp fn_lp go_on: cmp cx,0 jz error mov al,[si] mov b[si],0 ;Mark end of filename in buffer cmp al,0dh jz no_params spc_lp2: inc si cmp b[si],020h jz spc_lp2 cmp b[si],0dh jz no_params mov cx,00h mov di,OFFSET cmdline+1 par_lp: movsb inc cx cmp b[si],0dh jz ready jmp par_lp ready: mov b[cmdline],cl error: stc jmp ret no_params: clc pop si ret get_input ENDP Exec PROC NEAR mov bp,OFFSET parmblk mov [bp+2],OFFSET cmdline mov [bp+4],CS mov [bp+6],OFFSET fcb1 mov [bp+8],CS mov [bp+10],OFFSET fcb2 mov [bp+12],CS mov ah,4BH ; EXEC mov al,00H ; Load and Execute mov dx,si mov bx,OFFSET parmblk int 21H ret Exec ENDP Errlvl_Chk PROC NEAR mov ah,04dh int 21h cr_lf Print 'ERRORLEVEL = ' mov dl,al Wr_Byte ret Errlvl_Chk ENDP ;--------------------------------------------------------------- Begin: mov oldstack,sp mov sp,OFFSET newstack ;New stack pointer call Mshrink call get_input jc err_end call Exec call Errlvl_chk err_end: mov sp,oldstack ret ;--------------------------------------------------------------- CSEG ENDS END Start . 0