Hola, foro.
Estoy haciendo unas pruebas con un procedimiento que quiero que me
devuelva un valor *char longitud va a variar en cada llamada, con vistas
a editar un valor num�rico y devolverlo como texto.
Lo que haga el programa ahora mismo da igual; el problema es que la
ejecuci�n funciona bien en sucesivas llamadas pero llega un punto en que
pierdo los valores de campos utilizados en el programa y que no tienen
nada que ver con la llamada actual (como si solapara posiciones de
memoria).
Como digo, las llamadas a pEdita funcionan bien hasta que se ejecuta la
llamada que devuelve el resultado en el campo s4; en ese momento se
pierdern los datos de s1, s2 y s3.
�Alguien sabe qu� estoy haciendo mal?
Me ocurre lo mismo con otro procedimiento distinto a este, en el que no
se usa la API ceedod (no es por su culpa) y tambi�n tiene especificado el
options(*varsize).
Gracias.
El programa es el siguiente:
d
pEdita
pr
opdesc
d
num
30 5 const
d
dec
1 0 const
d
string
64 options(*varsize)
d
ceedod pr
d
ParmNum
10i 0 const
d
DescType
10i 0
d
DataType
10i 0
d
DescInfo1
10i 0
d
DescInfo2
10i 0
d
InLen
10i 0
d
12a options(*omit)
* Parameters passed to CEEDOD
d
DescType
s
10i 0
d
DataType
s
10i 0
d DescInfo1
s
10i 0
d DescInfo2
s
10i 0
d
InLen
s
10i 0
d
s1
s
11
d
s2
s
12
d
s3
s
13
d
s4
s
14
d
s5
s
15
d
s6
s
16
c
callp pEdita(-123456,7890:4:s1)
c
callp pEdita(-123456,7890:4:s2)
c
callp pEdita(-123456,7890:4:s3)
c
callp pEdita(-123456,7890:4:s4)
c
callp pEdita(-123456,7890:4:s5)
c
callp pEdita(-123456,7890:4:s6)
c
eval *inlr = *on
p
pEdita b
d
pEdita
pi
opdesc
d
num
30 5 const
d
dec
1 0 const
d
string
64 options(*varsize)
d
alfa
s
64 inz varying
d
long
s
4 0 inz
c
eval alfa =
%trim(%editc(num:'P'))
c
eval long = %len(alfa)
c
select
c
when dec = 0
c
eval alfa =
%subst(alfa:1:long-6)
c
when dec = 1
c
eval alfa =
%subst(alfa:1:long-4)
c
eval string = *blank
c
when dec = 2
c
eval alfa =
%subst(alfa:1:long-3)
c
when dec = 3
c
eval alfa =
%subst(alfa:1:long-2)
c
when dec = 4
c
eval alfa =
%subst(alfa:1:long-1)
c
endsl
c
eval long = %len(alfa)
c
eval string = *blank
c
callp
ceedod(3 : DescType :
DataType :
c
DescInfo1 : DescInfo2: Inlen :
c
*OMIT)
c
if Inlen >= long
c
eval %subst(string:Inlen-long+1:long) =
alfa
c
endif
c
return
p
pEdita e
