;:::::::::::::::::::::::::::::::::::::::::
;:      Sito:  www.byteman.it  OpenWeb  ::
;:  Raccolta:  Particelle PAS+ASM       ::
;:    Autore:  Salvo Rosta aka byteman  ::
;:    Titolo:  XQEXEC.ASM               ::
;: Revisione:  07-04-1994               ::
;:::::::::::::::::::::::::::::::::::::::::

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;:        XQEXEC.ASM -  Versione: 18-10-1992, a cura di Salvo Rosta.        ::
;:                                                                          ::
;: Procedure XQuickExec(PrgName)      ; Esegue il Programma/Comando PrgName ::
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 

DATA        SEGMENT BYTE PUBLIC
ComLine     DB      100 DUP(?)
DATA        ENDS

CODE        SEGMENT BYTE PUBLIC
            ASSUME  CS:CODE,DS:DATA
            PUBLIC  XQuickExec

PrgName     EQU     DWORD  PTR [BP+6]

ProcUno     PROC    FAR

BuffSS      DW      0
BuffSP      DW      0
;BuffES      DW      0
;BuffDS      DW      0

XQuickExec: PUSH    BP                      ;:::: INTERFACCIA INPUT :::::::::
            MOV     BP,SP
            PUSH    DS                      ;Salva DS

            MOV     AX,DS                   ;:::: PREPARAZIONE COMLINE ::::::
            MOV     ES,AX                   ;::
            LEA     DI,Comline              ;:: NON alterare mai il contenuto
            PUSH    DI                      ;:: originale di una stringa pas-
            LDS     SI,PrgName              ;:: sata per valore. Ho perso una
            XOR     CX,CX                   ;:: intera giornata per avere in-
            MOV     CL,[SI]                 ;:: crementato il byte [SI] invece
            INC     CL                      ;:: di CL.
            CLD
            REPZ    MOVSB                   ; Copia PrgName in Comline
            MOV     AL,0Dh
            STOSB                           ; Aggiunge 0Dh
            POP     SI                      ; Modifica il Puntatore sullo Stack
            MOV     AX,ES
            MOV     DS,AX

                                            ;:::: EXEC INT 2Eh ::::::::::::::
            MOV     CS:BuffSS,SS            ; Salvataggio SS:SP
            MOV     CS:BuffSP,SP
;            MOV     CS:BuffDS,DS
;            MOV     CS:BuffES,ES
            INT     2Eh                     ; Execute DOS command at DS:SI
            MOV     SS,CS:BuffSS            ; Ripristino SS:SP
            MOV     SP,CS:BuffSP
;            MOV     DS,CS:BuffDS
;            MOV     ES,CS:BuffES

            POP     DS
            POP     BP
            RET     4

ProcUno     ENDP

CODE        ENDS
            END