Hi folks!
I need get return code from dosemu programms in my unix shell.
Example:
% dosemu -dumb asm96000.exe -B tmp/moto.cln -L tmp/moto.alst -- simple.asm
Motorola DSP96000 Assembler Version 5.0.1
(C) Copyright Motorola, Inc. 1989-1992. All rights reserved.
**** 10 [simple.asm 10]: ERROR --- Unrecognized mnemonic: asdf
make: *** [simple_m.bin] Ошибка 1
% echo %?
=> 1
But command "echo %?" return 0.
I wrote patch (see attacment), if write in DOS: "exitemu 22", dosemu return 22.
But patch very stupid. And for run asm96000.exe in uxix sheel need
create file run.bat:
@echo off
dosemu -dumb asm96000.exe -B tmp/moto.cln -L tmp/moto.alst -- simple.asm
exitemu %ERRORLEVEL%
And run it:
dosemu -dumb "run.bat"
But logic tell: You need only write in DOS prompt:
dosemu -dumb asm96000.exe -B tmp/moto.cln -L tmp/moto.alst -- simple.asm
write in unix shell:
echo %?
and get:
1
Any ideas about it?
Sorry my English.
diff -rc dosemu-1.4.0/src/base/async/int.c dosemu-1.4.0.new/src/base/async/int.c
*** dosemu-1.4.0/src/base/async/int.c 2007-05-04 05:59:48.000000000 +0000
--- dosemu-1.4.0.new/src/base/async/int.c 2009-06-24 12:31:24.000000000 +0000
***************
*** 105,110 ****
--- 105,112 ----
}
}
+ extern int ERRORLEVEL; //FIXME
+
static void process_master_boot_record(void)
{
/* Ok, _we_ do the MBR code in 32-bit C code,
***************
*** 542,548 ****
dbug_printf("DOS termination requested\n");
if (config.cardtype != CARD_NONE)
p_dos_str("\n\rLeaving DOS...\n\r");
! leavedos(LO(bx));
}
break;
--- 544,551 ----
dbug_printf("DOS termination requested\n");
if (config.cardtype != CARD_NONE)
p_dos_str("\n\rLeaving DOS...\n\r");
! exit(ERRORLEVEL);
! //leavedos(LO(bx));
}
break;
diff -rc dosemu-1.4.0/src/plugin/commands/commands.c dosemu-1.4.0.new/src/plugin/commands/commands.c
*** dosemu-1.4.0/src/plugin/commands/commands.c 2007-05-04 05:59:48.000000000 +0000
--- dosemu-1.4.0.new/src/plugin/commands/commands.c 2009-06-24 12:30:03.000000000 +0000
***************
*** 39,44 ****
--- 39,46 ----
/* ============= old .com ported ================= */
+ int ERRORLEVEL;
+
static int do_doshelper(int ax, int bx)
{
LWORD(eax) = ax;
***************
*** 159,164 ****
--- 161,169 ----
int exitemu_main(int argc, char **argv)
{
+ if(argc > 1)
+ ERRORLEVEL=atoi(argv[1]);
+
do_doshelper(DOS_HELPER_REALLY_EXIT, 0);
return 0;
}
------------------------------------------------------------------------------
_______________________________________________
Dosemu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/dosemu-devel