Ejecutar programa con funcion intdos() en DOS

Alberto Sung
19 de Marzo del 2008
Hola, estoy intentando cargar y ejecutar archivos .COM desde otro programa, SIN utilizar el EXEC explicitamente, solo llamadas al sistema de DOS ( Funcion INTDOS).

El problema es cuando trato de enviar un BLOQUE DE PARAMETROS para pasarle parametros al .COM que se ejecutará.

Ejemplo: c:ejecutar nombre_comando [parametros]

Este es el codigo pero se queda sin responder:

// ejecutar.c
#include <stdio.h>
#include <dos.h>
#include <stdlib.h>
#include <systypes.h>

int main(int argc, char near *argv[ ])
{
int len, i, j, retorna, tam;

union REGS registros;
char f1[20] = "0000000000000000000"; // FCB1 en blanco
char f2[20] = "0000000000000000000";

// bloque de parametros para pasar al BX
struct parametros {
short int segmento;
char* lineacomando;
char* fcb1;
char* fcb2;

} par;

char *cmd; // linea de comando

cmd[0] = (char) strlen(argv[2]);
strcpy(&cmd[1],argv[2]);
strcat(&cmd[1],"");

// estableciendo el bloque de parametros
par.segmento = 0;
par.lineacomando = cmd;
par.fcb1 = f1;
par.fcb2 = f2;

registros.h.ah = 0x4b;
registros.h.al = 0x00;
registros.x.dx = (unsigned) argv[1];
registros.x.bx = (unsigned int) &par;

retorna = intdos(&registros, &registros);
if (!(registros.x.cflag ? retorna : 0))
{ printf("CARRY FLAG IS CLEARn"); };

printf("Comando terminado: %s", argv[2]);
return 0;
}