For Programmers: Free Programming Magazines  


Home > Archive > Cobol > October 2004 > MF COBOL and SMTP mail









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author MF COBOL and SMTP mail
Damien Mulcahy

2004-10-02, 3:55 pm

Hi,

Can a MicroFocus COBOL (Server Express 2.2) program issue a Unix
(Solaris 9) system command and get back a return code in a similar way
to the C system() function?

Thanks,
Damien.
Robert Wagner

2004-10-02, 3:55 pm

On 1 Oct 2004 05:12:47 -0700, dmulcahy@revenue.ie (Damien Mulcahy)
wrote:

>Hi,
>
>Can a MicroFocus COBOL (Server Express 2.2) program issue a Unix
>(Solaris 9) system command and get back a return code in a similar way
>to the C system() function?


Yes. Say call 'system' using string.

If you have Oracle, look into its 'utl_smtp' library. It's faster than
spawning a shell.
Michael Wojcik

2004-10-02, 3:55 pm


In article <6rmql05i5k808rsdq0usj7943g2bqq4983@4ax.com>, Robert Wagner <robert@wagner.net.yourmammaharvests> writes:
> On 1 Oct 2004 05:12:47 -0700, dmulcahy@revenue.ie (Damien Mulcahy)
> wrote:
>
>
> Yes. Say call 'system' using string.


That generally does what the user expects, but with Server Express,
it's better to use the SX "SYSTEM" function, which handles things
like sanitizing the tty mode. See MF KB article 17587. (The SYSTEM
library routine is mysteriously missing from the SX documentation; I
used to use the C library system function myself until someone else
here told me about SYSTEM.)

However, Damien should note that the C system function does not
necessarily return the exit code of the process, and so neither
does the SX SYSTEM function. (See the documentation of the system
function for details.)

--
Michael Wojcik michael.wojcik@microfocus.com

We are subdued to what we work in. (E M Forster)
Richard

2004-10-02, 3:55 pm

dmulcahy@revenue.ie (Damien Mulcahy) wrote

> Can a MicroFocus COBOL (Server Express 2.2) program issue a Unix
> (Solaris 9) system command and get back a return code in a similar way
> to the C system() function?


Yes, you should be able to get _a_ return with:

CALL "system"
using command-string
returning return-value

My reading of system() is that the return value is
'implementation-defined'.

The actual value will be 'a similar way', but may be a different value
depending on how the call has been implemented. It may also depend on
whether you are using .int which won't call the C library directly, or
..gnt which might.

MicroFoucus suggests that CALL "SYSTEM" (upper case) is preferable for
several reasons, mostly because it allows Cobol to reset the
environment such as the terminal parameters and this doesn't specify a
return value (at least in the documentation that I have).
Richard

2004-10-02, 3:55 pm

Robert Wagner <robert@wagner.net.yourmammaharvests> wrote

>
> Yes. Say call 'system' using string.
>
> If you have Oracle, look into its 'utl_smtp' library. It's faster than
> spawning a shell.


It worries me, Robert. You claim to be a programmer and criticise
users for not telling you what they want and then you frequently
completely miss the point:

>and get back a return code in a similar way to the C system()

function?

You may be in a good position to give an actual answer and yet you
completely fail to read the question, preferring to add useless,
extraneous details about non-Cobol.

Under Solaris do you get a return code from CALL "system" ...
returning ?
Under Solaris with the same command string is it the same return as C
gives ?
Under Solaris is the return code from C's system() meaningful at all ?
Robert Wagner

2004-10-02, 3:55 pm

On 1 Oct 2004 15:27:14 -0700, riplin@Azonic.co.nz (Richard) wrote:

>Robert Wagner <robert@wagner.net.yourmammaharvests> wrote
>
>
>It worries me, Robert. You claim to be a programmer and criticise
>users for not telling you what they want and then you frequently
>completely miss the point:
>
>function?
>
>You may be in a good position to give an actual answer and yet you
>completely fail to read the question, preferring to add useless,
>extraneous details about non-Cobol.
>
>Under Solaris do you get a return code from CALL "system" ...
>returning ?


The question was "get back a return code in a similar way to the C
system() function?" Call 'system' is _using_ the C function, so it
gets back EXACTLY the same as the C system() function.

>Under Solaris with the same command string is it the same return as C
>gives ?


Yes. Exactly the same.

>Under Solaris is the return code from C's system() meaningful at all ?


That's a long debate. For simple commands, it is.

Robert Wagner

2004-10-02, 3:55 pm

On 1 Oct 2004 15:19:36 -0700, riplin@Azonic.co.nz (Richard) wrote:

>dmulcahy@revenue.ie (Damien Mulcahy) wrote
>
>
>Yes, you should be able to get _a_ return with:
>
> CALL "system"
> using command-string
> returning return-value


Lacking returning, it will be in RETURN-CODE.

>MicroFoucus suggests that CALL "SYSTEM" (upper case) is preferable for
>several reasons, mostly because it allows Cobol to reset the
>environment such as the terminal parameters and this doesn't specify a
>return value (at least in the documentation that I have).


Michael said the same, and that SYSTEM is not _in_ the documentation.
Do you have documentation unknown to Micro Focus insiders, or did you
just make that up?

Richard

2004-10-02, 3:55 pm

Robert Wagner <robert@wagner.net.yourmammaharvests> wrote

>
> Michael said the same, and that SYSTEM is not _in_ the documentation.
> Do you have documentation unknown to Micro Focus insiders, or did you
> just make that up?


From my Microfocus Manual, granted it is not Server Express 2.2:

10.8.1 Interfacing with the UNIX Operating System

The COBOL run-time system sets the terminal to a mode suitable for
COBOL. Calls to the operating system routine, system(), fail because
they do not affect the mode, as terminal settings are not modified
before or after the call.

You should replace your calls to system() with calls to "SYSTEM": this
is a subroutine provided with this COBOL system so that your operating
system can perform the same operations as system( ), but return the
terminal to shell mode before executing the command. The format of
this command is:

call "SYSTEM" using cmd-line

where the parameter is:

cmd-line A null-terminated command line

Upon completion of the call "SYSTEM" statement, the terminal is reset
to the mode suitable for COBOL. For example:

01 cmd-line pic x(3) value "sh" & x"00".
01 cmd-line2 pic x(30) value "cp f1 f2 >errfile 2>&1" & x"00".

procedure division.
display "Test" at 1101
call "SYSTEM" using cmd-line
display "Back in program" at 1201
call "SYSTEM" using cmd-line2
display "Back in program" at 1301
stop run.

As COBOL is unaware of any output from either call "system" or call
"SYSTEM", you must ensure that your screen is either not updated by a
call or is redisplayed after execution of the call.

In the example above the first command-line executed is the sh
command, which will update the screen with the system prompt and any
commands that may be entered. The second command-line copies file f1
to file f2 and redirects both the standard output and the standard
error to the file cp.log which your program can open in order to read
any output generated by running the command. The order in which you
make the redirections is significant.
Richard

2004-10-04, 8:55 am

Robert Wagner <robert@wagner.net.yourmammaharvests> wrote

>
> Yes. Say call 'system' using string.
>
> If you have Oracle, look into its 'utl_smtp' library. It's faster than
> spawning a shell.


It worries me, Robert. You claim to be a programmer and criticise
users for not telling you what they want and then you frequently
completely miss the point:

>and get back a return code in a similar way to the C system()

function?

You may be in a good position to give an actual answer and yet you
completely fail to read the question, preferring to add useless,
extraneous details about non-Cobol.

Under Solaris do you get a return code from CALL "system" ...
returning ?
Under Solaris with the same command string is it the same return as C
gives ?
Under Solaris is the return code from C's system() meaningful at all ?
Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com