Glosario

Abreviatura para la Notación Polaca Inversa o Reverse Polish Notation.
Esta notación de sufijo es la sintaxis de entrada que casi todas las calculadoras HP usan. Básicamente hay dos tipos de RPN. Una usada en calculadoras más viejas, hace que el ENTER duplique el nivel uno del stack en la línea de edición, y otro, usado en las 28/38G/48/49/50, que hace que el ENTER duplique el nivel uno si la línea de edición no está siendo usada, y que pone el contenido de la línea de edición en el nivel uno si la línea de edición está siendo usada. RPN usa notación de sufijo, así que 1+1 es introducido 1 ENTER 1 + en vez de 1 + 1 =.
Esto puede parecer más confuso al principio, pero es mucho más sencillo con expresiones más complejas. La Notación Polaca Inversa se basa en los trabajos de el polaco Jan Lukasiewicz, quien creó la notación de prefijo ( + 1 1 ) llamada Notación Polaca.

Library data?

11 respuestas [Último envío]
Integró: 10/09/2006
Envíos: 168
MonedasHP: 16
Imagen de tauro2010
Library data?
 
Vie, 06/06/2008 - 10:09

¿Alguien me puede explicar para que sirve eso?

en un programa vi de que su base de datos lo guardan en un LIB DAT, yo normalmente lo guardo en una matriz. espero que me entiendan jajajaj

Saludos

Top
Integró: 24/02/2004
Envíos: 405
MonedasHP: 298
Imagen de Elias1976
Calc: HP49 | ROM:Hp 49G - Hp 48GX - Hp 48SX - Hp 42S - Hp 41CV - Hp 32SII - Hp 32S - Hp 28S - Hp 17BII - Hp 12C - Casio Classpad 330
 
#1
Vie, 06/06/2008 - 11:50

Acá en este foro si usas el buscador hay bastante informacion de eso.

checa acá.

Top
Integró: 08/07/2004
Envíos: 690
MonedasHP: 441
Imagen de alexis
AdictoHP+
Calc: HP50 | ROM:2.10-7, HP49G+ | ROM:2.15, Hp 35s | 2007, Hp 20b | 2008, Casio Fx-6300g | 1984
 
#2
Vie, 06/06/2008 - 18:38

El library data original, tiene en su interior una lista que contiene un entero binario en system y una lista con los datos, matrices y ecuaciones que uno requiera, al ejecutar un programa que requiera el Library data o Datos de biblioteca, recupera el entero binario, lo compara con el numero de biblioteca que sera otro entero binario. y si son iguales, entonces toma la lista de datos y empieza a trabajar con ella.

Sea tu biblioteca la 546 que en binario sera #222h, y tu programa requiere una base de datos que solo tenga texto, matrices y ecuaciones, entonces tus datos de biblioteca sera:

Library Data
{x222h {"texto"[matrices]{Ecuaciones}} }

Numero de biblioteca. x222h, con un subprograma lo comparas si esos datos de biblioteca son iguales. si lo son, estamos seguros de que los datos estan correctos y no requerimos de otro programa que haga una comprobacion de datos correctos.
Caso contrario de que los numeros de biblioteca no son iguales, entonces hacemos que el programa no se ejecute, pues sus datos de biblioteca pueden ser matrices, numeros complejos y nombres de variable.

Yo al menos lo uso asi, como lo usa el MSOLVR al resolver una lista de ecuaciones guarda la misma estructura de los datos, con enteros binarios system, objetos unidad, la lista de ecuaciones, la lista de variables, los valores iniciales, etc.

para crear tu biblioteca de datos y tambien recuperarla, usa el codigo de Edwin, es muy bueno y se ajusta a esto.

entonces tus datos seran:

Library Data
{xnumentsystembinario {DATOS,DATOS,DATOS,....,DATOS} }

Top
Integró: 05/06/2003
Envíos: 343
MonedasHP: 186
Imagen de GkEnte
Calc: HP50 | ROM:pasé por aquí, pero ya lo pasado pasado.
 
#3
Mié, 02/07/2008 - 18:21

Hola alexis, no necesariamente la estructura de un Library Data es así, en realidad un LibDat puede contener cualquier cosa y lo que usted expuso es una de las miles formas de usarlo.

Le coloco unos ejemplos de LibDats:

Un carácter (@)
88B20C0000FB92004

Un programa SysRPLi
88B20F0000D9D20B2130

Una lista
88B20F000047A20B2130

Un Bint (1869Fh)
88B20F000011920F9681

Datos varios (3322h)
88B20900003322

Use H-> para convertir estas cadenas en Library Data.

Use ->A 10 + A-> para conseguir el objeto contenido en "estos" Library Data (excepto para el caso de Datos varios).

Saludos.
- Gaak -

n/a
Top
Integró: 08/07/2004
Envíos: 690
MonedasHP: 441
Imagen de alexis
AdictoHP+
Calc: HP50 | ROM:2.10-7, HP49G+ | ROM:2.15, Hp 35s | 2007, Hp 20b | 2008, Casio Fx-6300g | 1984
 
#4
Jue, 03/07/2008 - 17:31

Claro gaak, eso es como un camuflaje, es peligroso en algunos aspectos.

Jugando con el prologo, pero es similar en MLi existen los comandos DOARRY, DOAPLET, etc.

Pero descomponiendo un Library Data que genera la HP, se obtiene eso, y con el metodo que das, no es el mismo resultado.

de la misma manera se pueden hacer CODEs, Codigos system, el No usado Linked Array. que cambiando a los objetos, podemos obtener esos nuevos objetos, esa es la manera con lo que ocultas tus programas en System o User o con otras entradas, convirtiendolas en un CODE.

De esa manera, jugando con el prologo se puede hacer eso.

Top
Integró: 14/03/2007
Envíos: 51
MonedasHP: 0
Imagen de CesarV
 
#5
Sáb, 05/07/2008 - 18:20

Usando el OpenLD para abrir library data creados por MakeLD:
Quote:

***** Pone en la pila una lista con todos los nombres globales ( ID )
***** del directorio actual que contienen un LIBRARY DATA que sea lista y
***** tenga como primer elemento a # 4BF ( 1215 )
***** Llama a OpenLD1215

NULLNAME ArchLibData ( --> {} )
:: NULL{}
****** pone lista con los IDs del directorio actual que contengan library data
%26 DOTVARS%
****** si esa lista es vacía deja en la pila una lista vacía y sale
2DUP EQUALcase DROP
toLEN_DO ( {} {}' )
DUPINDEX@ NTHCOMPDROP ( {} {}' id )
DUPSAFE@ DROP ( {} {}' ID LibD )
OpenLD1215 ITE ( {} {}' ID flag )
:: ROT SWAP>HCOMP_ SWAP ;
DROP
LOOP ( {} {}' )
DROP ( {}' )
***** Orden alfabético
ROMPTR xSORT
;

**************************************************************************************
********** Si el libdata es una lista cuyo primer elemento es # 4BF ( 1215 ) pone TRUE
********** Si no lo es pone FALSE

NULLNAME OpenLD1215 ( libdata -> flag )
:: TOTEMPOB
CODE
A=DAT1 A
AD1EX
LC(5) =DOLIST
DAT1=C A
D1=D1+ 5
LC(5) =DOBINT
DAT1=C A
D1=A
GOVLNG =Loop
ENDCODE ( object )
******* si objeto no es lista lo borra, pone FALSE y sale ****************************
DUPTYPELIST? NOTcase DROPFALSE ( {} || FALSE )
********** si objeto es lista vacía la borra, pone FALSE y sale **********************
DUPNULLCOMP? case DROPFALSE ( {} || FALSE )
******* Si el primer elemento de lista es # 4BF pone TRUE. Si no lo es pone FALSE ****
CARCOMP ( obj_head )
# 4BF EQUAL ( flag )
;

ArchLibData funciona correctamente.

Pero si en el directorio actual hay LibDatGaaK la calculadora falla.
¿ Cómo puedo diferenciar los dos tipos de library data ?
Con el comando TYPE los dos tipos de library data arrojan 26.
**************************************************************************************
...
...
...

USUARIO BLOQUEADO!

Top
Integró: 05/06/2003
Envíos: 343
MonedasHP: 186
Imagen de GkEnte
Calc: HP50 | ROM:pasé por aquí, pero ya lo pasado pasado.
 
#6
Mar, 08/07/2008 - 12:02

Quote:

CesarV escribió:
... Pero si en el directorio actual hay LibDatGaaK la calculadora falla.
¿ Cómo puedo diferenciar los dos tipos de library data ?
Con el comando TYPE los dos tipos de library data arrojan 26...

Como ya mencioné antes los Library Data pueden contener diversos datos.
Usted puede solucionar esto comprobando que la sintaxis inicial para su tipo en cuestión sea que el primer dato sea un BINT y luego el valor #4BFh. Esta comprobación la veo en el comando OpenLD1215. No debería presentarse errores entonces...

- Gaak -

n/a
Top
Integró: 14/03/2007
Envíos: 51
MonedasHP: 0
Imagen de CesarV
 
#7
Dom, 06/07/2008 - 08:09

Parece que usando:

FLASHPTR 2 A5 BINT14 BINT15 SUB$

un library data creada por MakeLD nos da: "00"

y un LibDataGaak nos da otra cosa: "20" , "30" , ...

USUARIO BLOQUEADO!

Top
Integró: 20/05/2003
Envíos: 209
MonedasHP: 214
Imagen de Edwin
Calc: HP48G/GX
 
#8
Dom, 06/07/2008 - 14:54

Quote:

CesarV escribió:
Parece que usando:

FLASHPTR 2 A5 BINT14 BINT15 SUB$

un library data creada por MakeLD nos da: "00"

y un LibDataGaak nos da otra cosa: "20" , "30" , ...

Si los dos objetos creados son diferentes ya que MakeLD sobreescribe el prologo del primer elemento de la lista ( que es un BINT ) para colocar el tamaño del objeto de la Library Data. Por eso OpenLD antes de convertir el objeto a lista escribe nuevamente el prologo del primer elemento (=DOBINT)

La cuestión en la vida no es saber mucho, sino olvidarse de poco.
http://www.edwincordoba.com/

Top
Integró: 14/03/2007
Envíos: 51
MonedasHP: 0
Imagen de CesarV
 
#9
Mar, 08/07/2008 - 14:42

Si en la pila hay un LibDataGaak y se hace el

TOTEMPOB
CODE
...
ENDCODE

del OpenLD...., arroja una lista con PTRs xxxxx y otras cosas incomprensibles.

*************************************************************************************

Para evitarlo ahora reconozco los LibData creados por MakeLD1215 con el comando FLASHPTR 2 A5 ( x->H )
Quote:

***** Pone en la pila una lista con todos los nombres globales ( ID )
***** del directorio actual que contienen un LIBRARY DATA creado por MakeLD1215
***** Llama a DUPIsLibData1215?

NULLNAME ArchLibData ( --> {} )
:: NULL{}
****** pone lista con los IDs del directorio actual que contengan library data
%26 DOTVARS%
****** si esa lista es vacía deja en la pila una lista vacía y sale
2DUP EQUALcase DROP
toLEN_DO ( {} {}' )
DUPINDEX@ NTHCOMPDROP ( {} {}' id )
DUPIsLibData1215?( {} {}' ID flag )
ITE
:: ROT SWAP>HCOMP_ SWAP ;
DROP
LOOP ( {} {}' )
DROP ( {}' )
***** Orden alfabético
ROMPTR xSORT
;

**************************************************************************************
********** Si el libdata contenido en id es creado por MakeLD1215 agrega TRUE
********** Si no lo es agrega FALSE
********** se supone que id es una variable que si existe en el directorio actual

NULLNAME DUPIsLibData1215? ( id -> id flag )
:: DUPSAFE@ DROP ( id Libdata )
FLASHPTR 2 A5 ( id $ )
**** si el LibData es creado por MakeLD1215 pone TRUE
DUP BINT11 BINT15 SUB$ "FB400" EQUAL ( id $ flag )
**** si el LibData es un PTR xxxxx pone FALSE
SWAP BINT6 BINT10 SUB$ "A0000" EQUALNOT ( id flag flag' )
AND ( id flag )
;

Ahora ArchLibData funciona sin importar que tipo de LibData hay en el directorio actual.
el numero 1215 en hexadecimal es 4BF, por eso se escribió el "FB400"
***************************************************************************************
Las letras en rojo se cambian para su uso en otra biblioteca.

USUARIO BLOQUEADO!

Top
Integró: 05/06/2003
Envíos: 343
MonedasHP: 186
Imagen de GkEnte
Calc: HP50 | ROM:pasé por aquí, pero ya lo pasado pasado.
 
#10
Mié, 09/07/2008 - 02:17

Acabo de entender lo siguiente: Se requiere reconocer que el argumento en la pila es una Library Data y que sus datos sean de la forma { #4BF }.

Para ello necesitamos primero verificar si el objeto es una Library Data, para ello basta con DUPTYPEEXT0?_
( ob -> ob False )
( LD -> ob TRUE)

Luego de verificar que sea una LD, debemos verificar que sea del tipo { #4BF }, para ello recurrimos a ML, aunque también sería posible desde SysRPL o hasta desde el mismo UserRPL.

El código final quedaría de la forma.

::
  CK1 DUPTYPEEXT0?_
  ITE
    CODE
        GOSBVL  =SAVPTR
        A=DAT1  A
        D1=A
        D1=D1+  10
        A=0     W
        A=DAT1  15
        C=0     W
        LCHEX   004BF0291102A74
        ?C=A    W
        GOYES   End
End     GOVLNG  =GPPushT/FLp
    ENDCODE
    FALSE
;

- Gaak -

n/a
Top
Integró: 08/07/2004
Envíos: 690
MonedasHP: 441
Imagen de alexis
AdictoHP+
Calc: HP50 | ROM:2.10-7, HP49G+ | ROM:2.15, Hp 35s | 2007, Hp 20b | 2008, Casio Fx-6300g | 1984
 
#11
Jue, 10/07/2008 - 20:57

El library Data verdadero es el que crea la calculadora con el formato que le da, pero no es el unico, siempre tiene el numero entero system Binario que es el numero de la biblioteca.

Pero debido a las entradas, programas, y habilidades, se ha logrado no solo crear un library data o CODE con el prologo de los objetos, hasta que se llega a obtener un library data pero de otra manera, como las bibliotecas, que guardan en sus varaibles al objeto en cuestion.

Top

Twitter

Cargando...

CAPTCHA
Esta pregunta es para probar si usted es un visitante humano y así evitar el spam automatizado.
2 + 2 =
Solucione este simple problema matemático e ingrese el resultado. Por ejemplo: para 1+3, ingrese 4.