Es un simple ensamblador Saturn , escrito en lenguaje Perl.
Es un programa de lenguaje de maquina que fue inspirado en el interpretador de video juegos chip8 para el microprocesador RCA CDP1802 varios años atrás. Chip8 permite escribir video juegos simples basados en gráficos para la HP48 SX. Entre los juegos escritos hay clones de Breackout, PacMan y Pong, por nombrar algunos.
Chip48, Schip y Schip8 son dos nombres diferentes para una versión mejorada de chip8 especialmente diseñada para la HP48 SX. Las personas han escrito programas para compilar lenguaje de maquina Schip de tal forma que sea directamente usable por Schip en una HP48. Existen interpretes Schip disponibles para las series S y G.
GL (Game Language, lenguaje de juegos) es un lenguaje para los programadores que quieren casi la velocidad del assembler, pero que no quieren gastar mucho tiempo y esfuerzo en aprender todos los trucos de la programación de assembler en al HP48. GL tiene una sintaxis parecida a la del assembler, y hay un compilador para PC y otro para la HP48. Las instrucciones son poderosas, con sprites y gráficos basados en pixeles, sound, control de teclado, y mas. Hay 256 registros de 1-byte que pueden ser usados en pares como palabras de 2-bytes. Un programa GL puede tener un tamaño de hasta 64 Kb. Gl fue inspirado por Schip, pero es mucho mejor en todos los aspectos. Es utilizable para muchas aplicaciones, no solo juegos, que requieren alta velocidad. Por supuesto funciona en la HP48 S/SX y la G/GX. GL fue escrito por Erik Bryntse.
Lenguaje de maquina (Machine Language). Este es usado en referencia al lenguaje de programación assembler de la HP48.
Machine Language Development Library. Esta es una librería que te permite eliminar errores de programas de lenguaje de maquina con solo una HP48.
"Program Development Link". Este es un programa de DOS, vendido por Hewlett-Packard, que permite escribir y desarrollar aplicaciones para la HP48 desde tu clon IBM PC. Los programas son escritos en tu PC, transferidos a tu HP48, y probados desde tu PC (y no la HP48).
RPL es el nombre del lenguaje usado para programar las series de calculadoras HP48 y HP-28. RPL significa "Reverse Polish Lisp". Es interesante destacar que un articulo del HP Journal describió incorrectamente a RPL como "ROM-based Procedural Language".
SASS es un simple ensamblador Saturn, escrito en C/yacc (BSD Unix &Bison). Usa las mnemotecnia de Alonzo Gariepy.
"Saturn" es el nombre clave interno del procesador usado en las series HP48 y HP-28, y muchas otras calculadoras (casi todas las calculadoras HP desde las series HP18/28).
Este es el "Saturn Macro Assembler" (como "STAR" deriva de esto, no lose), un ensamblador que usa mayormente las mnemotecnias de Alonzo Gariepy. Esta escrito en C y corre en muchas maquinas diferentes (PCs, Amigas, Unix, etc.). STAR esta disponible vía ftp anónimo en ftp://hpcvbbs.cv.hp.com/dist/unix/star-1.04.4.tar.gz
Este es el nombre para el "sistema operativo/lenguaje" propio de la calculadora HP48 usado para programar el CPU. System RPL es un grupo de comandos extraordinarios que se suman a los user RPL; además de los comandos normales RPL accesibles para el usuario, system RPL incluye mucha funciones de bajo nivel. El lenguaje System RPL esta solo un paso mas arriba que el lenguaje de maquina.
HP ha lanzado una caja de herramientas para desarrollo de sistema (para el IBM PC), que contiene un compilador de system RPL, assembler y loader, completo con unos cientos de paginas de documentación. La caja de herramientas, aunque tiene derechos de autor, es copiable sin costo. Si puedes encontrar una BBS o archivo que los contenga, puedes bajar todos los archivos de system RPL y su respectiva documentación.
USRLIB es un programa que toma el contenido de un directorio de la HP48 y lo convierte en una librería. Corre actualmente bajo MSDOS.
Voyager es un "desensamblador interactivo" para clones IBM PC que desensambla RPL y código de maquina de la HP48 SX. Puedes bajar una copia de la RAM y ROM de tu HP48 SX a tu PC, y ejecutar Voyager. Usando Voyager, tu puedes ver el código desensamblado. Desafortunadamente (o afortunadamente), Voyager usa la mnemotecnia de HP, y no la de Alonzo Gariepy. Voyager esta disponible en la BBS de HP ftp://hpcvbbs.cv.hp.com/dist/, y en otras varias BBS (el foro de HP handhelds en Compuserve también tiene una copia). La ultima versión es la "1.07".
Si, Alex Ramos escribió un traductor GNU C para el procesador Saturn. Los binarios están disponibles para Linux y Windows 95/NT, y el código fuente esta disponible para compilarlo en otras plataformas.
Revisa http://www.cris.com/~ramos/hp48/hp48xgcc.htm para la ultima versión.
SysRPL es el lenguaje incorporado, especialmente diseñado para el procesador Saturn usado en la familia de las HP48. UserRPL es un "subconjunto" de SysRPL. La mayor razón de la diferencia en la velocidad es el hecho de que los comandos en UserRPL tienen incorporado revisión de argumentos y errores. En SysRPL, el programador es responsable de todas las revisiones de errores para evitar el borrado de la memoria.
Nota que System RPL es un lenguaje compilado y que por eso necesitas un programa como Jazz o los GNU-Tools para crearlos. Esto significa que no puedes editar o ver SysRPL directamente en tu HP48, a diferencia de UserRPL. Sin embargo ambos pueden ejecutarse de la misma forma.
El libro "An Introduction to HP48 System RPL and Assembly Language Programming" de Jim Donnelly provee 230 paginas de instrucciones paso a paso para nuevos programadores lleno de ejemplos. También viene con un disco de 3.5 pulgadas que contiene los ejemplos en código fuente y las herramientas de desarrollo de HP para DOS. Esta disponible a través de EduCalc por $25 U.S.
El numero ISBN es: 1-879828-06-5
También son útiles RPLMAN.DOC y SASM.DOC disponibles en el Goodies Disk 4. Ve el Apéndice E-5 para mas información. También puedes ver en la siguiente URL: http://titan.cs.uni-bonn.de/~wolfrum/hpbooks.html
Si, puedes usar USRLIB de las herramientas de desarrollo de HP para crear librerías en DOS, o puedes hacerlas directamente en tu HP con los utilitarios de hacker como D->LIB y L->DIR de Rick Grevelles que pueden crear y desarmar librerías de/hacia directorios. Las puedes encontrar en la librería HACK de Mika Heiskanen en http://www.hut.fi/~mheiskan/
Nota: Mientras este documente dice HP48 SX, también es valido para la GX.
Números de Identidad de Librerías para la HP48 SX Paul Swadener, Soporte de Diseñadores de Programas de HP. 03 Sep. 1993
La HP48 se confundirá si dos o mas librerías actualmente en la maquina tienen el mismo numero de identificación. Para ayudar los esfuerzos de los Diseñadores de Programas (ajenos a HP), HP mantiene una lista de los Números de Identificación de la HP48 ya asignados.
Mas abajo están las "reglas". El castigo por no seguir estas reglas es que tu librería puede no funcionar si otra librería en la maquina tiene el mismo numero.
Espero que esto ayude a aclarar como funcionan los números de librerías
El documentos mas importantes son parte de las herramientas de desarrollo "System RPL", una gama completa de herramientas para IBM PC no soportadas por HP Corvallis (los creadores de la HP48). Estas herramientas, que corren solo en maquinas DOS, contienen documentación sobre:
Las herramientas de desarrollo System RPL no soportadas y su documentación (de HP) están disponibles a los clientes sin cargo para ayudarlos en el desarrollo de aplicaciones de la HP48, sujetos a ciertos términos legales, que no son dados con las herramientas (son demasiado largos y detallados para ponerlos aquí).
Puedes conseguir una copia de alguna de las siguientes formas:
Jazz esta disponible en http://www.hut.fi/~mheiskan/
También están los GNU-Tools de Mario Mikocevic (Mozgy) que es un conjunto de programas que reemplazan las herramientas de desarrollo de HP, que no solamente corren en DOS, sino en sistemas Unix como Linux y Solaris. Es distribuido en código fuente y en sus binarios.
GNU-Tools están disponibles en:
Aquí hay una guía rápida para aprender System RPL. Ve otras preguntas para mayor información de como obtener los siguientes itemes.
Hay varios, la mayoría franceses. En EE.UU., un virus llamado "virus Michigan" apareció hace unos cuantos años. Hay un programa en el Goodies Disk 8 que revisa la existencia del Virus Michigan. Actualmente, los virus no representan una amenaza apreciable para las HP48.
Ve el Apéndice A-5 cerca del final de este archivo.
Texto original de Bill Wickes
Los manuales de la HP48 no comentan acerca de una característica muy poderosa que llamamos "Vectored ENTER", que te permite en efecto redefinir o omitir la parada de la línea de comando y tener una mirada a la pila etc. después de que la línea de comandos haya sido ejecutada.
Teclas que ejecutan un ENTER automático llevan a cabo un proceso de dos pasos:
Es una característica que recientemente ha dejado ser no documentada, que significa "Warm Start Log" (registro de reinicio en caliente, que es descrito en el apéndice de comandos en manuales nuevos de la G, así como es totalmente explicado en el AUR).
Tipea WSLOG con mayúsculas, y la calculadora mostrara la hora y la causa de las ultimas cuatro reinicio en caliente. Esta característica ayuda al soporte técnico de HP a reparar tu HP48 en caso de que se caiga.
0 - registro borrado por <ON> <SPC> después <ON>
1 - condición de baterías bajas, auto invocación de modo de sueño profundo para ahorrar baterías
2 - falla de hardware durante IR (fuera de tiempo)
3 - corrió a través de dirección 0
4 - hora del sistema corrupto
5 - despertó de modo de sueño profundo (alarma?)
6 - no usado
7 - palabra de prueba del CMOS en la RAM estaba corrupto
8 - anormalidad detectada en relación a la configuración de dispositivos
9 - lista de alarmas corrupta
A - problema con movimiento en RAM
B - modulo de tarjeta arrancado
C - hardware reset (reinicio)
D - error del manipulador de system RPL no encontrado en el flujo de ejecución
E - tabla de configuración corrupta
F - tarjeta de RAM de sistema arrancada
SYSEVALs son direcciones que apuntan directamente a un lugar de la ROM de la HP48. Muchos strings hexadecimales SYSEVAL son comandos System-RPL. Ya que no hay revisión de argumentos, es muy fácil borrar la memoria de tu HP48.
En el archivo SYMBOLS.GX, HP designa tres tipos de entradas. El primer tipo son las "soportadas". Esto significa que una entrada particular funcionara en TODAS las versiones de la HP48 y HP soporta el uso de esta entrada.
El segundo tipo de entrada son las "no soportadas". Esto significa que HP no soporta el uso de esta entrada y que no será la misma en todas las versiones de la HP48.
El tercer tipo son las "no soportadas-estaticas". Esta es una entrada que HP no soporta, pero es la misma para todas las versiones.
Para una lista completa de las entradas, ve http://www.hut.fi/~mheiskan/
En System RPL, distintos tipos de objetos HP son referidos por símbolos. estos símbolos son usados para construir diagramas de pila, que le dicen al usuario como usar los comandos System-RPL. Aquí hay alguno de los símbolos:
Símbolo Tipo Ejemplo
------- -------------------- -----------------
$ string "ABCDEFG"
id Global Name 'A'
arry Array [[ 1 2 ] [ 3 4 ]]
grob HP48 Graphics Object Graphic 131x64
# Binary Number <1h>
symb Symbolic Object 'A^2+B^2'
Todo lo que esta en el lado izquierdo de la flecha -> son la entrada. Eso se necesita que este en la pila antes de ejecutar el SYSEVAL. Los símbolos muestran que tipo de datos poner en la pila. Una vez que ejecutes el syseval (ve el próximo párrafo), la HP devolverá los datos indicados en el lado derecho de la flecha.
Hex Nombre Sys-RPL Categoria Diagrama de Pila
--- -------------- --------- ----------------
15777 NULLID Soportado ( -> '' )
30794 VERSTRING Soportado ( -> "HPHP48-?" )
3A328 MakeStdLabel Soportado ( $ -> grob )
3A3EC MakeDirLabel Soportado ( $ -> grob )
3A38A MakeBoxLabel Soportado ( $ -> grob )
3A44E MakeInvLabel Soportado ( $ -> grob )
3A1FC DispMenu.1 Soportado ( -> )
05F42 GARBAGE Soportado ( -> )
41F65 WaitForKey Soportado ( -> #KeyCode #Plane )
353AB SYMB>IDS No Soportado-Estatico ( symb -> list )
40D25 LockAlpha Soportado ( -> )
40D39 UnlockAlpha Soportado ( -> )
3AA0A 1A/LockA Soportado ( -> )
44C31 DoNewMatrix Soportado ( -> arry )
44FE7 DoOldMatrix Soportado ( arry -> arry' T/F )
1314D TOADISP Soportado ( -> )
13135 TOGDISP Soportado ( -> )
39531 ClrDA1IsStat Soportado ( -> )
130AC RECLAIMDISP Soportado ( -> )
4E347 TURNMENUON Soportado ( -> )
05B15 $>ID Soportado ( $ -> id )
05BE9 ID>$ Soportado ( id -> $ )
3A1E8 DispMenu Soportado ( -> )
39BAD DispStack No Soportado-Estatico ( -> )
Texto original de Joe Horn (Copiado de "libeval.doc" en GD 9)
La G/GX tiene un nuevo comando: LIBEVAL. Es como SYSEVAL, pero en vez de hablar de direcciones de memoria (que serian ambiguos gracias a la necesidad de switcheo de bancos en la G/GX), toma numeros XLIB. Es una "entrada de atras" para nosotros los hackers. Al contrario de el comando ELSYSEVAL en la tarjeta HP Solve Equations Library, que solo funcionaba para las librerias en la tarjeta, LIBEVAL funciona para cualquier libreria, incluyendo las escondidas en el sistema opertivo.
PRECAUCIONA: LIBEVAL, al igual que SYSEVAL, es tan poderosa como peligrosa. Si la usas con entrada(s) incorrectas y/o en el ambiente equivocado, puede borrar tu memoria.LIBEVAL toma un solo binary integer (entero binario) de la forma #LLLFFFh, donde LLL es la ID(hex) de la librería, y FFF es el numero de la función de tres dígitos (hex, con ceros precediéndolo si es necesario).
Por ejemplo el comando R->B es XLIB 2 9. Así que puedes hacer un R->B ejecutando #2009h LIBEVAL. Pruébalo: 10 #2009h LIBEVAL -> #Ah.
Usarlo para comandos con nombres es innecesario, pero la G/GX esta orientada a las XLIB (de nuevo, gracias a la necesidad de switcheo de bancos), y hay muchas características útiles e interesantes accesibles solo a través de LIBEVAL.
Un ejemplo claro es la inhabilidad de la G/GX para iniciar los nuevos "dialog boxes" dentro de programas. Supón que un programa necesite imprimir cosas; seria terriblemente agradable poder iniciar el I/O PRINT dialog box en la pantalla. La Guía de Usuario no ayuda en este aspecto, y de hecho parecería imposible de hacer. Pero #B4197 LIBEVAL es todo lo que se necesita! Inténtalo. Bacan,eh?
Ve el Apéndice B-3 para algunos ejemplos de LIBEVALs para la GX.
Nota: recibí dos buenas respuestas a esta pregunta, y cada una apunta a un tipo de usuario distinto, así que las incluiré a ambas.
Primero, agrega pixeles al borde derecho para hacer la dimensión horizontal un múltiplo de 8, entonces separa el objeto horizontalmente en grupos de 4 pixeles. Supón, por ejemplo, que quieres hacer esto en un GROB de 22x8:
---------****---------
--------**--**--------
-------**----**-------
********------********
********------********
-------**----**-------
--------**--**--------
---------****---------
Deberías separarlo de esta forma:
---- ---- -*** *--- ---- ----
---- ---- **-- **-- ---- ----
---- ---* *--- -**- ---- ----
**** **** ---- --** **** **--
**** **** ---- --** **** **--
---- ---* *--- -**- ---- ----
---- ---- **-- **-- ---- ----
---- ---- -*** *--- ---- ----
Nota, que he agregado dos columnas de pixeles para hacerla de 24x8. Ahora, cada grupo de cuatro puede ser representado por un dígito hexadecimal.
---- 0 --*- 4 ---* 8 --** C
*--- 1 *-*- 5 *--* 9 *-** D
-*-- 2 -**- 6 -*-* A -*** E
**-- 3 ***- 7 **-* B **** F
Ahora reemplaza cada grupo de cuatro pixeles con el dígito hexadecimal correspondiente: 00E100 003300 081600 FF0CF3 FF0CF3 081600 003300 00E100.
Así la grob final es:
GROB 22 8 00E100003300081600FF0CF3FF0CF308160000330000E100
02B1E pr HP:DOGROB
02B1E @ Graphic prologue (/U GROB)
Vaciado hexadecimal (hex dump) de un objeto grob.. (recuerda que cada campo de 5 nib esta en orden inverso)
GROB <ancho (dec)> <altura (dec)> < cuerpo >
El cuerpo se ve igual a como lo veríamos en un vaciado hexadecimal en el PC o en el editor incorporado de la HP48. Solo recuerda leer el nibble menor antes en el vaciado hexadecimal.
Por restricciones de hardware, el numero requerido para representar una línea horizontal debe ser par (alineado en byte). Entonces usa este método para calcular el numero de nibs en una línea.. (ejemplo en pascal)
nibs := width div 4;
if nibs mod 4 <> 0 then nibs := nibs + 1;
if odd(nibs) then nibs := nibs + 1;
Después para encontrar el # de nibs en el cuerpo entero, multiplícalo por la altura. Recuerda, el campo del largo debe ser el largo total del cuerpo + 15!
Por ejemplo, un grob de ancho 131 requiere 34 nibs para una línea horizontal, donde 5 de los bits no son usados. El primer nib en la segunda línea empieza en el nib 35 de este grob, etc... Si el grob es de 64 líneas, entonces el cuerpo tiene 2176 nibs. Agrégale 5 nibs por el prologo, 5 por el campo del largo, 5 por la altura y 5 por el ancho. El tamaño total del objeto (en la HP) es de 2196 nibs, o 1098 bytes. El campo del largo debería contener 2196 menos 5 del prologo =2191 (0088FF hex)
Nota que en cada nib, el bit que esta mas a la derecha es el pixel que esta mas a la izquierda en la pantalla. Este es casi siempre el caso de la memoria gráfica.
Nota: este libro solo esta disponible en ingles.
Texto original de Jarno Peschier <jpeschie@cs.ruu.nl>
En este texto voy a tratar de responder a un numero de preguntas frecuentes acerca del Advanced User's Reference Manual de la serie HP48 G. En el resto de este texto voy a usar la abreviatura común AUR cuando me refiera a este libro.
Las respuestas que voy a tratar de responder son:
El AUR es solo lo que su nombre dice de el: es un manual de referencia para la serie HP48 G. Tiene la misma apariencia externa que la Guía del Usuario de la Serie HP48 G (el manual que venia con tu HP48 G o HP48 GX cuando la compraste), exeptuando que es mucho mas grueso (apenas por debajo de los 4 cm). El AUR contiene cerca de 650 paginas de información útil sobre tu calculadora.
El AUR contiene información acerca de la programación en UserRPL, muchos ejemplos de programación, una referencia completa de todos los comandos (UserRPL) que la serie G reconoce y listas de referencia de todas las ecuaciones, errores y mensajes de estado, unidades, etc... Obviamente tiene un índice muy extenso en la parte posterior del libro.
Contiene: Understanding Programming, Entering and Executing Programs, Viewing and Editing Programs, Creating Programs on a Computer, Using Local Variables, Using Tests and Conditional Structures, Using Loop Structures, Using Flags, Using Subroutines, Single-Stepping through a Program, Trapping Errors, Input, Stopping a Program for Keystroke Input, Output, Using Menus with Programs, Turning Off the HP48 from a Program.
Contiene: Fibonacci Numbers, Displaying a Binary Integer, Median of Statistics Data, Expanding and Collecting Completely, Minimum and Maximum Array Elements, Applying a Program to an Array, Converting Between Number Bases, Verifying Program Arguments, Converting Procedures from Algebraic to RPN, Bessel Functions, Animation of Successive Taylor's Polynomials, Programmatic Use of Statistics and Plotting, Trace Mode, Inverse-Function Solver, Animating a Graphical Image.
Este capitulo contiene una entrasa para cada comando (exepto para RULES) desde ABS hasta ZVOL y de + hasta ->. Cada entrada contiene:
Este capitulo contiene una entrada para cada sección en la Librería de Ecuaciones (ELIB). Cada entrada contiene: una tabla de las variables usadas y después una entrada para cada grupo de ecuaciones con alguna información adicional acerca del grupo de ecuaciones, el dibujo que la acompaña (si hay alguno), todas las ecuaciones y uno o mas grupos de números y soluciones de ejemplo. El final del capitulo tiene una lista de referencia de la cual todas las ecuaciones fueron sacadas.
Este capitulo contiene dos tablas con todos los mensajes posibles. La primera los tiene ordenados alfabéticamente y muestra el mensaje, el significado y el numero ERRN en formato hexadecimal. La segunda los tiene ordenados por los números ERRN (y por esto en categorías) y solo contiene el numero hexadecimal y el propio mensaje.
Este capitulo contiene una tabla con todas las unidades que conoce la serie HP48 G. Contiene la unidad (el nombre que usas en la calculadora como el nombre completo) y el valor que representa en unidades SI.
Este capitulo contiene una tabla con todas las banderas de sistema de la serie HP48 G. La tabla contiene el numero seguido de una descripción de su uso y los resultados que obtendrás cuando la bandera esta arriba o abajo.
Este capitulo contiene una tabla con todas las variables reservadas de la serie HP48 G (ALRMDAT, CST, "der"-nombres, EQ, EXPR, IOPAR, MHpar, Mpar, n1/n2/..., Nmines, PPAR, PRTPAR, s1/s2/..., VPAR, ZPAR, SigmaDAT y SigmaPAR) con información completa acerca de para que sirven y todos los posibles parámetros que pueden ser puestos en ellas.
Este capitulo enumera todos los comandos que son nuevos en la serie HP48 G, con una corta descripción de lo que hacen los comandos. Una lista como esta puede ser encontrada también en alguna parte de las FAQ de la HP48.
Contiene: Tamaño de los objetos, reglas de simplificación matemática usadas en la HP48, patrón usado por la HP48 para la diferenciación simbólica, reglas de expansión del EquationWriter, referencias usadas como fuente de las constantes y ecuaciones en la HP48 (las que no están en la Equation Library).
Este capitulo contiene información de procesamiento paralelo que hace ver a UserRPL aun mas parecido a un lenguaje de programación funcional permitiendo (casi siempre) que todos los comandos funcionen en listas de parámetros también (i.e. agregando capacidades de mapeo a todos los comandos internos).
Si, lo necesitas. Según mi humilde opinión el AUR es solo "El Manual, Parte II" y cada dueño de una HP48 G o HP48 GX debería tenerlo, especialmente si tu estas o vas a programar en UserRPL por alguna razón. Un montón de preguntas frecuentes que aparecen en comp.sys.hp48 son preguntas que están hechas para que el AUR las conteste.
Ya que estas leyendo este FAQ, probablemente tienes algún don: tu no eres un usuario de HP48 promedio. El grupo de "usuarios promedio" probablemente consista enteramente de personas que nunca van a programar su HP48 en ninguna forma ("Impresionante, también puede hacer eso!"). En ese caso, ellos no le darán ni un vistazo al AUR, y ya que es un libro bien grueso, seria perdida de dinero, arboles, al medio ambiente, costos de transporte, etc... para suministrar el AUR en cada caja. Probablemente esta es la razón de porque HP lo hizo un accesorio extra para esas personas que "de verdad lo necesitan". Esa es mi opinión...
Debería ser posible comprarlo (o encargarlo) en el mismo local donde compraste tu calculadora. El numero de inventario HP es 00048-90136. El libro parece que no tiene un ISBN; es un periférico HP, no un libro.
Si, exactamente uno. El ejemplo del comando SYSEVAL te dice que #30794h SYSEVAL te da la versión de tu HP48. Mi HP48 GX rev. P da "HPHP48-P".
No, No dice nada.
Basado en una publicación en HPCVBBS de Cary McCallister. Revisado por Joe Horn. Re-formateado por Andre Schoorl.
5: "titulo"
4: { campos }
3: <formato>
2: { valores_reinicio }
1: { valores_iniciales }
Bien: 2: { nuevos_valores }
1: 1
o : 1: 0
INFORM crea input forms a medida de pantalla completa, similares a las de las aplicaciones incorporadas.
Es mostrado en tipo de letra 1 (pequeña) en el borde superior de la pantalla, centrado. Pude contener cualquier numero de caracteres, incluyendo 0, pero, a lo mas 31 caracteres serán mostrados. Strings mas largos que 31 caracteres serán truncados a 31 caracteres y mostrados con un elipsis arrastrado. Caracteres de línea nueva serán mostrados como rectángulos.
Es una lista de la forma { campo1 campo2 ... campon } donde cada campo es de una de estas formas:
1. "etiqueta"
2. { "etiqueta" "ayuda" }
3. { "etiqueta" "ayuda" tipo1 tipo2 ... tipon }
4. { }
La "etiqueta" es un string con texto arbitrario de 0 a 26 caracteres de largo (string mas largos serán truncados a 25 caracteres con un elipsis arrastrado). La "ayuda" es mostrada inmediatamente arriba del área de menú como una sugerencia útil para el usuario. La especificación de tipo de objeto describe los tipos permitidos en el campo (uno o mas), en la forma que el comando TYPE las devuelve. Si no es especificado, el texto de ayuda por defecto es en blanco y el campo aceptara todos los tipos de objeto. Si la especificación de campo es una lista vacía, ningún campo es producido; en vez de eso, el campo inmediatamente a la izquierda (si hay alguno) es expandido para rellenar el espacio de campo omitido. Esto permite personalizar aun mas la forma de esquema; por ejemplo, tener dos campos en una fila y tres campos en la siguiente.
Tal vez alguno de los siguientes objetos:
1. { }
2. columnas
3. { columnas }
4. { columnas anchos }
Donde <columnas> es el numero de columnas en las que la pantalla estará dividida, si <columnas> es 2 y hay dos campos, ellos serán mostrados lado a lado en vez de uno encima del otro. <anchos> es el espacio entre la esquina izquierda de cada titulo y su campo; esto hace posible el alineamiento vertical de los campos. Títulos mas largos que ese espacio harán que el espacio se repita automáticamente. Si no es especificado, el numero de columnas por defecto es uno y el espacio entre titulo y campo por defecto es tres.
Una lista de valores uno por campo de entrada que reemplazaran los valores de todos los campos cuando la tecla {RESET} sea presionada y "Reset all" (reinicie todo) sea elegido. Esta lista debe estar vacía o tener exactamente un item por campo correspondiendo a la lista { campos } de mas arriba. Si esta vacía entonces todos los campos son estimados inespecificados (i.e., en blanco). Cada valor de reinicio debe cuadrar con el tipo requerido por la forma de campo. Los campos pueden ser marcados como no especificados usando NOVAL como el valor de reinicio.
es una lista de valores, uno por campo de entrada, que especifican los valores de partida de todos los campos cuando el comando INFORM es invocado. Esta lista de be estar vacía o tener exactamente un item por campo correspondiendo a la lista { campos } de mas arriba. Si esta vacía, entonces todos los campos son estimados como no especificados (i.e., en blanco). Cada valor inicial debe cuadrar con el tipo requerido en la forma de campo. Los campos elegidos pueden ser marcados como no especificados usando NOVAL como el valor inicial.
INFORM devuelve los nuevos valores de campo { valores_nuevos} como una lista en el nivel 2 y un nuevo real 1 en el nivel 2 si el usuario completo la input form presionando {OK} o
INFORM devuelve el numero real 1 si el usuario termina el input form presionando {CANCL} o
NOVAL es básicamente un comando (un nombre XLIB) que no hace nada cuando es evaluado. Puede, sin embargo, ser comparado vía ==, SAME y POS.
3: "titulo"
2: { itemes }
1: <numero_item_inicial>
Bien: 2: { item_elegido }
1: 1
o: 1: 0
CHOOSE crea una "choose-box" definida por el usuario: un rectángulo que contiene itemes, de los cuales el usuario puede elegir uno.
CHOOSE muestra un choose box estándar (normal, no maximizado; elección única, no elección múltiple) con una línea de titulo opcional.
Si hay alguno, es mostrado en tipo de letra pequeña en el borde superior del rectángulo, centrado. Puede contener cualquier numero de caracteres, incluyendo 0, pero a lo mas, 22 caracteres serán mostrados. Strings mas largos que 22 caracteres serán truncados a 21 caracteres y mostrados con un elipsis arrastrado. Los caracteres de nueva línea serán mostrados como rectángulos. Si hay mas de 4 itemes, haciendo que las flechas de desplazamiento sean mostradas, el máximo de caracteres del titulo será reducido a 21. El texto del titulo es mostrado en el área de titulo en tipo de letra 1 (el tipo de letra del menú). Si el string del titulo es vacío, no se creara área de titulo en el choose box, y todo el rectángulo será dispuesto para los itemes.
Una lista de objetos arbitrarios. Cada item ocupa una línea del choose box y es mostrado en la misma forma de la línea de comando. Solo los primeros 14 caracteres del objeto a mostrar serán exhibidas (13 si las flechas de desplazamiento están presentes). Si un item contiene mas de 14 (13) caracteres, será truncado a 13 (12) y el carácter final será reemplazado por un elipsis. Si cada item es una lista de exactamente dos objetos, el primer objeto será mostrado y el segundo devuelto si el item es elegido. Si el numero de itemes excede loa 4 con titulo y 5 sin, las flechas de desplazamiento serán mostradas, y si al mover el selecionador destacado pasa el borde superior o inferior del choose box, este se desplazara por los itemes no exhibidos.
Especifica el campo que inicialmente estará destacado cuando recién se inicie el choose box (casi siempre 1). Un valor de 0 indica que ningún campo estará destacado y que la tecla {CANCL} será omitida del menú, haciendo que el choose box actúe como una imagen informativa sin selección del usuario..
CHOOSE devuelve el item elegido (o el segundo objeto en una lista de itemes de dos objetos) y el numero real 1 si el usuario termina el choose box presionando {OK} o
1: "string_de_mensaje"
Ninguna
MSGBOX crea una simple ventana de mensaje sobre la pantalla actual, con sombra en 3D para reconocerla fácilmente, y que contiene cualquier texto arbitrario.
Es un string de caracteres. El texto es mostrado en tipo de letra 2 (tamaño mediano), encuadrado en la izquierda, con un largo de línea máximo de 15 caracteres. Líneas mas largas se rompen en líneas múltiples automáticamente, entre palabras si es posible, con un máximo de 5 líneas. Los caracteres de línea nueva pueden ser incluidos para forzar el quiebre de línea. El numero mínimo de líneas es 2, por eso los mensajes de una sola línea tendrán una línea en blanco en el borde inferior de la ventana.
Ninguno. Se sale de MSGBOX presionando
Para ejemplos de INFORM, CHOOSEy MSGBOOX ve el Apéndice B-2.
Texto original de Matt Willis
No puedes hacer eso directamente en UserRPL. Si lo puedes hacer en System RPL (ve el libro de Jim Donnelly para mas detalles), o puedes usar la librería que esta en ftp://ftp.cis.com/pub/hp48g/uploads/infm2v1.zip
Me he dado cuenta que la versión System RPL de DoInputForm era lo suficiente no amigable como para usarla casualmente, por eso escribí una librería simple que te permite usar check boxes y choose list en User RPL.
Todo lo que hace es detener la ejecución de INFORM justo antes de DoInputForm, después busca en la pila y cambia los tipos de objetos a objetos check y choose. Entonces reinicia el comando INFORM. Al final, ordena los TRUE/FALSE a 1/0 etc...
Ejemplo de sintaxis:
"Test" {
"A" "B" "C" } 1 {} { :CHECK: 1 :CHOOSE: { 1 2 3 } NOVAL }
IF INFORM2 THEN
...inserta código aquí...
END
Texto original de John Meyers
INPUT te permite mostrar un mensaje y después editar un string usando el editor de la línea de comando; el string editado es el resultado.
Argumentos:
"mensaje"
El mensaje es mostrado en "letra mediana" en la parte superior del "área de visualización de la pila" (la pila no es visible durante el comando INPUT). El mensaje puede ser un string vacío, o puede contener caracteres de línea nueva, para un mensaje de líneas múltiples.
El formato mas general es una lista no vacía que contiene hasta tres especificaciones opcionales, que pueden aparecer en cualquier orden:
{ "string" { fila columna } modo(s) }
"String" es el texto inicial que aparecerá en al línea de comando; puede ser un string vacío, o puede contener caracteres de línea nueva para texto de varias líneas. Si no especificas ninguno de los argumentos opcionales, puedes omitir la lista en si y suministrar solo el string en el nivel 1. Si el string es omitido de la lista de argumento, por defecto es un string vacío.
Modo(s) son cero o mas de los siguientes nombres reservados:
Puedes seleccionar este modo si estas invitando al usuario a ingresar texto; no debes tipear comillas al rededor del texto ingresado, porque INPUT automáticamente devuelve como un string todos los caracteres que fueron tipeados en la línea de edición.
Por ejemplo, si estas esperando dos valores numéricos como entrada, y si tu ingresas 123 456, INPUT devuelve "123 456"; si entonces ejecutas OBJ-> en ese resultado, finalmente recibirás 123 y 456 como valores separados en la pila.
Fila y columna especificadas opcionalmente donde el cursor aparecerá inicialmente (por defecto es al final del string completo), y si el cursor comenzara en el modo "insertar" o "sustituir" (por defecto es insertar).
El numero de fila comienza en 1 para la primera fila, el numero de columna comienza en 1 para el primer carácter en la fila. Fila cero significa la ultima fila; columna cero significa el final de la fila.
En vez de { fila columna } puedes simplemente contar la posición de los caracteres del string (argumento), sustituyendo solo un numero en vez de una lista de dos números.
Para hacer que el cursor este en modo de sustitución en vez del modo insertar, el primer numero especificando la posición del cursor debe hacerse negativa.
Si el usuario presiona
Ejemplos del uso en un programa:
"Enter A, B, C" {
":A:
:B:
:C:" { 1 0 } V } INPUT
Nota: Pon caracteres de línea nueva entre las tres líneas del string inicial.
Cuando es ejecutado, la pantalla muestra:
Enter A, B, C
:A:(cursor appears here)
:B:
:C:
Si presionas ahora 1 FlechaAbajo 2 FlechaAbajo 3
":A:1
:B:2
:C:3"
Si después aplicas OBJ-> en este string, tu obtienes (en niveles separados de la pila):
:A: 1
:B: 2
:C: 3
Las "etiquetas" opcionales no interfieren con el uso de valores numéricos en funciones, o al guardarlos (la etiquetas son sacadas automáticamente en cada caso).
Otro ejemplo:
"Type a new notecard" { Alpha-symbol } INPUT
Este permite al usuario tipear cualquier texto de forma libre, el cual es devuelto como string después de presionar
El ejemplo mas simple:
"" "" INPUT (no message, empty initial command line)
Problemas potenciales con INPUT (si OBJ-> va a ser usado posteriormente para obtener los valores ingresados):
Para aplicaciones que esperan el ingreso de valores (no texto), El comando INFORM de la HP48G/GX es mas inmune a estos problemas y realiza un control mas profundo sobre lo que es ingresado, además de proveer una forma de visualización mas bonita, un casillero para cada campo de ingreso, etc. La sintaxis de INFORM es detallado en algún otro lugar de este FAQ.