Library data?
- Inicie sesión o regístrese para enviar comentarios
¿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
- Inicie sesión o regístrese para enviar comentarios
Otros temas de interes
- como hacer una barra de menus ??
- Nueva Calculadora HP?? HP 39gII spécification
- ROM 2.10-7 Spreadsheet & Geometry manuales y biblioteca.
- Ayuda con Raices
- [PROYECTOS] EoEiProEngLib, MathEngProLib, EquatnEngProLib & and HP50GNKLib
- ayuda con integral exponencial
- programa tipo excell que permita introducir formulas en las tablas
- como aprender tantos comandos en SYSTEM?
- [PROYECTO] Universal Font Library for HP50G CAS para recuperar "Hello World" 3 ->GROB de la HP48GX (1994)

Acá en este foro si usas el buscador hay bastante informacion de eso.
- Inicie sesión o regístrese para enviar comentarios

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} }
- Inicie sesión o regístrese para enviar comentarios
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 -
- Inicie sesión o regístrese para enviar comentarios

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.
- Inicie sesión o regístrese para enviar comentarios
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.
**************************************************************************************
...
...
...
- Inicie sesión o regístrese para enviar comentarios
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 -
- Inicie sesión o regístrese para enviar comentarios
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" , ...
- Inicie sesión o regístrese para enviar comentarios
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)
- Inicie sesión o regístrese para enviar comentarios
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.
- Inicie sesión o regístrese para enviar comentarios
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 -
- Inicie sesión o regístrese para enviar comentarios

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.
- Inicie sesión o regístrese para enviar comentarios










