Cobol - call "system" using "archivo.bat"

 
Vista:

call "system" using "archivo.bat"

Publicado por nico (7 intervenciones) el 01/12/2008 23:05:18
Hola gente.

Problema: call "system" using "archivo.bat" - problema con variables de entorno en bat
Version : RM/COBOL-85 Compiler -
Version 6.10.00 for DOS 3.3+.

S.O. : WIN XP SP2

La situacion es la sig:

Tengo un prg cobol que realiza la sig. sentencia:

call "system" using "archivo.bat"

El bat "archivo.bat" contiene las sig. sentencias:

set var1 =15
echo %var1%
echo %CD%
pause

Salida obtenida es la sig.:

al ejectuarse -> set var1 = 15
se obtiene -> No queda espacio de
entorno

al ejectuarse -> echo %var1%
se obtiene -> ECHO es on

al ejectuarse -> echo %CD%
se obtiene -> ECHO es on

al ejectuarse -> pause
se obtiene -> Pulse cualquier tecla para
continuar . . .

Las consultas son las sig.:

1- por que no se puede acceder a las variables %a% y la de entorno %CD%
cuando realizo el call system desde cobol para invocar a un bat, si ejecuto el bat independiente (es decir invocando el archivo.bat directamente de una consola) funciona y se obtienen los resultados esperados no los indicados.

Slds y muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder

RE:call

Publicado por SuperIndio (138 intervenciones) el 02/12/2008 15:17:04
Cuando vos ejecutas el .bat por separado lo ejecutas desde linea de comando
y cuando vos abris una consola, win32 te genera automaticamente el set
para esa consola, en cambio desde cualquier otra aplicacion
que no sea "Window scripting host" no podras acceder a las variables de entorno
a menos que las recuperes desde el propio lenguaje que fue usado para generar la aplicacion.
Pero no te desesperes que tengo la solucion:

al proceso.Bat le pasas los parametros y estos parametros no son mas que
los valores de las variables de entorno (si es que son variables de entorno)

Este es el proceso .bat
rem ***********************************
@Echo Off
Set var1 =15
Set a=%1%
Set cd=%2%
Set P3=%3%

echo %var1%
echo %a%
echo %CD%
echo %P3%
rem pause
rem ***********************************

En el programa COBOL definis esto en WORKING:

01 W-PROCESS-BATCH.
03 W-NOM-PROC PIC X(12) VALUE "Proceso.bat"
03 W-COM-INI1 PIC X(01) VALUE " ".
03 W-PARAM-1 PIC X(25) VALUE SPACES.
03 W-COM-FIN1 PIC X(01) VALUE " ".

03 W-COM-INI2 PIC X(01) VALUE " ".
03 W-PARAM-2 PIC X(10) VALUE SPACES.
03 W-COM-FIN2 PIC X(01) VALUE " ".

03 W-COM-INI3 PIC X(01) VALUE " ".
03 W-PARAM-3 PIC X(15) VALUE SPACES.
03 W-COM-FIN3 PIC X(01) VALUE " ".

77 VARENV1 PIC X(04) VALUE "PATH".
77 VARENV2 PIC X(06) VALUE "WINDIR".
77 VARENV3 PIC X(07) VALUE "PATHEXT".

En la PROCEDURE DIVISION

DISPLAY VARENV1 UPON ENVIRONMENT-NAME.
ACCEPT W-PARAM-1 FROM ENVIRONMENT-VALUE.

DISPLAY VARENV2 UPON ENVIRONMENT-NAME.
ACCEPT W-PARAM-2 FROM ENVIRONMENT-VALUE.

DISPLAY VARENV3 UPON ENVIRONMENT-NAME.
ACCEPT W-PARAM-3 FROM ENVIRONMENT-VALUE.

CALL "system" USING W-PROCESS-BATCH.

Si no funciona de entrada
tendras que defini en special-names esto:

Special-Names.
Decimal-Point IS Comma
ENVIRONMENT-NAME IS VAENV
ENVIRONMENT-VALUE IS MVALOR
CONSOLE IS CRT.

SALUDOS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:call

Publicado por nico (7 intervenciones) el 02/12/2008 22:20:32
Hola, antes que nada muchas gracias por la rta a SuperIndio.

Respecto al problema, agregue lo que indica SuperIndio, obtuve error al compilar
aca dejao el error obtenido del .lst,


30 ENVIRONMENT DIVISION.
31 * *
32 * *
33 ******************************************************************
34 * C O N F I G U R A T I O N S E C T I O N *
35 ******************************************************************
36 * *
37 CONFIGURATION SECTION.
38 * *
39 SPECIAL-NAMES.
40 DECIMAL-POINT IS COMMA
41 ENVIRONMENT-NAME IS VAENV
$
***** 1) 0409: E SPECIAL-NAMES paragraph has wrong format. (scan suppressed).

42 ENVIRONMENT-VALUE IS MVALOR
43 CONSOLE IS CRT.
$
***** 1) 0005: I Scan resumed.
*****Previous diagnostic message occurred at line 41.

Dejo el listado mistras sigo buscando por que no compila , ya que no conocía la utilizacion de ENVIRONMENT-NAME y ENVIRONMENT-VALUE en la ENVIRONMENT DIVISION voy a revisar manuales y si llego a alguna solucion la comento.

Slds.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:call

Publicado por SuperIndio (138 intervenciones) el 03/12/2008 14:56:58
En realidad ENVIRONMENT-NAME y ENVIRONMENT-VALUE
ya son palabras reservadas, pero no se si si RM-COBOL lo tiene implementado
probaste sin colocarlo en la CONFIGURATION SECTION. ?
es decir colocar solamente esto:

SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.

Y en procedure:

DISPLAY VARENV3 UPON ENVIRONMENT-NAME.
ACCEPT W-PARAM-3 FROM ENVIRONMENT-VALUE.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:call

Publicado por nico (7 intervenciones) el 03/12/2008 21:18:58
Hola superindio, al probar sin las palabras reservadas ENVIRONMENT-NAME y ENVIRONMENT-VALUE en la CONFIGURATION SECTION EN SPECIAL-NAMES Y POR LO QUE VEO TAMPOCO RECONOCE ESAS PALABRAS RESERVADAS SIGO CON ERROR DE COMPILACION , MUESTRO EL RESULTADO DE COMPILACION.

LINE DEBUG PG/LN -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN FUNBAT00

340 000280 DISPLAY VARENV1 UPON ENVIRONMENT-NAME.
$ $
***** 1) 0475: E Mnemonic-name must be associated with low-volume-I-O-name in SPECIAL-NAMES paragraph. (scan suppressed).
***** 2) 0005: I Scan resumed.

341 000283 ACCEPT W-PARAM-1 FROM ENVIRONMENT-VALUE.
$ $
***** 1) 0475: E Mnemonic-name must be associated with low-volume-I-O-name in SPECIAL-NAMES paragraph. (scan suppressed).
***** 2) 0005: I Scan resumed.
*****Previous diagnostic message occurred at line 340.

342 *

slds.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:call

Publicado por SuperIndio (138 intervenciones) el 04/12/2008 13:38:31
Si las reconoce, el mensaje dice Nombre nemotecnico deberia star asociado a una definicion de input-output en SPECIAL-NAMES
entonces habra que buscar en los manuales de Rm-cobol como hay que definirlos o asociarlos en SPECIAL-NAMES,

Special-Names.
_____Decimal-Point IS Comma
_____ENVIRONMENT-NAME IS V-ENTORNO
_____ENVIRONMENT-VALUE IS V-VALOR
_____CONSOLE IS CRT.

Definir:
77 V-ENTORNO PIC X(04) VALUE "PATH".
77 V-VALOR PIC X(06) VALUE ALL " ".
o asi:
01 V-ENTORNO PIC X(04) VALUE "PATH".
01 V-VALOR PIC X(06) VALUE ALL " ".

En la PROCEDURE DIVISION
************************

DISPLAY V-ENTORNO UPON ENVIRONMENT-NAME.
ACCEPT V-VALOR FROM ENVIRONMENT-VALUE.

Esto deberia funcionar.
Si no me equivoco el compilador tiene opciones para SPECIAL-NAMES.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:call

Publicado por nico (7 intervenciones) el 06/12/2008 15:02:47
Hola SuperIndio, antes que nada muchas gracias por la paciencia en responder.

Todavia sigo sin poder avanzar con este problema que tengo,

Realizando lo de la respuesta anterior (declarando las variables
con nivel 01 y nivle 77 en ambos casos me da el mismo error de
compilacion)

+---------------------------------+
| error en special-names |
+---------------------------------+

43 DECIMAL-POINT IS COMMA
44 ENVIRONMENT-NAME IS V-ENTORNO-77
$
***** 1) 0409: E SPECIAL-NAMES paragraph has wrong format. (scan suppressed).

45 ENVIRONMENT-VALUE IS V-VALOR-77
46 CONSOLE IS CRT.
$
***** 1) 0005: I Scan resumed.
*****Previous diagnostic message occurred at line 44.


RESPECTO A ESTE ERORR SI DECLARO EN EL SIG ORDEN :

DECIMAL-POINT IS COMMA
ENVIRONMENT-VALUE IS V-VALOR-77
ENVIRONMENT-NAME IS V-ENTORNO-77
CONSOLE IS CRT.

O EN EL SIG ORDEN

DECIMAL-POINT IS COMMA
CONSOLE IS CRT
ENVIRONMENT-VALUE IS V-VALOR-77
ENVIRONMENT-NAME IS V-ENTORNO-77.

SIEMPRE OBTENGO EL MISMO ERROR NO RECONOCE NINGUNA DE LAS SIG:

ENVIRONMENT-VALUE
ENVIRONMENT-NAME
CONSOLE

SOLO ES QUE DETECTA LA PRIMERA DECLARACION.

+------------------------+
|error en procedure|
+------------------------+
110 000008 DISPLAY V-ENTORNO-77 UPON ENVIRONMENT-NAME
$
***** 1) 0475: E Mnemonic-name must be associated with low-volume-I-O-name in SPECIAL-NAMES paragraph. (scan suppressed).
*****Previous diagnostic message occurred at line 46.

111 000011 ACCEPT V-VALOR-77 FROM ENVIRONMENT-VALUE
$ $
***** 1) 0005: I Scan resumed.
***** 2) 0475: E Mnemonic-name must be associated with low-volume-I-O-name in SPECIAL-NAMES paragraph. (scan suppressed).
*****Previous diagnostic message occurred at line 110.

EN CUANTO A LAS OPCIONES DEL COMPILADOR TENGO LAS SIG.

Usage: rmcobol name [options]
Options: [(] [A] [B] [C] [D] [E] [F=(keyword list)] [G=configfile]
[H=configmod] [K] [L[=path]] [M] [N] [O=path] [P] [Q] [R] [S] [T]
[U[={B|D|P}]] [V] [W=workspace] [X] [Y] [Z=version] [2] [7] [)comments]


REVISANDO EL SIG PDF: http://downloads.microfocus.com/liant/download/pdf/rmss_e01.pdf
EN LA PAG 1 : Compile Command

NO VEO QUE NINGUNA REFERENCIA A ENVIRONMENT-VALUE

RESPECTO A LA OPCION [F=(keyword list)] de ese manual

F={(keyword-list)|keyword}
Direct the compiler to flag occurrences of these language elements:
COM1 INTERMEDIATE
COM2 OBSOLETE
EXTENSION SEG1
HIGH SEG2
If leading hyphens are used, the parentheses are optional.

NO ME QUEDA MUY CLARO SI SERIA ESTA LA OPCION CON LA CUAL DEBERIA
COMPILAR, SI ES ASI REALIZE UN PAR DE PRUEBAS Y ME DA ERROR DE SINTAXIS AL COMPILAR, ES DECIR NO SE COMO SE UTILIZA ESTA OPCION.

(LA VERDAD NO ENCONTRE NADA RESPECTO AL COMPILADOR QUUE ESTOY UTILIZANDOQUE ES RM/COBOL-85 Compiler - Version 6.10.00 for DOS 3.3+.
OTRA OPCION QUE ENCONTRE ES LLAMAR A UNA RUTINA C$GetEnv QUE TAMPOCO ME FUNCIONA POR LO QUE LEI ESTA EN VERSIONES POSTERIORES).

UN SALUDO.
GRACIAS!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:call

Publicado por Luis Salinas (83 intervenciones) el 16/12/2008 16:38:05
Que tal Nico.

Podria ser una soolucion si ejecutas directamente con manejador de comandos, que no se si en RMCOBOL te permita pero intentalo, el comando seria asiÑ

CALL "C$SYSTEM" USING "COMMAND.COM /C MYFILE.BAT", CSYS-SHELL GIVING W-STATRET.

Donde w-statret recivira el codigo de retrono y debe ser una variable numerica de 2 o mas bytes.

incluso puede omitir esta parte.

CSYS-SHELL PUEDE CAMBIAR POR CSYS-HIDEN SI NO QUIERE QUE SE VEA LA EJECUCION DEL BAT MIENTRAS LO PROCESA EL PROGRAMA QUE LO INVOCO.

sALUDOS.

lUIS.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar