On Wed, Jan 23, 2008 at 07:28:23PM -0500, DJ Delorie wrote:
> 
> > You can't cross-test, with DejaGnu running elsewhere?
> 
> I've tried.  The problem is communication between the DOS system (or
> emulator) and the host system.  DOS isn't kind to networking,
> semaphores, or anything else that hints at multiprocessing.

Under Linux with DOSEMU, it should be fairly simple.

Create a named pipe.

On the DOS side, use a shell script to read one line from the pipe.

On the Linux side, prepare a DOS shell script or batch for the DOS side
to execute. (Remember the carriage returns where appropriate.) Then,
echo a crlf into the named pipe.

The read on the DOS side will now finish. Go execute the job. Then echo
your return code into a file, read another line from the named pipe, and
loop.

On the Linux side, echo another crlf into the named pipe; this waits for
the DOS side. Then read the return code from the file.


You might (with a sufficiently modern bash on the Linux side) write your
script with something like
        #! /bin/bash
        printf "%q " "$0" "$@" > script
        echo -e '\r' > thepipe
        echo Waiting for return code
        echo -e '\r' > thepipe
        read rc < rc
        exit $rc
and link this to every command name you want to be able to execute.

On the DOS side,
        :
        while true
        do
                echo Waiting for command
                read dummy < thepipe
                sh script
                echo $? > rc
                read dummy < thepipe
        done

Disclaimer: I haven't really done more than a quick test of named pipe
reading. I'm sure there are some subtilities here.

Reply via email to