www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2002/11/20/10:15:23

From: Wilfried Hennings <nospam AT fz-juelich DOT de>
Newsgroups: comp.os.msdos.djgpp
Subject: winXP, gcc: calling a batch file via system()
Date: Wed, 20 Nov 2002 16:02:14 +0100
Organization: Forschungszentrum Juelich GmbH
Lines: 50
Message-ID: <ln7ntu0vk669lhkk2f3erqbejl9nejvnru@4ax.com>
NNTP-Posting-Host: mut011
Mime-Version: 1.0
X-Trace: zam602.zam.kfa-juelich.de 1037804534 456009 134.94.127.14 (20 Nov 2002 15:02:14 GMT)
X-Complaints-To: usenet AT fz-juelich DOT de
NNTP-Posting-Date: Wed, 20 Nov 2002 15:02:14 +0000 (UTC)
X-Newsreader: Forte Agent 1.92/32.572
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

Hello all,
i am contributing to an open source project which should run under as
many opsys as possible without needing much adaptation. It's a C program
run from the command prompt, reading one ascii file and creating another
one. It is developed under Linux and MacOS X and runs OK so far under
IBM AIX, DEC OSF/1, and I am porting it to DOS by djgpp gcc.

The DOS port runs OK under DOS and Win95/98, but has problems under
WinNT, Win2000 and WinXP when an external batch file named
"latex2png.bat" shall be called via the system() routine. (system()
actually issues the command "latex2png" without the .bat extension so
that this call is the same under unix for calling a shell script called
"latex2png".)

Yes, I've got the most recent djgpp 2.03 distribution: downloaded
yesterday from simtel, and did a fresh install.

After long trials, I could track down the problems as follows:

There are really strange things going on between the implementation of
the "system" subroutine in djgpp's gcc and the WinXP system:

- WinXP has TWO command processors, the old DOS/Win95/98 compatible
"command.com" and the new NT4/Win2000/WinXP version "cmd.exe".
The console window first starts with cmd.exe but when system() issues
the "latex2png" command, a new process is started, by default with
command.com, and the batch file is processed by command.com. The default
command processor invoked by system() can be overridden by setting the
environment variable SHELL, e.g. SHELL=C:\WINDOWS\system32\cmd.exe. But
that doesn't solve the following problems.

- When "system" searches for the existence of latex2png, it abbreviates
the name to "latex2pn". But when it actually invokes it, it looks for
the full name. So the batch file is only interpreted if it is present
twice, as "latex2pn.bat" and as "latex2png.bat". So I changed the name
in the C source to "latex2pn".

- Main problem: When the batch file is called standalone, everything
works as it should. When it is called from the C program via system() I
get the message "Not enough environment space". I could not find out how
to increase this space: anything I do only increases the space for the
console window mother process but not for the daughter process. 

Anyone having any clue?
--
email me: change "nospam" to "w.hennings"
Dipl.-Ing.(=M.Sc.Eng.) Wilfried Hennings c./o.
Forschungszentrum (Research Center) Juelich GmbH, MUT
<http://www.fz-juelich.de/mut/index_e.html>
All opinions mentioned are strictly my own, not my employer's.

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019