HP Forums

Full Version: Problems with export CMD
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I discovered a problem with EXPORT,

The following functions require a global variable to retrieve the last assigned value after of a second or n execution.

If you uncomment the export, the simulator is restarted, I think the compiler should check that it only defines varible with EXPORT CMD, just one time, and generate an error message


PHP Code:
// version 0.2 feb 26/2017

//Global variables
//x:=0;
//y:=0;

//Global and visible variables
export x:=0;
export y:=0;
export z:=0;
export inputv0()
BEGIN
  
//x:=5;
  
print();
  print(
"input cmd with a variable"); wait;
  
input);
  print(
"foo1"); wait;
  
//foo1();
  
input);
  print(
"foo2"); wait;
  
//foo2();
  
input);
  print(
"foo3"); wait;
  
//foo3();
  
return "Done";
END;

//export x:=0;
export inputv1()
BEGIN
  
// I: forma mas simple, requiere un solo argumento el nombre de la variable
  // ARGUMENTO#1 variable: "x"
  // ARGUMENTO#2 etiqueta: se agrega automaticamente a la caja de dialogo el mismo nombre de la variable mas ":" , en este caso "X:"
  // ARGUMENTO#3 titulo de la caja de dialogo: por defecto coloca "Input"
  // ARGUMENTO#4 ayuda: agreaga la cadena "Enter value for" + nombre de la variable,  "Enter value for X" si la calcualdora esta en inglés
  // ARGUMENTO#5 valores de reinicio o por defecto
  // ARGUMENTO#6 valores iniciales
  
x:=1// valor inicial siempre que se llame a la orden inputv1()
  
input);
  
// [enter] ó [ok] ejecuta los campos de la caja de dialogo
  // [esc] ó [ok]
  
return "Done";
END;

//export x:=0;
export inputv1a()
BEGIN
  
// para recuperar el ultimo valor asignado, se debe crear X como variable global export x:=0;
  
input);
  return 
"Done";
END;

//export x:=0;
export inputv1b()
BEGIN
  
// agregando titulo personalizado, argumento #2
  
inputx"titulo» Modificando x" );
  return 
"Done";
END;

//export x:=0;
export inputv1c()
BEGIN
  local x
:=3;
  
// agregando titulo y etiqueta personalizada, argumentos #2-3
  
inputx"titulo» Modificando x","etiqueta» x:" );
  
// note que la ayuda automaticamente elimina los dos puntos si los hay al final de la etiqueta mostrando solo "Enter value for etiqueta X" y no "Enter value for etiqueta X:"
  
return "Done";
END;

//export x:=0;
export inputv1d()
BEGIN
  
// agregando titulo, etiqueta y ayuda personalizada, argumentos #2-4
  
inputx"titulo» Modificando x","etiqueta» x:","Ayuda» Ingrese valor para la etiqueta x" );
  return 
"Done";
END;

//export x:=0;
export inputv1e()
BEGIN
  
// agregando titulo, etiqueta, ayuda, y valor de reinicio personalizado, argumentos #2-5
  
local valorDeReinicio:=5.1;
  
input(
  
x,
  
"titulo» Modificando x",
  
"etiqueta» x:",
  
"Ayuda» Ingrese valor para la etiqueta x",
  
valorDeReinicio
  
);
  
// el valor de reincicio se coloca con la secuencia [shift]+[esc] ó solo [backspace]
  
return "Done";
END;

//export x:=0;
export inputv1f()
BEGIN
  
// agregando titulo, etiqueta, ayuda, valor de reinicio e inicial personalizado, argumentos #2-5
  //x:=78; // ya no es necesario definir un valor inicial en esta forma
  
local valorDeReinicio:=5.1234;
  
local valorInicial:=5.2;
  
input(
  
x,
  
"titulo» Modificando x",
  
"etiqueta» x:",
  
"Ayuda» Ingrese valor para la etiqueta x",
  
valorDeReinicio,
  
valorInicial
  
);
  return 
"Done";
END;

//export x:=0;
export inputv1g()
BEGIN
  
// argumentos por defecto se agrega {} y para campo vacio ""
  
inputx"titulo» Modificando x",{},"" ); // {} para etiqueta
  
return "Done";
END;

// II: INPUT con varias variables

//export x:=0; export y:=0; export z:=0;
export inputv2()
BEGIN
  
// para un conjunto de variables se abarcan entre {}
  
input( {x,y,z}, "titulo» Modificando x, y, z","etiqueta» x:","Ayuda» Ingrese valor para la etiqueta x" );
  
// note que las cadenas de texto para etiqueta y ayuda solo afectan a la primera variable
  
return "Done";
END;

//export x:=0; export y:=0; export z:=0;
export inputv2a()
BEGIN
  
// para un conjunto de etiquetas y ayudas se abarcan entre {}
  
input( {xyz}, "titulo» Modificando x, y, z",
  {
"etiqueta» x:","etiqueta» z:","etiqueta» z:"},
  {
"Ayuda» Ingrese valor para la etiqueta x""Ayuda» Ingrese valor para la etiqueta y""Ayuda» Ingrese valor para la etiqueta z" }
  );
  return 
"Done";  
END;

//export x:=0; export y:=0; export z:=0;
export a:=0;
export b:=0;
export c:=0;
export d:=0;
export ee:=0;
export inputv2b()
BEGIN
  
// Si hay mas de 7 variables LOS CAMPOS SE MUESTRAN EN N PANTALLAS
  
input(
  {
xyzabcdee},
  
"titulo» modificando n variables",
  {
"etiqueta» x:","etiqueta» y:","etiqueta» z:"},
  {
"Ayuda» Ingrese valor para la etiqueta x""Ayuda» Ingrese valor para la etiqueta y""Ayuda» Ingrese valor para la etiqueta z" }
  );
  
// puede completar las cadenas de texto para las etiquetas y ayuda para A,B,C,D,EE
  // con la tecla virtual [page #/#] se avanza ó REGRESA entre pantallas
  
return "Done";
END;


export inputv2c()
BEGIN
  
// para un conjunto de titulos se abarcan entre {}
  
input(
  {
xyzabcdee},
  {
"Titulo» modificando variables x, y, ... d",  "titulo» modificando variable ee"},
  {
"etiqueta» x:","etiqueta» y:","etiqueta» z:"},
  {
"Ayuda» Ingrese valor para la etiqueta x""Ayuda» Ingrese valor para la etiqueta y""Ayuda» Ingrese valor para la etiqueta z" }
  );
  return 
"Done";
END;

// Variable con n elementos

export inputv3()
BEGIN
  local list1
:={9,8,7,6};
  
input( {list1[1],list1[2],list1[3],list1[4]},
  
"Tit » mod los elementos de una lista",
  {
"list?1?""list[2]""list[3]""list[4]"}
  );
  return 
"Done";
END;

export inputv3a()
BEGIN
  local array1
:=[[1,2],[3,4]];
  
input(
  {
  
array1[1,1],
  
array1[1,2],
  
array1[2,1],
  
array1[2,2]
  },
  
"Tit » mod los elementos de un arreglo123",
  {
"array1?1,1?""array1[1,2]""array1[2,1]""array1[2,1]"}
  );
END;

export inputv3b()
BEGIN
  local offsetField0
:=0//%
  
local offsetField10:=10//10%
  
  
local widthField10:=0//0%
  
local widthField20:=10//20%
  
  // page 1
  
local lineField0:=0;
  
local lineField1:=1;
  
local lineField2:=2;
  
local lineField3:=3;
  
local lineField4:=4;
  
local lineField5:=5;
  
local lineField6:=6;
  
  
// page 2
  
local lineField7:=7;
  
local lineField8:=8;
  
  
local array1:=[[1,2],[3,4]];
  
input(
  
  {
  
  {
array1[1,1], [0], {10,20,lineField0} },
  {
array1[1,2], [0], {10,20,lineField1} },
  {
array1[2,1], [0], {40,20,lineField0} },
  {
array1[2,2], [0], {40,20,lineField1} }
  },
  
"Tit » mod los elementos de un arreglo123",
  {
"?1,1?""[1,2]""[2,1]""[2,1]"}
  );
END;

export inputcheckv1a()
BEGIN
  local checkbox
:=0;
  
local checkbox_true:=true;
  
local checkbox_false:=0;
  
local group2_checkbox:=2;
  
local group3_checkbox:=3;
  
local group4_checkbox:=4;
  
input(
  {
  {
X,group2_checkbox},
  {
Y,checkbox},
  {
Z,checkbox},
  {
W,checkbox}
  }
  );
  
END;


export inputcheckv1()
BEGIN
  local checkbox
:=0;
  
local checkbox_true:=true;
  
local checkbox_false:=0;
  
  
input(
  {
  {
X,checkbox},
  {
z,checkbox}
  }
  
  );
  
// las teclas [±] ó [enter] ó [?] cambian el estado de la casilla
END
When you recompile the program, either by updating the code, or by exiting the program editor, the variables are "restored", but that is not it, but the program is re-created from 0.

Use external variables such as CAS, the use of HVars (), both with conditions so that they are only updated once even if recompiled.
If you run for example inputv1a for first time x -> 0, then if you enter a value of 8, and then you close the program, the next execution appears x -> 8 and not x -> 0

It becomes zero when you recompile, for example when you edit the source code (prg editor calculator), or from the program editor of HPconnKit this is correct x -> 0

PHP Code:
export x:=0;
export inputv1a()
BEGIN  
  input
);
  return 
"Done";
END
(02-27-2017 01:14 AM)compsystems Wrote: [ -> ]If you run for example inputv1a for first time x -> 0, then if you enter a value of 8, and then you close the program, the next execution appears x -> 8 and not x -> 0

It becomes zero when you recompile, for example when you edit the source code (prg editor calculator), or from the program editor of HPconnKit this is correct x -> 0

PHP Code:
export x:=0;
export inputv1a()
BEGIN  
  input
);
  return 
"Done";
END

Why should it be zero? By design, the fact that you declared x outside of the scope of any program means that the variable x will never be destroyed (unlike local variables declared inside a function). The only exception is when you re-compile the program (which re-initializes x to whatever default value you use in your source code). This design ensures that x will always retain the last value stored into x. Using "export" merely allows x to be usable externally (i.e. by the user and any part of the system, not just the programs defined in the same source code where x was declared).

When you run inputv1a(), there is no code in that function that resets the value of x to 0. So of course it will retain the former value of 8. After all, the line "export x:=0;" exists outside of the definition of inputv1a().

This design allows programmers to create variables that remain in memory for other programs (within the same source file) to use/share.
Reference URL's