programación en systemrpl

138
HP 49G MANUAL DE PROGRAMACION EN SYSTEM RPL

Upload: nilo-m-contreras-coronado

Post on 18-Oct-2015

26 views

Category:

Documents


1 download

TRANSCRIPT

  • 5/28/2018 Programacin en SystemRpl

    1/138

    HP 49G

    MANUAL DE PROGRAMACION ENSYSTEM RPL

  • 5/28/2018 Programacin en SystemRpl

    2/138

    1

    INDICE

    1 - INTRODUCCIN .......2 - MI PRIMER PROGRAMA EN SYSTEM ...3 - ALGUNAS IGUALDADES DE LOS COMANDOS DE USER .....4 - TIPOS DE OBJETOS ........

    5 - CONVERSIN DE OBJETOS .............6 - ALGUNOS TIPOS DE OBJETOS......7 - FUNCIONES DE COMPARACIN O TEST .....8 - FUNCIONES LGICAS ..

    8.1 - OTROS COMANDOS DE TESTS .9 -VERIFICAR EL TIPO DE ARGUMENTO.

    9.1 - NUMERO DE ARGUMENTOS .....10 - INDICADORES DE SISTEMA .....11 - OPERACIONES DE LA PILA ....12 - UTILIDADES ADICIONALES DE MEMORIA ...13 - COMANDOS DEL SISTEMA ....13 - FUNCIONES DE NUMEROS COMPLEJOS ...14 - NUMEROS REALES .....

    14.1 - FUNCIONES DE NUMEROS REALES ...15 - MANIPULACION DE ENTEROS BINARIOS ..16 - ENTRADA DE DATOS ......17 - InputLine .....18 - COMANDOS DE PROGRAMACION .

    18.1 - PALABRAS PROPORCIONADAS AL BUCLE DO ......18.2 - BUCLES INDEFINIDOS .........

    19 - VARIABLES TEMPORALES ....20 - VARIABLES Y DIRECTORIOS .......

    20.1 - OTRAS PALABRAS RELACIONADAS .....20.2 - PALABRAS PARA LA MANIPULACIN DE DIRECTORIOS ....20.3 - EL DIRECTORIO OCULTO ........

    21- OBJETOS DE UNIDADES ......

    22 - OBJETOS ETIQUETADOS ......22 - HERRAMIENTAS DE ERROR .....23 - LA PANTALLA ...

    23.1 - GRAFICOS Y PANTALLA ..........23.2 - COMO DESPLAZAR UN GROB .........

    24 - MENUS ......25 - BACKUPS ....26 - DoImputForm . .....27 - COMANDOS QUE OPERAN EN UN PROGRAMA ....28 - MENSAJES TEMPORALES ...29 - UBICACION DE LAS TECLAS ..... ..

    29.1 - ESPERAR UNA TECLA ......30 - EL BUCLE EXTERNO PARAMETRIZADO.. ...

    30.1 UTILIDADES DEL BUCLE EXTERNO PARAMETRIZADO ....30.2 EXAMEN DEL BUCLE EXTERNO PARAMETRIZADO ........30.3 CONTROLAR ERRORES CON LAS UTILIDADES .......30.4 ASIGNACIONES DE TECLAS FISICAS ......30.5 ASIGNACIONES DE TECLAS DE MENS.............30.6 EVITAR ENTORNOS SUSPENDIDOS ...

    31 - FILER49 ...32 - EDITOR DE LA HP49G ..33 - HP49 BROWSER .34 - HP48 BROWSER .35 - DEFINE INCLOB INCLUDE ...EJEMPLOS SYSTEM RPL

    2345

    8101112131515171823242931

    31373840434448505456575960

    64656768767780818689909192939495969798

    101105115121131133

  • 5/28/2018 Programacin en SystemRpl

    3/138

    2

    SYST M RPLPARA LA HP49G

    1- INTRODUCCION

    El programar en System resulta mas peligroso pero a la ves mas rpido, mas peligroso por que si seintroduce un dato incorrecto puede ocasionar la perdida de la memoria ya que este lenguaje noverifica los argumentos.

    Por ejemplo si en UserRPL nosotros ejecutamos+ysi no hay ningn argumento en la pila estemandara un mensaje de error, pero en SysRPL si ejecutamos el mismo programa y si no existe ningnargumento en la pila este mandara un Try To Recovery Memory? y en algunos casos ya no sepodr recuperar la memoria ocasionando la perdida de lo que tengamos grabado en el puerto 0 de laHP49G.

    Para hacer un programa en SysRPL la sintaxis cambia es decir para iniciar un programa en Usernosotros colocamos contenido del programa en user en cambio para hacer un programaen System nosotros tenemos que colocar lo siguiente:

    ::contenido del programa en system

    ;

    NOTA:Todo esto dentro de comillas. en system se deben respetar las maysculas y minsculas de lo contrariomandara error al momento de ensamblar el cdigo de fuente.

    Existen varios programas para ensamblar como el JAZZ que requiere tambin la librera HPTABBS, otambin se puede ensamblar adjuntado la librera 256 y 257 que viene incorporada en la HP49G. escribiendo

    lo siguiente {256 257} ATTACH y teniendo instalada la libreraEXTABLEque viene con la ROM de la HP delo contrario mandara error al compilarUn excelente editor para hacer nuestros programas en System es el

    EMACS y de preferencia se deber tener instalado con la librera SDIAG, la librera Emacs tambin tepermite descompilar programas en System para poder ver su cdigo de fuente y tambin tiene ayuda de algunos

    comandos de System. Algunos ensambladores requieren que el cdigo termine con un arroba por ejemplo:

    ::contenido del programa en system

    :@

    Una de las ventajas del system es que tambin se pueden usar comandos de USERanteponiendo una x,

    Por ejemplo si queremos el comando CHOOSE en system seria xCHOOSE.La xindica que se trata de un comando en USER.

  • 5/28/2018 Programacin en SystemRpl

    4/138

    3

    2- MI PRIMER PROGRAMA EN SYSTEM

    A continuacin veremos un ejemplo paso a paso de cmo hacer nuestro primer programa en System elejemplo se realizara usando el compilador interno de la HP49 para esto tenemos que escribir losiguiente {256 257} ATTACH y presionamosENTER.

    Tambin debemos tener instalada la librera EXTABLE que viene con la ROM de la HP49. Parapoder compilar tendremos que tener la casilla 92activada como se muestra en la figura esto se activaentrando a MODEy despus a FLAGS.

    Copiamos el siguiente programa en la HP49G, respetando maysculas y minsculas. Para empezar aescribir primero debemos abrir comillas y despus copiar el texto que se muestra a continuacin.

    ::CK2&Di spatch# 11

    ::%+SUMA TERMI NADA

    Fl ashMsg;

    ;@

    Nota:Al escribir un programa en system primero deberemos abrir comillas y despus escribir el programacomo se muestra en la figura.

    Despus nos vamos a libreras y debe figurar MASD. (ROM 1.18) (Ver introduccin para ver como adjuntar estalibrera)Como se muestra en la figura de arriba y presionamos F1(MASD) y deber aparecer lo que semuestra en la figura ( Si se tiene desactivada la casilla 85aparecer como en la fig. de la derecha.).

    Nota:Si se tiene una ROM superior a la 1.18 como la 1.19-6 Se deber escribirASM.y esto ejecutaraMASD.

    Despus se deber grabar con un nombre por ejemplo SUMA y presionamos STOy listo tenemosnuestro primer programa en SystemRPL.

  • 5/28/2018 Programacin en SystemRpl

    5/138

    4

    A continuacin veremos para que sirve cada comando de este ejemplo:

    :: Inicia SystemCK2&Di spatch Verificaque existan dos argumentos y despacha el tipo de objetos.# 11 Indica que el objeto del nivel 1 y 2 sean nmeros reales.

    :: Inicia una subrrutina%+ Suma dos nmeros reales.SUMA TERMI NADA Escribe el mensaje SUMA TERMINADAFl ashMsg Muestra el mensaje; Termina la subrrutina

    ; Termina el System@ cdigo para ensamblar con el MASD ( Si se usa JAZZ no es necesario el

    arroba y antes de colocar las comillas se deber colocar el signo $ )

    3- ALGUNAS IGUALDADES DE LOS COMANDOS DE USER

    A continuacin se vern algunas igualdades de los comandos usados en User y su equivalente enSystem:

    ERASE = DOERASESWAP = SWAPSTR = DO>STRSCROLL = ViewObjectSAME = EQUALDUP = DUPVARS = DOVARSPATH = PATHDIR

    UPDIR = UPDIRHOME = HOMEDIRCRDIR = CREATEDIRPGDIR = XEQPGDIRORDER = XEQORDERSTO = ?STO_HEREDEPTH = DEPTHDUP = DUPDUP = dupNDUPN = NDUPNDROP = DROPLCD= DOLCD>

    LCD= HARDBUFFLIST= INNERCOMP

  • 5/28/2018 Programacin en SystemRpl

    6/138

    5

    4- TIPOS DE OBJETOS

    DESCRIPCION TIPO EJEMPLO SIGNO

    (Entero Binario)

    Cualquier Objeto any 0

    Nmero Real real 1 %

    Nmero Complejo cmp 2 C%

    Cadena de Caracteres(String)

    str 3 $

    FormacinVector o Matriz

    arry 4

    Lista

    list 5

    Nombre Global( ID )

    idnt 6

    Nombre Local( Variable Temporal )

    lam 7

    Programa o Secundario seco 8

    Operacin Algebraica symb 9

    Clase Simblico

    Cualquiera de los Tipos:

    6 , 7, 9. sym 10 #A

  • 5/28/2018 Programacin en SystemRpl

    7/138

    6

    Cadena HXS o NmeroBinario

    hxs 11 #B #

    Objeto Grafico grob 12 #C

    Objeto Etiquetado TAGGED 13 #D

    Objeto Unidad unitob 14 #E

    Puntero ROM(Nombre XLIB)

    rompointer

    15 #0F

    Entero Binario 31 #1F

    Directorio 47 #2F

    Real Extendido 63 #3F %%

    Carcter( CHR )

    111 #6F

    Objeto Cdigo

    127 #7F

    Librera

    #8F

    Backup #9F

    Datos de Librera #AF

  • 5/28/2018 Programacin en SystemRpl

    8/138

    7

    Al escribir un programa en System el nmero Entero Binario se puede representar escribiendo solamente elnmero y al compilarlo este se convertir en Entero Binario, esto se puede ver en el siguiente ejemplo quedespus de compilarlo lo volvemos a descompilar.

    Los nmeros reales en system se representan anteponiendo el signo %.

    Los nmeros enteros en system se representan anteponiendo la palabra ZINT.

    Los nmero reales extendidos se representan anteponiendo el signo %%.

    Los nmero complejos se representan anteponiendo el signo C%.

    Los nombres globales se representan anteponiendo la palabra ID.

    Los nombres locales (temporales) se representan anteponiendo la palabra LAM.

    Las cadenas hexadecimaes se representan anteponiendo la palabra HXS.

  • 5/28/2018 Programacin en SystemRpl

    9/138

    8

    5 CONVERSIN DE OBJETOS

    2FFAC %>%%Convierte un nmero real a un nmero real extendido.

    05C27 %>C%Convierte un nmero real a un nmero complejo, requiere la parte real en el nivel 2 y la parteimaginaria en el nivel 1.

    2EFCB %>#Convierte un nmero real a una cadena HXS.

    2FF9B %%>%Convierte un nmero real extendido a un nmero real.

    261CF %%>C%Convierte un nmero real extendido a un nmero complejo, requiere la parte real en el nivel 2 y laparte imaginaria en el nivel 1.

    05D2CC%>%Convierte un complejo a un nmero real, devuelve la parte real en el nivel 2 y la parte imaginaria enel nivel 1.

  • 5/28/2018 Programacin en SystemRpl

    10/138

    9

    25E82 C%>%%Convierte un complejo a un nmero real extendido, devuelve la parte real en el nivel 2 y la parteimaginaria en el nivel 1.

    262F1 COERCEConvierte un nmero real a un entero binario.

    262F6 UNCOERCEConvierte un entero binario a un nmero real.

    2602B COERCEFLAGConvierte un flag TRUEal numero real 1y el FALSEal numero real 0.

    Los siguientes comandos sirven para preguntar el tipo de objeto que se encuentra en el nivel 1 de lapila devolviendoTRUE(Cierto) si el objetos que preguntamos se encuentra en el nivel 1 de la pila oFALSE(Falso), si no se encuentra.

    TYPEBINT? Pregunta si es un entero binario

    TYPECARRY? Pregunta si es una formacin compleja.

    TYPECHAR? Pregunta si es un carcter.

    TYPECMP? Pregunta si es un nmero complejo.

    TYPECOL? Pregunta si es un programa.

    TYPECSTR? Pregunta si es una cadena.

    TYPEEXT? Pregunta si es una unidad.

    TYPEGROB? Pregunta si es un grob.

    TYPEHSTR? Pregunta si es una cadena HEX.

    TYPEIDNT? Pregunta si es un nombre global.

    TYPELAM? Pregunta si es un nombre local (variable temporal)

    TYPELIST? Pregunta si es una lista.

    TYPEROM? Pregunta si es un puntero ROM (nombre XLIB).

    TYPERRP? . Pregunta si es un directorio

    TYPESYMB? Pregunta si es un objeto simblico.

    TYPETAGGED? Pregunta si es un objeto etiquetado

    .NOTA:Anteponiendo la palabraDUPel objeto se duplica.

  • 5/28/2018 Programacin en SystemRpl

    11/138

    10

    Ejemplo:::DUPTYPEIDNT?;@

    Este ejemplo duplica el objeto del nivel 1 y pregunta si es un nombre global. Si el objeto es unnombre global devolver la bandera TRUE.

    6- ALGUNOS TIPOS DE OBJETOS

    OBJETO ENTERO BINARIOEl uso de este tipo de objetos es para representar enteros binarios cuya precisin es equivalente a unadireccin de memoria.

    OBJETO CADENA HEXADECIMAL (HEX)Un uso tpico de este tipo de objetos es un bfer o tabla.

    OBJETO CARACTEREste objeto se usa para representar cantidades de un solo byte.

    OBJETO CODIGO

    Un objeto cdigo es una seccin en lenguaje ensamblador.Ejemplo:: :CODEPrograma en lenguaje ensamblador

    ENDCODE;@OBJETO SIMBOLICOEste tipo de objetos se usa para representar objetos simblicos para aplicaciones de matemticasimblica.

  • 5/28/2018 Programacin en SystemRpl

    12/138

    11

    7- FUNCIONES DE COMPARACIN O TEST

    Las funciones de comparacin son aquellas que comparan argumentos, devolviendo TRUE si esverdadero o FALSEsi es falso de acuerdo a lo que se este preguntando.

    Estas funciones se describen en la siguiente Tabla:

    COMANDO DESCRIPCIN

    EQ Pregunta si dos objetos ocupan fsicamente el mismo espacio en la memoria.

    EQUAL Pregunta si dos objetos son iguales

    = Pregunta si dos objetos son iguales

    Pregunta si el objeto 2 es mayor al objeto 1

    = Pregunta si el objeto 2 es mayor o igual al objeto 1

    Pregunta si el objeto 2 es diferente al objeto 1

    Nota:Al comparar el tipo de objetos se deber preguntar que tipo de objeto es, por ejemplo si setrata de un nmero real se deber anteponer el Signo %.

    Ejemplo:En este ejemplo se debern introducir dos nmeros reales en la pila y devolver TRUE si el objeto 2es menor al objeto 1. Por ejemplo si introducimos 12. y 9. y ejecutamos el siguiente programadevolverFALSE. (Para los siguientes ejemplos se puede activar el flag 85 para ver la pila en modo system)

  • 5/28/2018 Programacin en SystemRpl

    13/138

    12

    8- FUNCIONES LGICAS

    Las funciones Lgicas son aquellas que permiten dar a conocer la relacin entre dos condiciones.Estas funciones son el AND y el OR.

    03B46 ANDEsta funcin permite dar a conocer si se cumplen Simultneamente dos condiciones.

    2:Flag 11: Flag 2 1:Flag

    Si flag 1 y flag 2 son ambos TRUEentonces el flag que se devuelve es TRUEsi no, FALSE.Esto se muestra en la siguiente tabla:

    CONDICIN 1 CONDICIN 2 RESPUESTA

    FALSE FALSE FALSE

    FALSE TRUE FALSE

    TRUE FALSE FALSETRUE TRUE TRUE

    03B75 ORSi el flag 1 o el flag 2 (o ambos) son TRUEentonces TRUEde lo contrario FALSE.Con esta funcin se puede conocer si una de las dos condiciones se cumple.Esto se muestra en la siguiente tabla:

    CONDICI N 1 CONDICI N 2 RESPUESTA

    FALSE FALSE FALSE

    FALSE TRUE TRUE

    TRUE FALSE TRUE

    TRUE TRUE TRUE

  • 5/28/2018 Programacin en SystemRpl

    14/138

    13

    8.1 - OTROS COMANDOS DE TESTS

    03AC0 FALSEPone la bandera FALSEen el nivel 1 de la pila

    36554 FALSETRUEPone la bandera FALSEen el nivel 2 y TRUEen el nivel 1 de la pila.

    369FF FALSE'Pone la bandera FALSEen el nivel 2 y :: ;en el nivel 1 de la pila.

    03A81 TRUEPone la bandera TRUEen el nivel 1 de la pila.

    36540 TRUEFALSEPone la bandera TRUEen el nivel 2 y FALSEen el nivel 1 de la pila.

    369D2 TRUE'Pone la bandera TRUEen el nivel 2 y :: ;en el nivel 1 de la pila.

    03AF2 NOTConvierte un flag TRUEen un FALSE. y un FALSEen un TRUE.

  • 5/28/2018 Programacin en SystemRpl

    15/138

    14

    35C7C NOTANDDevuelve TRUEsi se encuentra TRUEy FALSEde lo contrario devuelve FALSE.

    35CB8 ROTANDRequiere un flag 1un objetoy un flag 2, despus hace un ROTy luego un Y lgico. (AND).El ejemplo que se muestra abajo es el nico caso donde devuelve TRUE,en los dems casosdevolver FALSE.

    03ADA XORSi el flag 1y flag 2son TRUEo FALSEentonces devuelve FALSE, si no devuelve TRUE.Esto se muestra en la siguiente tabla:

    CONDICIN 1 CONDICIN 2 RESPUESTA

    FALSE FALSE FALSE

    FALSE TRUE TRUE

    TRUE FALSE TRUE

    TRUE TRUE FALSE

    2602B COERCEFLAGConvierte un flag TRUEen el nmero real 1.Convierte un flag FALSEen el nmero real0.

  • 5/28/2018 Programacin en SystemRpl

    16/138

    15

    9 - VERIFICAR EL TIPO DE ARGUMENTO

    Para verificar el tipo de argumento que se tiene en la pila se utilizan los siguientes comandos.CK&DISPATCH0 y CK&DISPATCH1 seguido del tipo de objeto y a continuacin elprocedimiento.

    Tambin se puede verificar con el siguiente comando. CKN&Dispatch, siendo N el nmero deargumentos que se necesitan en la pila por ejemplo si se necesitan dos argumentos se pondrCK2&Dispatch.

    Ejemplo:::CK1&Di spatchi dntPURGE

    ;@

    Este ejemplo verifica primero que exista un argumento en la pila y luego verifica si lo que se tiene enla pila es un nombre global, de ser as se proceder a borrar el nombre local.

    9.1 NUMERO DE ARGUMENTOS

    Las siguientes palabras verifican que existan de 0-5 argumentos en la pila y pemiten el mensaje deerror "Too Feb Arguments"si no es as.

    CK0, CK0NOLASTWD No se requiere ningn argumentoCK1, CK1NOLASTWD Se requiere un argumento

    CK2, CK2NOLASTWD Se requieren dos argumentosCK3, CK3NOLASTWD Se requieren tres argumentosCK4, CK4NOLASTWD Se requieren cuatro argumentosCK5, CK5NOLASTWD Se requieren cinco argumentos

    262CE CKNVerifica n argumentos en la pila.

    Si queremos asegurarnos que en cada nivel de la pila exista el tipo de objeto que nosotros necesitamosse puede especificar de la siguiente manera:

    #nnnnn

    Cada n representa un tipo de objeto diferente.

    Ejemplo 1:Queremos verificar que en el nivel 2 de la pila este un grafico y en el nivel uno un nmero real.::CK2&Di spat ch

    #C1

    ;

    @

    En este ejemplo la Cindica un grafico el 1un nmero real. (Ver tipos de objetos)

  • 5/28/2018 Programacin en SystemRpl

    17/138

    16

    Ejemplo 2:Queremos verificar que en el nivel 3 de la pila este un directorio, en el nivel dos una librera y el nivel1 un nmero real::CK3&Di spat ch

    #2F8F1;

    @

    En este ejemplo la 2Findica un directorio, 8Funa librera y el 1 un nmero real. (Ver tipos de objetos)

  • 5/28/2018 Programacin en SystemRpl

    18/138

    17

    10 - INDICADORES DE SISTEMA (Flags)

    25F23 SaveSysFlagsGuarda los Flags de sistema.

    25F22 RestoreSysFlagsRestaura los Flags guardados de sistema.

    26152 SetUserFlagActiva el flag de usuario indicado.

    2614D SetSysFlagActiva el flag de sistema indicado.Ejemplo:::40SetSysFl ag

    ;@

    Este ejemplo activa el flag nmero 40 (Indicador del reloj)

    26044 ClrSysFlagDesactiva el flag de sistema indicado.Ejemplo:::40Cl r SysFl ag

    ;@

    Este ejemplo desactiva el flag nmero 40 (Indicador del reloj)

    26049 ClrUserFlagDesactiva el flag de usuario indicado.

  • 5/28/2018 Programacin en SystemRpl

    19/138

    18

    11. OPERACIONES DE LA PILA

    Las palabras listadas en este captulo realizan operaciones de la pila sencillas o mltiples.

    03258 2DROPBorra los objetos de los niveles 1 y 2.

    355A5 2DROP00Borra los objetos de los niveles 1 y 2 y devuelve los nmeros binarios 0 en el nivel 1 y 2 de la pila.

    35B32 2DROPFALSEBorra los objetos de los niveles 1 y 2. y devuelve FALSEen el nivel 1 de la pila.

    031AC 2DUPDuplica los objetos de los niveles 1 y 2 de la pila.

    36CA4 2DUP5ROLLDuplica los objetos de los niveles 1 y 2 de la pila y trae al objeto del nivel 5 de la pila.

    35D30 2DUPSWAPDuplica los objetos de los niveles 1 y 2 de la pila y intercambia de niveles el 1 con el 2.

    37046 2OVERDuplica los objetos de los niveles 4 y 3.

  • 5/28/2018 Programacin en SystemRpl

    20/138

    19

    35018 2SWAPIntercambia los objetos de los niveles 1 y 2 con los del 3 y 4.

    341D2 3DROPBorra los objetos de los niveles 1, 2 y 3.

    34485 3PICKCopia el objeto del nivel 3.

    3422B 3UNROLLRota un nivel hacia abajo los objetos de los niveles 1, 2 y 3.

    341D7 4DROP

    Borra los objetos de los niveles 1, 2 , 3 y 4.

    34331 4UNROLLRota un nivel hacia abajo los objetos de los niveles 1, 2, 3 y 4.

    343CF 4UNROLL3DROPBorra los objetos de los niveles 2, 3 y 4.

    341DC 5DROPBorra los objetos de los niveles 1, 2, 3, 4 y 5.

  • 5/28/2018 Programacin en SystemRpl

    21/138

    20

    0314C DEPTHDevuelve el nmero de objetos que se encuentran en la pila.

    03244 DROPBorra el objeto del nivel 1.

    357CE DROPDUPBorra el objeto del nivel 1 y duplica el objeto del nivel 2.

    03188 DUPDuplica el objeto del nivel 1.

    35CE0 DUPDUP

    Triplica el objeto del nivel 1 de la pila.

    0326E NDROPBorra el nmero de objetos que se le indique en nmeros enteros binarios.

    031D9 NDUPDuplica los objetos de los n niveles que se le indique en nmeros enteros binarios.

  • 5/28/2018 Programacin en SystemRpl

    22/138

    21

    28143 NDUPNDuplica el objeto del nivel 1 el nmero de veces que se le indique en nmeros binarios devolviendo elnmero de copias que hizo en nmeros binarios.Ejemplo:

    032C2 OVERCopia el objeto del nivel 2.

    032E2 PICKCopia al nivel 1 cualquier objeto de los niveles este requiere el nmero del nivel a copiar en nmerosbinarios.

    03325 ROLLCambia la posicin de los objetos que se encuentran en n niveles de abajo hacia arriba, esto requiereel nmero del nivel en nmeros binarios.

    03295 ROTCambia la posicin de los objetos de los niveles 1, 2 y 3, de abajo hacia arriba.

    03223 SWAPIntercambia los objetos de los niveles 1 y 2.

    3422B UNROTCambia la posicin de los objetos de los niveles 1, 2 y 3, de arriba hacia abajo.

  • 5/28/2018 Programacin en SystemRpl

    23/138

    22

    28187 reversymInvierte el orden de los objetos de la pila, esto requiere el nmero de objetos a invertir en nmerosenteros binarios.

  • 5/28/2018 Programacin en SystemRpl

    24/138

    23

    12 - UTILIDADES ADICIONALES DE MEMORIA

    05F42 GARBAGEFuerza una recoleccin de basura.

    05F61 MEMDevuelve en la pila la cantidad de memoria libre en nibbles (no se fuerza una recoleccin de basura)

    05944 OCRCDevuelve la cantidad de memoria que ocupa un objeto en nibbless y el checksum en hxs.

    2F257OCRC%Devuelve el checksum de un objeto en hxs y la cantidad de memoria que ocupa el objeto en bytes

    2F267 VARSIZEDevuelve el checksum y tamao que ocupa una variable en bytes.

    05902 OSIZEDevuelve el tamao que ocupa un objeto en nibbles, fuerza a una recoleccin de basura.

    Si se desea saber cuanto de memoria libre existe en algn puerto existe el comando en UserRpl

    PVARSque en system seria xPVARScuya direccin de memoria es 3EA49. Este comando requiereel nmero del puerto en nmeros reales y devuelve en el nivel 2 una lista con los objetosalmacenados en el puerto y en el nivel 1 la cantidad de memoria libre en dicho puerto.

  • 5/28/2018 Programacin en SystemRpl

    25/138

    24

    13 - COMANDOS DEL SISTEMA

    Las siguientes palabras ponen, comprueban o controlan varias condiciones o modos del sistema.

    25FA9 ALARM?Devuelve TRUEsi esta activada una alarma.

    2EF6C AtUserStackDeclara propiedad del usuario todos los objetos de la pila.

    26044 ClrSysFlagBorra la bandera del sistema, se debe introducir la bandera a borrar en nmeros binarios.Ejemplo:

    26049 ClrUserFlagBorra la bandera de usuario, se debe introducir la bandera a borrar en nmeros binarios.

    2EED0 DATEDevuelve la fecha en nmeros reales.

    2EECF TOD

    Devuelve la hora en nmeros reales.

    2EED3 TIMESTRDevuelve en un string el da, la fecha y la hora, requiere como entrada en el nivel 2 la fecha ennmeros reales y en el nivel 1 la hora en nmeros reales.

    25EB2 DOBEEPEmite un sonido mediante un frecuencia este requiere como entrada la frecuencia que esta dada en Hzen nmeros reales y el tiempo de duracin que esta dado en segundos en nmeros reales.Ejemplo:::%1500%2DOBEEP;@

    Este ejemplo generara un sonido de frecuencia de 1500 Hz con una duracin de 2 segundos.

  • 5/28/2018 Programacin en SystemRpl

    26/138

    25

    2EFA6 DOBINPone la base en modo BINario.

    2EFA8 DODECPone la base en modo DECimal.

    2EFA5 DOHEXPone la base en modo HEXadecimal.

    2EFA 7 DOOCTPone la base en modo OCTal.

    2604E DOENG

    Pone la pantalla en modo ingenierias ENGdesde (0-11) dgitos. se requiere el nmero de digitos ennmeros binarios.

    26053 DOFIXPone la pantalla en modo FIXdesde (0-11) dgitos. Se requiere el nmero de digitos en nmerosbinarios.

    26058 DOSCIPone la pantalla en modo cientfico SCIcon (0-11) dgitos se requiere el nmero de digitos ennmeros binarios.

  • 5/28/2018 Programacin en SystemRpl

    27/138

    26

    2605D DOSTDPone la pantalla en modo estndar STD.

    25EBA DPRADIX?Devuelve TRUE si la coma actual es un punto ( . ).Devuelve FALSEsi la coma actual es una coma ( ,).

    2FFBD SETDEGPone el modo de ngulo en DEGREES(SEXAGESIMALES)

    2FFEF SETGRADPone el modo de ngulo en GRADS(CENTESIMALES)

    2FFDB SETRADPone el modo de ngulo en RADIANS(RADIANES)

    26120 SLOWRetardo de 15 milisegundos

    26170 TestSysFlagDevuelve TRUEsi una bandera especifica del sistema esta activada, requiere como entrada elnmero de la bandera de sistema en nmeros binarios.Ejemplo:

    Esto escrito en un programa seria de la forma siguiente.::40Test SysFl ag;@

    Devuelve TRUEsi el indicador del reloj esta activado (flag 40), y FALSE si esta desactivado.

    26175 TestUserFlagDevuelve TRUEsi una bandera de usuario esta activada, requiere como entrada un nmero binario.

  • 5/28/2018 Programacin en SystemRpl

    28/138

    27

    26125 VERYSLOWRetardo de 300 milisegundos

    2612A VERYVERYSLOWRetardo de 3 segundos.

    25F95 LANGUAGE>Devuelve el nmero entero binario del lenguaje actual.0 = Ingles.1 = Francs.2 = Espaol.

    25F90 >LANGUAGECambia los mensajes de error al lenguaje indicado se requiere el nmero entero binario 0, 1 o 2.Ejemplo:::2

    >LANGUAGE;@

    2EFBE WORDSIZEDevuelve el ancho de una palabra en nmeros binarios.

    2EFAA dostws

    Almacena el ancho de una palabra, requiere como entrada el ancho de la palabra en nmeros binarios.

    2F2D4 dowaitHace una pausa durante un nmero de segundos en estado de sueo ligero. Requiere el tiempo deespera en nmeros reales.Ejemplo:

    Este ejemplo muestra el mensajeHP49G durante 2 segundos.::HP49GFl ashMsg%2dowai t;@

    25EF8 SEP$NLDevuelve la primera fila de un string de varios renglones.

  • 5/28/2018 Programacin en SystemRpl

    29/138

    28

    2F2A7 XEQSETLIBInstala una librera igual que el comando de User ATTACH. Por ejemplo para instalar la librera 256.

    FPTR 2 14Devuelve el Nombre, ID y puerto de las librerias instaladas.

    2F21E ViewStrObjectNecesita un flag y un string.

    Si flag es TRUE visualiza el string como un texto.Si flag es FALSEvisualiza el string como un grob.

    048F9 DispTimeReq2?Devuelve TRUEsi el reloj esta activado y FALSEsi esta desactivado.

  • 5/28/2018 Programacin en SystemRpl

    30/138

    29

    13 - FUNCIONES DE NUMEROS COMPLEJOS

    25E81 C%1/ ( C%C%' )Inverso

    25E84 C%ABSRealiza la siguiente operacin del nmero complejo (x , y ).

    Los eleva al cuadrado y les saca la raz.Ejemplo:

    25E85 C%ACOS ( C%C%' )Arco-coseno

    25E87 C%ALOG ( C%C%' )Antilogaritmo base 10.

    25E88 C%ARG ( C%%)Devuelve ANGULO(x,y) de (x,y)

    25E89 C%ASIN ( C%C%' )Arco-seno

    25E8B C%ATAN ( C%C%' )Arco-tangente

    25E8F C%C^C ( C%1 C%2C%3 )Potencia

    261ED C%CHS ( C%C%' )Cambio de signo

    261DE C%%CHS ( C%%C%%' )Cambio de signo

    261F2 C%CONJ ( C%C%' )Conjugado

    261E3 C%%CONJ ( C%%C%%' )Conjugado

    25E8D C%COS ( C%C%' )Coseno

    25E8E C%COSH ( C%C%' )Coseno hiperblico

  • 5/28/2018 Programacin en SystemRpl

    31/138

    30

    25E92 C%LN ( C%C%' )Logaritmo natural

    25E93 C%LOG ( C%C%' )Logaritmo base 10

    25E95 C%SGNRealiza la siguiente operacin con el nmero complejo (x , y ).Con Xrealiza lo que se muestra en la Figura N1 y con Ylo que se muestra en la Figura N2.

    Figura N1 Figura N2

    Ejemplo:

    25E96 C%SIN ( C%C%' )Seno

    25E97 C%SINH ( C%C%' )Seno hiperblico

    25E98 C%SQRT ( C%C%' )

    Raiz cuadrada25E99 C%TAN ( C%C%' )Tangente

    25E9A C%TANH ( C%C%' )Tangente hiperblica

  • 5/28/2018 Programacin en SystemRpl

    32/138

    31

    14 - NUMEROS REALES

    Los nmeros reales se escriben con % y los nmeros reales extendidos se escriben con %%.A continuacin se muestran algunas funciones de estos nmeros.

    14.1 - FUNCIONES DE NUMEROS REALES

    30385 %%*Multiplica dos nmeros reales extendidos.

    3032E %%+Suma dos nmeros reales extendidos.

    3033A %%-Resta dos nmeros reales extendidos.

    302DB %%ABSValor absoluto de un nmero real extendido.

    306F3 %%ACOSRADArco-coseno de un nmero real extendido, usando radianes.

    306C3 %%ASINRADArco-seno de un nmero real extendido, usando radianes.

    302FB %%CHSCambia de signo a un nmero real extendido.

    30642 %%COSCoseno de un nmero real extendido.

    30653 %%COSDEGCoseno con grados sexagesimales de un nmero real extendido.

    307B2 %%COSHCoseno hiperblico de un nmero real extendido.

    30663 %%COSRADCoseno de un nmero real extendido, en radianes.

    300C7 %%MAXDevuelve el mayor de dos nmeros reales extendidos

    305F1 %%SINSeno de un nmero real extendido.

    30602 %%SINDEGSeno de un nmero real extendido, con grados sexagesimales.

    30780 %%SINH

    Seno hiperblico de un nmero real extendido.

  • 5/28/2018 Programacin en SystemRpl

    33/138

    32

    304D5 %%SQRTRaiz cuadrada de un nmero real extendido.

    30693 %%TANRADTangente de un nmero real extendido, en radianes.

    3044A %%^Exponencial de un nmero real extendido.

    3035F %+Suma dos nmeros reales.

    25E69 %+SWAP

    Suma dos nmeros reales y luego hace SWAP. Requiere un objeto en el nivel 2 y el nmero real en elnivel 1 de la pila.

    3036C %-Resta dos nmeros reales.

    26F36 %1+Suma uno a un nmero real.

    26F4A %1-Resta uno a un nmero real.

    302EB %ABSValor absoluto de un nmero real.

    306DC %ACOSArco-coseno de un nmero real.

    307FE %ACOSHArco-coseno hiperblico de un nmero real.

    306AC %ASINArco-seno de un nmero real.

    307EB %ASINHArco-seno hiperblico de un nmero real.

    3070C %ATANArco-tangente de un nmero real.

    30811 %ATANHArco-tangente hiperblico de un nmero real.

  • 5/28/2018 Programacin en SystemRpl

    34/138

    33

    3095E %CEILRedondea el nmero real al prximo nmero entero.

    3041B %CHVariacin porcentual de un nmero real.

    3030B %CHSCambia de signo al nmero real.

    3062B %COSCoseno de un nmero real.

    307C5 %COSHCoseno hiperblico de un nmero real.

    3000D %D>RConvierte un nmero real que este en grados sexagesimales a radianes

    3051A %EXPSaca la exponencial de un nmero real ( en ) nvendra a ser el nmero real.

    3052D %EXPM1Saca la exponencial de un nmero real y le resta 1 ( en-1 ) nvendra a ser el nmero real.

    30824 %EXPONENT

    Devuelve el exponente de un nmero real.Ejemplo 1:

    Ejemplo 2:

  • 5/28/2018 Programacin en SystemRpl

    35/138

    34

    30AAF %FACTFactorial de un nmero real.

    30971 %FLOORRedondea un nmero real al menor entero.

    30938 %FPDevuelve la parte fraccionaria de un nmero real.

    3094B %IPDevuelve la parte entera de un nmero real.

    30559 %LN

    ln(n), n es un nmero real.30592 %LNP1ln(n+1), n es un nmero real.

    3056C %LOGLogaritmo base 10 de un nmero real.

    3031B %MANTISSADevuelve la mantisa de un nmero real.

    300E0 %MAX

    Devuelve el mayor de dos nmeros reales.

    300F9 %MINDevuelve el menor de dos nmeros reales.

    35DBC %MAXorder ( %1 %2 --> %mayor %menor )Ordena dos nmeros reales de mayor a menor.

  • 5/28/2018 Programacin en SystemRpl

    36/138

    35

    30837 %NFACTFactorial de un nmero real.

    30040 %R>DConvierte un nmero real que este en radianes a uno en grados sexagesimales

    309AD %RANGenera un nmero real aleatorio

    30A66 DORANDOMIZEActualiza la semilla del generador de nmeros aleatorios

    305DA %SINSeno de un nmero real.

    30799 %SINHSeno hiperblico de un nmero real.

    304F4 %SQRTRaz cuadrada de un nmero real.

    303F6 %TPorcentaje total de un nmero real.

    3067C %TANTangente de un nmero real.

    307D8 %TANHTangente hiperblica de un nmero real.

    3045B %^Exponencial de un nmero real.

    30F14 RNDXYRedondea un nmero real a un determinado nmero de decimales.

  • 5/28/2018 Programacin en SystemRpl

    37/138

    36

    30F28 TRCXYTrunca un nmero real a determinados decimales.

  • 5/28/2018 Programacin en SystemRpl

    38/138

    37

    15 - MANIPULACION DE ENTEROS BINARIOS

    03EC2 #*Multiplica dos enteros binarios.

    03DBC #+Suma dos enteros binarios.

    03DE0 #-Resta dos enteros binarios.

    03EF7 #/Divide dos enteros binarios, devuelve el residuo en el nivel 2, y el cociente en el nivel 1.

    3551D #MAXDevuelve el mximo de dos enteros binarios

  • 5/28/2018 Programacin en SystemRpl

    39/138

    38

    16- ENTRADA DE DATOS

    A continuacin se vern algunos ejemplos para la entrada de datos en los programas. En algunoscasos se vera primero el ejemplo en User y despus el mismo ejemplo en System.

    Ejemplo 1:USER- RPL TI TULO {{SUBTI TULO 1} {SUBTI TULO 2} {SUBTI TULO 1}}1 CHOOSE

    SYS- RPL: :{SUBTI TULO 1}{SUBTI TULO 2}{SUBTI TULO 3}3TI TULO0FPTR 2 6F;@

    NOTA:En el ejemplo en System el nmero entero binario3indica la cantidad de subtitulos que existen en estecaso son 3 subtitulos y el nmero entero binario 0indica en donde va a empezar la marcacin del subtitulo eneste caso el 0indica en el primer subtitulo,

    Ejemplo 2:USER- RPL TI TULO {{SUBTI TULO 1} {SUBTI TULO 2} {SUBTI TULO 1}}1 CHOOSE

    SYS- RPL: :TI TULO{{SUBTI TULO 1}{SUBTI TULO 2}

    {SUBTI TULO 3}}%1FPTR 2 2D;@

    NOTA:En el ejemplo en System el nmero real %1indica donde va a empezar la marcacin del subtitulo eneste caso el %1indica en el primer subtitulo,

  • 5/28/2018 Programacin en SystemRpl

    40/138

    39

    Ejemplo 3:SYS- RPL::'::60

    #=casedr opTr ueTr ue;

    "TI TULO"17{{"SUBTI TULO 1"}{"SUBTI TULO 2"}{"SUBTI TULO 3"}}1ROMPTR B3 0;

    @NOTA:En este ejemplo el nmero entero binario 1indica donde va a empezar la marcacin del subtitulo eneste caso el 1indica en el primer subtitulo.

    En estos 3 ejemplos si se sale pulsando OKdevolver el flag TRUE, si se sale pulsando CANCLdevolver el flagFALSE.

    2F1A5 AskQuestionCrea un CHOOSE con un string si se sale con OKdevuelve el flag TRUEy si se sale con CANCLdevuelve el flag FALSE.Ejemplo:

  • 5/28/2018 Programacin en SystemRpl

    41/138

    40

    17 InputLine

    2EF5F InputLineEste comando requiere de 10 argumentos para funcionar, devuelve el flag TRUEsi se salio conENTER y devuelve el flag FALSEsi se cancelo con ON, tiene la siguiente sintaxis.

    SINTAXIS:::MensajeValor Inicial# Posicin del Cursor# Modo de escritura# Modo de entrada# Modo de Alpha{Mens de edicin }# Men inicial del men de edicinFALSE o TRUE

    # Proceso de edicinInputLine;@MensajeDeber ir en un string el mensaje que deseamos que aparezca.

    Valor inicialDeber ir en un string el valor inicial que queremos que aparezca, si no queremos ninguno colocamosNULL$.

    Posicin del CursorIndica la posicin inicial donde se quiere que este ubicado el cursor, si colocamos el nmero enterobinario #0este va a indicar el final de la lnea de edicin

    Modo de EscrituraSe debe colocar cualquiera de los siguientes nmeros enteros binarios, cada uno indica un mododistinto.0 = Modo escritura/sobreescritura actual1 = Modo escritura normal2 = Modo sobreescritura

    Modo de Entrada

    Se debe colocar cualquiera de los siguientes nmeros enteros binarios, cada uno indica un mododistinto.

    0 = Modo entrada actual mas modo programa1 = Modo entrada inmediata2 = Modo Algebraico

    Modo de AlphaSe debe colocar cualquiera de los siguientes nmeros enteros binarios, cada uno indica un mododistinto.0 = Modo alfa actual1 = Modo alfa activado2 = Modo alfa desactivado

  • 5/28/2018 Programacin en SystemRpl

    42/138

    41

    Mens de EdicinSe debe colocar los mens que se desea que aparezcan, estos mens debern estar dentro de una listaencerrados cada men en un string. Si no se desea ningn men colocamos NULL{ }.

    Men inicial del men de edicinGeneralmente es ONE (uno), esto indica a partir de que men se desea mostrar.

    FALSE O TRUESi colocamos TRUEeste especifica que si pulsamos ONmientras exista una lnea de edicin no nula,este abortara el InputLine. Y si colocamos FALSEeste simplemente borrara la lnea de edicin.

    Proceso de EdicinEste indica como procesar la lnea de edicin resultante, se debe colocar cualquiera de los siguientesnmeros enteros binarios, cada uno indica un proceso distinto.0 = Devuelve la lnea de edicin en un string.1 = Devuelve la lnea de edicin en un string y como un objeto analizado.2 = Analiza y evala la lnea de edicin.

    Ejemplo 1 :::CI UDADAr equi pa0011{Men1 Men2 }1FALSE0

    I nput Li ne;@

    Este cdigo se puede reducir a:

    ::"CI UDAD""Ar equi pa"ZEROZEROONEONE{"Men1" "Men2" }1FALSE0I nput Li ne;@

  • 5/28/2018 Programacin en SystemRpl

    43/138

    42

    Ejemplo 2 :::" I nt r oduce Operaci n"''2 01 2

    NULL{}ONEFALSEONEI nput Li ne;@

  • 5/28/2018 Programacin en SystemRpl

    44/138

    43

    18 - COMANDOS DE PROGRAMACION

    A continuacin se vern algunos de los comandos mas usados en la programacin.

    El comando DOrepite un proceso el nmero de veces que se le indique.

    073F7 DO Empieza el bucleDOrequiere un valor final y otro inicial.07334 LOOP Termina el bucleDO.

    SINTAXIS::#final #inicialDOPROGRAMALOOP;@

    Ejemplo:::6 0DOCK1DUP%1%+LOOP

    ;@

    Este ejemplo va a sumar 6 veces el nmero uno devolviendo estos valores a la pila.

    NOTA:Este ejemplo requiere un nmero en el nivel 1, no puede haber ninguna otra cosa que no sea un nmeropor ejemplo no puede haber . Ya que esto ocasionara la perdida de la memoria, para resolver este problema

    se puede hacer lo siguiente.

    ::

    CK1&Di spat chreal: :6 0DODUP%1%+LOOP

    ;;@

  • 5/28/2018 Programacin en SystemRpl

    45/138

    44

    18.1 - PALABRAS PROPORCIONADAS AL BUCLE DO

    Se proporcionan las siguientes palabras para usarlas con los bucles DO.

    073A5 +LOOPEs parecido a LOOPexcepto que toma un entero binario de la pila e incrementa el contador del bucle

    en esa cantidad en lugar de en 1.

    3645A DUPINDEX@Duplica el objeto del nivel uno de la pila durante el nmero de veces que indique el nmero finalEj empl o:

    ::2 0DO

    DUPI NDEX@ LOOP

    ;@

    07221 INDEX@Devuelve el ndice del entorno DoLoop mas interno:Ej empl o:

    ::4 0DOI NDEX@

    LOOP;@Si ejecutamos este ejemplo devolver los siguientes nmeros enteros binarios.

    367D9 INDEX@#-Resta el nmero binario del nivel uno de la pila al ndice del entorno DoLoop mas interno.

    07270 INDEXSTOAlmacena un nmero binario del nivel uno de la pila como el ndice del entorno DoLoop mas interno.

    07249 ISTOP@Devuelve el valor final del entorno DoLoop mas interno

    07295 ISTOPSTOAlmacena un nmero binario del nivel uno de la pila como el valor de parada en el entorno DoLoopmas interno.

    07258 JINDEX@Devuelve el ndice del segundo entorno DoLoop

  • 5/28/2018 Programacin en SystemRpl

    46/138

    45

    07334 LOOPTermina una estructura de bucle DO.

    36482 OVERINDEX@Hace OVERy luego devuelve el valor del ndice del entorno DoLoop mas interno.

    2: Objeto 11: Objeto 2

    4: Objeto 13: Objeto 22: Objeto 11: # indice

    3646E SWAPINDEX@HaceSWAPy luego devuelve el valor del ndice del entorno DoLoop mas interno.

    2: Objeto 11: Objeto 2

    3: Objeto 22: Objeto 11: # indice

    3709B ZEROISTOPSTOAlmacena cero como el valor de parada del entorno DoLoop mas interno

    364E1 toLEN_DO ( {list} --> {list} )Comienza el bucle DOcon inicio = #1 y con el valor de parada = #numero de elementos de la lista+1

    34A22 ITRequiere un flag si el flag esTRUE entonces ejecuta el programaP1y luego el programa P2.Si es FALSE ejecuta P2.

    SINTAXIS:::flagIT::PROGRAMA P1

    ;::PROGRAMA P2

    ;;@

    Ejemplo:::DUPTYPEREAL?IT

    ::%0 P1%>C%

    ;::EL PROGRAMA TERMI NO

    Fl ashMsg P2

    ;;@

  • 5/28/2018 Programacin en SystemRpl

    47/138

    46

    Si introducimos el nmero real 15. y ejecutamos el programa, entonces mostrara el mensajeEL PROGRAMA TERMINO y convertir el nmero real 15. en un nmero complejo como semuestra en las figuras.

    34B3E ITERequiere un flag si el flag esTRUE entonces ejecuta el programaP1 y termina, Si es FALSE ejecutaP2.y termina, esto vendra a ser parecido como un IF/THEN/ELSE del RPL de usuario.

    SINTAXIS:::flagITE::PROGRAMA P1

    ;::PROGRAMA P2

    ;;@Ejemplo:::DUPTYPEREAL?ITE

    ::%0 P1%>C%;::NO ES UN NUMERO REALFl ashMsg P2

    ;;@

    Este ejemplo pregunta si es un nmero real, si es un nmero real devolver el flag TRUE y ejecutara P1

    colocando el nmero real 0 en la pila y despus convirtiendo los dos nmeros reales a complejos. Por ejemplosi en la pila tenamos el nmero real45 devolver (45, 0).Si el flag que devuelve esFALSEentonces ejecutara el programa P2mostrando un mensaje.

  • 5/28/2018 Programacin en SystemRpl

    48/138

    47

    070C3 RPITEEste comando tiene la siguiente sintaxis.

    SINTAXIS:::flag

    ::programa 1

    ;::programa 2

    ;RPITE;@

    Si el flag es TRUEse elimina flag y programa 2 y se evala programa 1.Si el flag es FALSEse elimina flag y programa 1 y se evala programa 2.

    Ejemplo:::DUPTYPEREAL?

    ::%0%>C%

    ;::EL PROGRAMA TERMI NO Fl ashMsg

    ;RPITE

    ;@

    070FD RPITEste comando requiere un flag si el flag es TRUEentonces se elimina flag y se evala programa 1, sino, simplemente se eliminan flag y programa 1y termina.

    SINTAXIS:::flag:: programa 1 ;RPIT;@

    Ejemplo:::DUPTYPEREAL?

    ::%0%>C%

    ;RPIT

    ;@

  • 5/28/2018 Programacin en SystemRpl

    49/138

    48

    18.2 BUCLES INDEFINIDOSLos bucles indefinidos se construyen combinando las siguientes palabras RPL:

    071A2 BEGINCopia el puntero del intrprete en la pila de retornos.

    0716B IDUPIgual que BEGIN.

    BEGIN

    TRUE

    FALSE

    071C8 UNTILRequiere de un flag si flag es TRUE continua con la ejecucin del programa.Si el flag es FALSEvuelve a ejecutar lo que este a continuacin de BEGIN.

    BEGIN

    Fl agFALSE

    TRUE

    PROCESO

    PROCESO

    UNTIL

  • 5/28/2018 Programacin en SystemRpl

    50/138

    49

    071EE WHILESi flag es TRUE, entonces no hace nada. Si es FALSE elimina el primer puntero de la pila deretornos y hace que el puntero del interprete se salte los dos siguientes objetos.

    071E5 REPEATCopia el primer puntero de la pila de retornos al puntero del intrprete

    BEGIN

    Fl ag

    TRUE

    FALSE

    071AB AGAINEl bucle BEGIN AGAIN no tiene test para que se termine, en este bucle deber ocurrir un error oque se manipule directamente la pila de retornos.

    PROCESO

    WHILE

    PROCESO

    REPEAT

    PROCESO

  • 5/28/2018 Programacin en SystemRpl

    51/138

    50

    19. VARIABLES TEMPORALES

    Las variables temporales se nombran dentro de una lista con el correspondiente identificador temporalen la lista usada por BIND.

    Los nombres de la lista se usan en el mismo orden en que los objetos unidos aparecen en la pila elltimo identificador de la lista corresponde al objeto en el nivel 1, el identificador anterior al ultimocorresponde al objeto en el nivel 2 y as sucesivamente.

    Ejemplo:En este ejemplo el entero binario ONEse une a Var1y TWOse une a Var2

    : :ONE TWO{LAM Var1LAM Var2

    }

    BI ND ( Une ONE con la variable temporal Var1 y TWO con la variable temporal Var2 )LAM Var1 ( Llama a ONE desde Var1 )LAM Var2 ( Llama a TWO desde Var2 )' LAM Var1 STO ( Almacena un nuevo objeto en Var1 )

    ABND ( Abandona el entorno temporal );@NOTA: ' Esto indica que el siguiente comando no se evala solo se pone en la pilacomo si fuera un RCL.

    Los identificadores temporales pueden contener cualquier carcter de texto excepto que no deberasempezar los nombres con ' o # ya que tales nombres estn reservados para los programas

    incorporados en ROM.

    Si no existe ninguna posibilidad que se cree otro entorno temporal encima del entorno que vas acrear, se pueden usar los nombres nulos para ahorrar memoria. Hay varias palabras de utilidadesque te permiten acceder a variables locales en el entorno superior mediante su nmero de posicin,que es ms rpido que la resolucin ordinaria de un nombre.

    Por ejemplo, el ejemplo anterior seria as:

    : :ONE TWO{ NULLLAM NULLLAM }BI ND ( Une ONE y TWO a dos variables temporales con nombres nulos )

    2GETLAM ( Llama a ONE desde la primera variable )1GETLAM ( Llama a TWO desde la ultima variable )2PUTLAM ( Almacena un nuevo objeto en la primera variable )ABND ( Abandona el entorno temporal )

    ;@

    La numeracin comienza con la ultima variable temporal (o sea, en el mismo orden que el numero delnivel de la pila).

  • 5/28/2018 Programacin en SystemRpl

    52/138

    51

    A continuacin se vern 2 ejemplos para comprender el uso de variables temporales con nombre yvariables temporales sin nombre.

    En los ejemplos que se vern se debern introducir dos nmeros reales y al ejecutar el programa estedevolver la suma, resta y divisin.

    Supongamos que introducimos los nmeros reales 16 y 4.

    Ejemplo 1:::CK2&Di spatch#11::{ LAM NUMERO1

    LAM NUMERO2}BI NDLAM NUMERO1LAM NUMERO2%+LAM NUMERO1LAM NUMERO2%-LAM NUMERO1LAM NUMERO2%/ABND

    ;;@

    Ejemplo 2:::CK2&Di spatch#11::{ NULLLAM NULLLAM } BI ND2 GETLAM

    1 GETLAM %+

    2 GETLAM 1 GETLAM %-2 GETLAM

    1 GETLAM %/ABND;;@

    Ambos ejemplos votaran el mismo resultado, el que se muestra en la figura.

  • 5/28/2018 Programacin en SystemRpl

    53/138

    52

    EJEMPLO DE COMO FUNCIONA GETLAM

    4 GETLAM = NOTA13 GETLAM = NOTA22 GETLAM = NOTA31 GETLAM = NOTA4

    Si en algn caso vamos a usar varias variables temporales como por ejemplo:{ NULLLAM NULLLAM NULLLAM NULLLAM NULLLAM NULLLAM } BIND

    Esto mismo se puede realizar de forma mas compacta de modo que ocupe menos espacio:NULLLAM SIX NDUPNSIX {}N BIND

    Si queremos sobrescribir alguna variable temporal sin nombre se deber usar el comando PUTLAM,

    por ejemplo si queremos cambiar el valor de NOTA2se deber usar 3 PUTLAM.

    A continuacin se muestran los comandos que operan con variables temporales:

    35DEE 1ABNDSWAP ( objeto lamob objeto )Hace :: 1GETLAM ABND SWAP ;

    364FF 1GETABND ( lamob )Hace :: 1GETLAM ABND ;

    34616 1GETLAM(ob )

    346E8 22GETLAMDevuelve el contenido del enesimo lam

    35F42 1GETSWAP ( objeto lamob objeto )Hace :: 1GETLAM SWAP ;

    36518 1LAMBIND ( objeto )Hace :: 1NULLLAM{} BIND ;

    2B3A6 1NULLLAM{} ( { NULLLAM } )

    Devuelve una lista con un lam nulo34611 1PUTLAM ( objeto )Almacena un objeto en la primera variable temporal sin nombre.

    346E3 22PUTLAMAlmacena un objeto en el enesimo lam

    3632E 2GETEVAL ( ? )Llama y evala el objeto en el segundo lam

    07943 @LAM ( id objeto TRUE )

    ( id FALSE )Llama lampor nombre, devuelve el objeto y TRUEsi idexiste; si no devuelve FALSE

  • 5/28/2018 Programacin en SystemRpl

    54/138

    53

    07497 ABND ( )Abandona el entorno de variables temporales.

    074D0 BIND ( objeto ... { id ... } )Crea un nuevo entorno de variables temporales.

    34D00 CACHE ( objeton ... objeto1 n lam )Salva n objetos mas la cuenta n en un entorno temporal, estando unido cada objeto al mismoidentificador lam. El ltimo par tiene la cuenta.

    34EBE DUMP ( NULLLAM ob1..obn n )DUMP es esencialmente el inverso de CACHE, Pero funciona cuando el nombre cacheado esNULLLAMy siempre hace una recoleccin de basura.

    36513 DUP1LAMBIND ( objeto objeto )Hace DUPy luego 1LAMBIND

    34797 DUP4PUTLAM ( objeto objeto )Hace DUPy luego 4PUTLAM

    347AB DUPTEMPENVDuplica el entorno temporal de la cima y borra la palabra de proteccin.

    075A5 GETLAM ( #n objeto )Devuelve el objeto de la ensima variable temporal

    2B3AB NULLLAM ( NULLLAM )Nombre de variable temporal nulo

    075E9 PUTLAM ( objeto #n )Almacena un nuevo objeto en la ensima variable temporal

    07D1B STOLAM ( objeto id )Almacena un nuevo objeto en la variable temporal con nombre.

  • 5/28/2018 Programacin en SystemRpl

    55/138

    54

    20 - VARIABLES Y DIRECTORIOS

    El fundamento en RPL del sistema de las palabras de usuario STO y RCL son las palabras STO,CREATEy @:

    08696 CREATECrea en el directorio actual un directorio o programa dependiendo del contenido del objeto, serequiere el objeto en el nivel 2 de la pila y un ID (Nombre) en el nivel 1 de la pila.

    07D27 STOAlmacena el contenido del objeto del nivel 2 con un nombre en el directorio actual, es capaz desobrescribir un directorio, requiere un nombre global o local en nivel 1, y el objeto en el nivel 2.

    Nota: Esta palabra no es igual al comando de usuario STO.

    0797B @En el caso lam (Variables temporales), @intenta emparejar lam a la parte objeto identificadortemporal de una unin en el rea de Entornos Temporales (buscando desde la primera rea deentornos temporales (la mas interna) hacia la ltima). Si lo consigue, entonces el objeto unido al lamse devuelve junto con una bandera TRUE; si no, se devuelve una bandera FALSE.

    En el caso id, @intenta emparejar id con la parte nombre de una variable global, comenzando en eldirectorio actual y subiendo por los directorios padre si fuera necesario.Si no se consigue resolver, entonces se devuelve una bandera FALSE.Si se consigue resolver, se devuelve la parte objeto de la variable resuelta junto con una banderaTRUE.

    Una dificultad al usar STOy @es que no hacen ninguna distincin con los comandos incorporados.

    Por esta razn, es mejor usar SAFESTO y SAFE@, que funcionan como STO y @ excepto queconvierten automticamente los cuerpos ROM en nombres XLIB (SAFESTO) y al revs de nuevo(SAFE@).

    35A29 SAFESTOAlmacena el objeto del nivel 2 de la pila con el nombre del nivel 1 de la pila. Tambin es capaz desobrescribir un directorio.Ejemplo:

  • 5/28/2018 Programacin en SystemRpl

    56/138

    55

    35A5B SAFE@Requiere un nombre global o local, devuelve TRUEen el nivel 1 el contenido del nombre local oglobal en el nivel 2 de la pila si se encuentra el nombre, y devuelve FALSEen el nivel 1 si no seencuentra el nombre.

    EXTENSIONES ADICIONALES

    25E79 ?STO_HEREEsto es la versin del sistema del STO de usuario. Es igual que SAFESTO, excepto que con lasvariables globales.a)Almacena slo en el directorio actual.

    b)No sobrescribe un directorio.

    25EF7 SAFE@_HERERequiere un nombre global o local, devuelve TRUEen el nivel 1 el contenido del nombre local oglobal en el nivel 2 de la pila si se encuentra el nombre, y devuelve FALSEen el nivel 1 si no seencuentra el nombre.Igual que SAFE@, excepto que con los nombres globales la bsqueda se restringe al directorio actual.

    2F380 SysSTOGuarda el objeto del nivel 2 en el directorio HOMErequiere el nombre con el que ser guardado en elnivel 1.

  • 5/28/2018 Programacin en SystemRpl

    57/138

    56

    20.1 - OTRAS PALABRAS RELACIONADAS

    08C27 PURGEElimina la variable especificada por un id, no hace ninguna comprobacin de tipo en el objetoalmacenado.

    2F2A3 XEQRCLIgual que SAFE@con las variables globales, pero produce un error si la variable no existe. (Trae elcontenido de la variable que se indica en el nivel 1 de la pila.

    25E79 XEQSTOIDNombre alternativo de ?STO_HERE

    DIRECTORIOS.Un directorio tiene la forma DIRcontenido del directorioEND. Un directorio vaci simplemente tendr laforma DIREND.

  • 5/28/2018 Programacin en SystemRpl

    58/138

    57

    20.2 PALABRAS PARA LA MANIPULACIN DE DIRECTORIOS

    08D08 CONTEXT!Entra al directorio que tenga el contenido que se muestra en el nivel 1 de la pila. En este caso elcontenido del directorio de nombre HP es el que se muestra y al ejecutar el programa entra aldirectorio HP. Si el contenido del directorio que se muestra en el nivel 1 de la pila no corresponde aningn directorio no realiza ninguna accin.

    08D5A CONTEXT@Muestra en el nivel 1 de la pila el contenido del directorio actual

    25EA1 CREATEDIRCrea un directorio en el directorio actual.

    25EB9 DOVARSDevuelve una lista con los nombres de las variables del directorio actual.

    08D92 HOMEDIRHace de HOME el directorio actual.

    25EF1 PATHDIR

    Devuelve el camino actual.

    2F265 UPDIRSube un directorio.

  • 5/28/2018 Programacin en SystemRpl

    59/138

    58

    2F296 XEQORDEROrdena el directorio actual, requiere una lista con el orden de los objetos.

    25F14 XEQPGDIRElimina un directorio mientras respeta las convenciones de referencia/recoleccin de basura. Requiereel nombre del directorio a eliminar.

    077E4 CRDIR# ( #libnumrrp )Devuelve un directorio vaco en la pila, requiere un numero #.

    08DF2 !CREATEDIR ( id )Crea un directorio vaco, requiere como entrada un id, no verifica si el nombre esta en uso.Es lo equivalente a:: : # 7FF CRDI R# SWAP CREATE ;

    082E3 RAM-WORDNAME( obid )Devuelve el id de un objeto.

    2F296 XEQORDER ( {id1 id2..})Ordena las variables del directorio segn como este en una lista.

  • 5/28/2018 Programacin en SystemRpl

    60/138

    59

    20.3 EL DIRECTORIO OCULTO

    La HP49G al igual que la HP48 tiene un directorio oculto en el cual se guardan algunas variablesAlarms, UserKeysy UserKeys.crcalgunos programas usan este directorio para almacenar algunasvariables.

    Las palabras que veremos a continuacin proporcionan capacidades de almacenamiento, llamada yeliminacin en el directorio oculto:

    37104 StoHiddenVarAlmacena un objeto en el directorio oculto, para esto se debe colocar el contenido del objeto y elnombre con el que ser guardado.

    370AF RclHiddenVarLlama al contenido de una variable que este almacenada en el directorio oculto, para esto se debeponer el nombre de la variable, si la variable existe devolver el contenido de la variable y la banderaTRUE, de lo contrario devolver la bandera FALSE.

    37118 PuHiddenVarElimina una variable oculta para esto se debe poner el nombre de la variable a eliminar en el nivel 1.

  • 5/28/2018 Programacin en SystemRpl

    61/138

    60

    21 OBJETOS DE UNIDADESA continuacin se vern algunos comandos para manejar unidades.

    2F087 UM=?Devuelve el nmero real 1. (Verdadero) si dos objetos de unidades son iguales.Devuelve el nmero real 0.(Falso) si dos objetos de unidades son diferentes.

    2F07C UM#?Devuelve el nmero real 1. (Verdadero) si la unidad 1 es diferente a la unidad 2.Devuelve el nmero real 0. (Falso) si la unidad 1 es igual a la unidad 2.

    2F086 UM

  • 5/28/2018 Programacin en SystemRpl

    62/138

    61

    2F07A UM>UReemplaza la parte numrica de un objeto unidad.

    2F07D UM%Devuelve el porcentaje del objeto unidad que esta en el nivel 2 de la pila. En el nivel 1 se indica elporcentaje en nmeros reales.

    En este ejemplo saca el 12% de 98 metros.

    2F07E UM%CHDevuelve la diferencia porcentual de la unidad 2 respecto a la unidad 1 en nmeros reales.

    2F07F UM%TDevuelve la fraccin porcentual en nmeros reales.

    2F081 UM+Suma la unidad 1 con la unidad 2.

    2F082 UM-Resta la unidad 1 con la unidad 2.

    2F080 UM*Multiplica la unidad 1 con la unidad 2.

  • 5/28/2018 Programacin en SystemRpl

    63/138

    62

    2F083 UM/Divide la unidad 1 con la unidad 2.

    2F08A UMABSValor absoluto de la unidad del nivel 1.

    2F08B UMCHSCambio de signo al objeto unidad.

    2F08C UMCONVConvierte las unidades del nivel 2 a las unidades del nivel 1.

    2F08E UMMAX

    Devuelve la mayor unidad de las unidades del nivel 1 y2.

    2F08F UMMIMDevuelve la menor unidad de las unidades de los niveles 1 y 2.

    2F090 UMSIConvierte a las unidades del nivel uno a las unidades del Sistema Internacional (SI)

    2F093 UMSQRTSaca la raz cuadrada a la unidad del nivel 1.

  • 5/28/2018 Programacin en SystemRpl

    64/138

    63

    2F095 UMU>Devuelve la parte numrica y la unidad de un objeto de unidad que se encuentre en el nivel 1.

    2F019 UNIT>$Convierte el objeto unidad en una cadena de texto.

  • 5/28/2018 Programacin en SystemRpl

    65/138

    64

    22 - OBJETOS ETIQUETADOSEstn disponibles las siguientes palabras para manipular objetos etiquetados.Recuerda que un objeto puede tener etiquetas mltiples.

    2F223 %>TAGEtiqueta el objeto del nivel 2 con el nmerodel nivel 1.

    05E81 >TAGEtiqueta el objeto del nivel 2 con el stringdel nivel 1.

    05F2E ID>TAGEtiqueta el objeto del nivel 2 con el IDo variable temporal del nivel 1.

    37ABE STRIPTAGSQuita las etiquetas del objeto del nivel 1.

    37B04 TAGOBSEtiqueta un objeto, o varios objetos si hay una lista de etiquetas en el nivel 1

  • 5/28/2018 Programacin en SystemRpl

    66/138

    65

    22 - HERRAMIENTAS DE ERROR

    Las siguientes palabras se suministran para el control de errores:

    04E5E ERRSETInicia la captura de errores.

    04EB8 ERRTRAPSi ocurre un error ejecuta otro programa.

    SINTAXIS:::ERRSET::PROGRAMA A SER EXAMINADO;

    ERRTRAP::PROGRAMA A EJECUTAR EN CASO DE QUE OCURRA UN ERROR;

    ;

    Ejemplo:

    ::ERRSET::CK1%1%+;

    ERRTRAP::COLOCA CUALQUI ER NUMEROFl ashMsg%1dowai t

    ;;@

    26067 ERRBEEPGenera un pitido de error.

    2EE61 FlashWarningGenera un pitido de error y muestra un mensaje de error.

    Ejemplo:::ACABA DE OCURRI R UN ERRORFl ashWarni ng;@

  • 5/28/2018 Programacin en SystemRpl

    67/138

    66

    04EA4 ABORTHace ERRORCLRy ERRJMPes parecido al comando de usuario KILL.

    25EAE DO#EXITAlmacena un nuevo nmero de error y ejecuta ERRJMP; tambin ejecuta AtUserStack, requierecomo entrada el nmero del error en enteros binarios.

    3619E 'ERRJMPPone el objeto ERRJMPen la pila

    04ED1 ERRJMPInvoca al subsistema de control de errores.

    04CE6 ERROR@Devuelve el nmero de error actual en enteros binarios.

    04D33 ERRORCLRAlmacena cero como el nmero de error

    36883 ERROROUTAlmacena un nuevo numero de error y hace ERRJMP, requiere como entrada el nmero de error enenteros binarios.

    04D0E ERRORSTOAlmacena un nuevo numero de error, requiere como entrada el nmero de error en enteros binarios.

    04EB8 ERRTRAPSe salta el siguiente objeto del "runstream".

  • 5/28/2018 Programacin en SystemRpl

    68/138

    67

    23 - LA PANTALLA

    2EE69 SetDA1Temp Congela el Area de la pantalla 12EE8A SetDA2aTemp Congela el Area de la pantalla 2a2EE6A SetDA2bTemp Congela el Area de la pantalla 2b2F37A SetDA2OKTemp Congela el Area de la pantalla 2a y 2b.2EE6B SetDA3Temp Congela el Area de la pantalla 3.

    2EE71 SetDA12Temp Congela el Area de la pantalla 1 y 22EE64 SetDAsTemp Congela toda el Area de la pantalla2EE8D ClrDA1OK Redibuja el Area de la pantalla 12EE8E ClrDA2aOK Redibuja el Area de la pantalla 2a2EE8F ClrDA2bOK Redibuja el Area de la pantalla 2b2EE90 ClrDA2OK Redibuja el Area de la pantalla 2a y 2b2EE6E ClrDA3OK Redibuja el Area de la pantalla 32EE6D ClrDAsOK Redibuja toda el Area de la pantalla.2EF5E BlankDA1 Borra el Area de la pantalla 12F31B BlankDA2 Borra el Area de la pantalla 22EE5C BlankDA12 Borra el Area de la pantalla 1y 2261C5 CLEARLCD Borra toda el Area de la pantalla.

  • 5/28/2018 Programacin en SystemRpl

    69/138

    68

    23.1 GRAFICOS Y PANTALLA

    25F7C $>GROBConvierte un string en un grob.

    25ED8 GROB>GDISPAlmacena el grob que se muestra en la pila en la pantalla grafica. (grob grfico)

    2609E INVGROBInvierte los colores de un grob.

    26085 GROBDIMDevuelve el alto y el largo de un grob en enteros binarios.

    36C68 GROBDIMwDevuelve el largo de un grob en enteros binarios.

    2607B GROB!Almacena el grob1 dentro del grob2. ( grob1 grob2 #x #y)

    2F342 GROB+#

    Inserta el grob 2 dentro de la posicin especificada del grob1, usando ORsi flag es TRUEo XORsiflag es FALSE. ( flag grob1 grob2 #x #ygrob' )

    2F0DB MAKEPICT# ( #w #h)Crea un grob grafico en blanco. El tamao mnimo debe ser 131x64.si el grob es mas pequeoentonces automticamente lo redimensiona.

    2F324 CKGROBFITSDisminuye el grob2 si no cabe ( encaja ) en el grob1.( grob1 grob2 #n #mgrob1 grob2' #n #m )

    2F320 CHECKHEIGHT( grob #alto)

    Fuerza al grob (ABUFF/GBUFF) a tener menos de 64 filas de alto.

  • 5/28/2018 Programacin en SystemRpl

    70/138

    69

    260B2 MAKEGROBCrea un grob en blanco, para esto se necesita dar el alto y largo del grob en enteros binarios.Ejemplo:::2610

    MAKEGROB;@Este ejemplo va a crear un grob en blanco de tamao 10de largox 26de alto.

    25F0E XYGROBDISPMuestra un grob en pantalla requiere de 3 argumentos, las coordenadas de #x y #y y el grob a

    mostrar.

    26080 GROB!ZEROPone a cero una seccin rectangular del grob. Requiere el grob y las coordenadas.( grob #x1 #y1 #x2 #y2grob' )

    368E7 GROB!ZERODRPPone a cero una seccin rectangular de un grob. Requiere el grob y las coordenadas que se van aponer a cero. ( grob #x1 #y1 #x2 #y2 )

    2608F HARDBUFFDevuelve el grob de la pantalla actual (HBgrob (el grob de pantalla actual) )

    26099 HEIGHTENGROBAade #filas al grob, a menos que el grob sea nulo, requiere el grob y el nmero de filas a agregar.( grob #filas )

    2EFA0 LINEOFFBorra los pxeles en una lnea del grob de texto. Requiere las coordenadas ( #x1 #y1 #x2 #y2 )Nota: #x2 debe ser mayor que #x1 (usar ORDERXY#)Ejemplo:::BI NT0BI NT14

    BI NT131BI NT14LI NEOFFSet DA1Temp

    ;@

  • 5/28/2018 Programacin en SystemRpl

    71/138

    70

    2EFA3 LINEOFF3Borra los pxeles en una lnea del grob grfico. Requiere las coordenadas ( #x1 #y1 #x2 #y2 )Nota: #x2 debe ser mayor que #x1 (usar ORDERXY#)Ejemplo:::BI NT0

    BI NT14BI NT131BI NT14LI NEOFF3

    ;@

    2EF9F LINEONActiva los pxeles en una lnea del grob de texto. Requiere las coordenadas ( #x1 #y1 #x2 #y2 )Nota: #x2 debe ser mayor que #x1 (usar ORDERXY#)Ejemplo:::BI NT0BI NT20BI NT131BI NT20LI NEON

    Set DAsTemp;@

    2EFA2 LINEON3Activa los pxeles en una lnea del grob grfico. Requiere las coordenadas ( #x1 #y1 #x2 #y2 )Nota: #x2 debe ser mayor que #x1 (usar ORDERXY#)Ejemplo:::BI NT0BI NT20BI NT131BI NT20LI NEON3

    ;@

  • 5/28/2018 Programacin en SystemRpl

    72/138

    71

    280C1 ORDERXY#Ordena dos puntos para dibujar una lnea, requiere las coordenadas ( #x1 #y1 #x2 #y2 ), los ordena ydevuelve las nuevas coordenadas ya ordenada ( #x1 #y1 #x2 #y2 )

    260E4 PIXONActiva un pxel en el grob de texto. requiere la coordenada ( #x #y) del pxel a activar.

    260DF PIXOFFBorra un pxel en el grob de texto, requiere la coordenada ( #x #y) del pxel a borrar.

    260EE PIXON?Devuelve TRUEsi el pxel del grob de texto esta activado. requiere la coordenada del pxel apreguntar.

    ( #x #y

    flag )260DA PIXON3Activa un pxel en el grob grfico requiere la coordenada del pxel (punto) ( #x #y )

    260D5 PIXOFF3Borra un pxel en el grob grfico requiere la coordenada ( #x #y) del pxel a borrar.

    260E9 PIXON?3Devuelve TRUEsi el pxel del grob grfico esta activado, requiere la coordenada del pxel apreguntar.( #x #y flag )

    255BF PixonBDibuja un pxel de color negro.Requiere un grob y la coordenada ( #x1 #y1 ).

    255BA PixonWDibuja un pxel de color blanco.Requiere un grob y la coordenada ( #x1 #y1 ).

    255C4 PixonG1Dibuja un pxel de color gris ligero.Requiere un grob y la coordenada ( #x1 #y1 ).

    255C9 PixonG2Dibuja un pxel de color gris oscuro.Requiere un grob y la coordenada ( #x1 #y1 ).

    255CE PixonXorDibuja un pxel invirtiendo el color del pxel.Requiere un grob y la coordenada ( #x1 #y1 ).

  • 5/28/2018 Programacin en SystemRpl

    73/138

    72

    2612F SUBGROB ( grob #x1 #y1 #x2 #y2subgrob )Corta una parte de un grob requiere el grob y las coordenadas ( #x1 #y1 #x2 #y2 ) que van a serrecortar para crear el nuevo grob.Por ejemplo asumiendo que tenemos el siguiente grob en el nivel 1 de la pila.

    Si ejecutamos el programa:

    Entonces obtenemos:

    2EFA1 TOGLINEDibuja una lnea inviertiendo los colores (pixeles) del grob de texto.Requiere las coordenadas de la lnea. ( #x1 #y1 #x2 #y2 )#x2 debe ser mayor que #x1 para dibujar la lnea

    2EFA4 TOGLINE3Dibuja una lnea invirtiendo los colores (pixeles) del grob grfico.Requiere las coordenadas de la lnea. ( #x1 #y1 #x2 #y2 )#x2 debe ser mayor que #x1 para dibujar la lnea

    255EC LBoxG1Dibuja un rectngulo de color gris ligero , requiere un grob y las coodernadas ( #x1 #y1 #x2 #y2 )Ejemplo:::12 1649 45

    LBoxG1;@

    Nota:Se supone que antes de ejecutar el programa se esta colocando un grob que tiene dibujado un rectangulocon las coordinadas que se muestra en el ejemplo.

    27AA3 NULLGROB_Dibuja un grob nulo de 0 x 0.

  • 5/28/2018 Programacin en SystemRpl

    74/138

    73

    280C1 ORDERXY#Ordena los nmeros enteros binarios ( #x1 #y1 #x2 #y2 ), para dibujar un grob.

    280F8 ORDERXY%Ordena los nmeros reales ( %x1 %y1 %x2 %y2 ), para dibujar un grob.

    255F1 LBoxG2Dibuja un rectngulo de color gris oscuro, requiere un grob y las coordenadas ( #x1 #y1 #x2 #y2 ).Ejemplo:::12 1649 45LBoxG2;@

    255FB LBoxXorDibuja un rectngulo invirtiendo los colores ( Pixeles ).Requiere un grob y las coordenadas ( #x1 #y1 #x2 #y2 ).Ejemplo:::12 1649 45

    LBoxXor;@

    255A1 Grey?Devuelve TRUEsi el grob es de escala de grises. De lo contrario FALSE. Requiere un grob.

    2F32C DRAWBOX#Dibuja un rectangulo en el grob grafico requiere las coordenadas ( #x1 #y1 #x2 #y2 )Ejemplo:::20 3060 50DRAWBOX#

    ;@

  • 5/28/2018 Programacin en SystemRpl

    75/138

    74

    2F218 CircleWDibuja un circulo de color blanco. Requiere un grob la coordenada de #x de #y y el radio #r delcirculo. Todo en nmeros enteros binarios.Ejemplo:::64 131 MAKEGROB I NVGROB50 2515CircleW

    ;@

    2F216 CircleG1

    Dibuja un circulo de color gris ligero. Requiere un grob la coordenada de #x de #y y el radio #r delcirculo. Todo en nmeros enteros binarios.

    2F217 CircleG2Dibuja un circulo de color gris oscuro. Requiere un grob la coordenada de #x de #y y el radio #r delcirculo. Todo en nmeros enteros binarios.

    2F215 CircleBDibuja un circulo de color negro. Requiere un grob la coordenada de #x de #y y el radio #r delcirculo. Todo en nmeros enteros binarios.Ejemplo:::

    64 131 MAKEGROB50 2514CircleB

    ;@

    2F219 CircleXorDibuja un circulo invirtiendo los colores de los pixeles. Requiere un grob la coordenada de #x de #yy el radio #r del circulo. Todo en nmeros enteros binarios.

    255E2 FBoxXorDibuja un rectangulo relleno invirtiendo los colores de los pixeles.Requiere un grob y las coordenadas ( #x1 #y1 #x2 #y2 ).

    255F6 LBoxBDibuja un rectangulo de color negro requiere un grob y las coordenadas ( #x1 #y1 #x2 #y2 ).

    255E7 LBoxWDibuja un rectangulo de color blanco requiere un grob y las coordenadas ( #x1 #y1 #x2 #y2 ).

  • 5/28/2018 Programacin en SystemRpl

    76/138

    75

    255D3 FBoxWDibuja un rectangulo rellenado de color blanco.Requiere un grob y las coordenadas ( #x1 #y1 #x2 #y2 ).Ejemplo:::64 131 MAKEGROB I NVGROB20 1060 30PTR 255D3

    ;@

    255DD FBoxBDibuja un rectangulo rellenado de color negro.Requiere un grob y las coordenadas ( #x1 #y1 #x2 #y2 ).Ejemplo:::64 131 MAKEGROB20 1060 30FBoxB

    ;@

    255D3 FBoxG1Dibuja un rectangulo rellenado de color gris ligero.Requiere un grob y las coordenadas ( #x1 #y1 #x2 #y2 ).Ejemplo:::64 131 MAKEGROB I NVGROB20 10

    60 30FBoxG1;@

  • 5/28/2018 Programacin en SystemRpl

    77/138

    76

    255D8 FBoxG2Dibuja un rectangulo rellenado de color gris oscuro.Requiere un grob y las coordenadas ( #x1 #y1 #x2 #y2 ).Ejemplo:::64 131 MAKEGROB20 1060 30FBoxG2

    ;@

    23.2 COMO DESPLAZAR UN GROB

    Comandos que sirven para mover la pantalla mientras se mantienen pulsadas las teclas.2F36D SCROLLDOWN Desplaza la pantalla un pxel hacia abajo.2F36E SCROLLLEFT Desplaza la pantalla un pxel hacia la izquierda.2F36F SCROLLRIGHT Desplaza la pantalla un pxel hacia la derecha.2F370 SCROLLUP Desplaza la pantalla un pxel hacia arriba.

    Comandos que sirven para mover la pantalla directamente hacia un extremo.2F347 JUMPBOT Desplaza la pantalla directamente hacia abajo.

    2F348 JUMPLEFT Desplaza la pantalla directamente hacia la izquierda.2F349 JUMPRIGHT Desplaza la pantalla directamente hacia la derecha.2F34A JUMPTOP Desplaza la pantalla directamente hacia arriba.

    Comandos que sirven para mover la pantalla26193 WINDOWUP Desplaza la pantalla un pxel hacia arriba26184 WINDOWDOWN Desplaza la pantalla un pxel hacia abajo.26189 WINDOWLEFT Desplaza la pantalla un pxel hacia la izquierda.2618E WINDOWRIGHT Desplaza la pantalla un pxel hacia la derecha.

    Comandos que sirven para preguntar sobre el estado de la pantalla2F38D WINDOWTOP? Devuelve un flag indicando si la pantalla esta desplazada totalmente hacia

    arriba.2F38A WINDOWBOT? Devuelve un flag indicando si la pantalla esta desplazada totalmente hacia

    abajo.2F38B WINDOWLEFT? Devuelve un flag indicando si la pantalla esta desplazada totalmente hacia la

    izquierda2F38C WINDOWRIGHT? Devuelve un flag indicando si la pantalla esta desplazada totalmente hacia la

    derecha.

  • 5/28/2018 Programacin en SystemRpl

    78/138

    77

    24 - MENUS

    A continuacin se vern algunos comandos que sirven para hacer mens.Al referirnos a un grob de men nos referimos a un grob de dimensiones 21 x 8.

    En el siguiente cuadro se vern las coordenadas de los mens en x.MENS COORDENADA DEL MEN (ENTEROS BINARIOS)

    Men 1 ( F1) 0Men 2 ( F2) 22Men 3 ( F3) 44Men 4 ( F4) 66Men 5 ( F5) 88Men 6 ( F6) 110

    2E189 MakeBoxLabelConvierte un string en un grob de men (Recuadro con una cuadradito en su interior).

    2E1EB MakeDirLabelConvierte un string en un grob de men (recuadro con una barra de directorio)

    2E24D MakeInvLabel

    Convierte un string en un grob de men (etiqueta blanca )

    2E166 MakeStdLabelConvierte un string en un grob de men (etiqueta negra estndar)

    2E0F3 Str>Menu

    Convierte un string en un men requiere la coordinada en x y el string.Ej empl o:: :0 MENUSt r >Menu;@

  • 5/28/2018 Programacin en SystemRpl

    79/138

    78

    25E7F Box/StdLabel

    Convierte un string en un grob de men, requiere un string y un flag si el flag es TRUEdibuja unrecuadro, si es FALSEno dibuja nada.Ej empl o:: :MENU

    TRUEBox/ St dLabel;@

    2E0D5 Grob>Menu

    Muestra un grob de men, requiere la coordenada en x y el grob de men.Ejemplo:::22GROB 0003A 8000051000000000002000003000002000002000002000007000000000Gr ob>Menu;@

    A continuacin se vera un ejemplo donde se aplican todos los comandos anteriores.: :

    BI NT0 "MENU1" St r >MenuBI NT22 "MENU2" TRUE Box/ St dLabel Gr ob>MenuBI NT44GROB 0003A 8000051000000000002000003000002000002000002000007000000000Gr ob>MenuBI NT66GROB 0003A 8000051000000000007000001000001000007000005000007000000000Gr ob>MenuBI NT88 "HELP"TRUE Box/ St dLabel Gr ob>MenuBI NT110 "AQP" St r >MenuWai t ForKey

    ;@

    A continuacin algunas palabras para el control de los mens:

    2DFF4 DispMenu.1Actualiza y vuelve a mostrar el men actual.

    2DFE0 DispMenuActualiza y vuelve a mostrar el men actual y tambin llama a SetDA3Validpara congelar la lnea demen de la pantalla.

  • 5/28/2018 Programacin en SystemRpl

    80/138

    79

    27FED NullMenuKeyInserta un men en blanco.

    25EE0 InitMenuInicializa un men personalizado, este comando tiene la siguiente sintaxis:

    SINTAXIS:: :{ { MENU 1 : : Pr ograma 1 ; }

    { MENU 2 : : Pr ograma 2 ; }{ MENU 1 : : Pr ograma n ; }

    } I ni t Menu;@Si se desea introducir un men en blanco se puede hacer con el comando NullMenuKey.Ejemplo:

    : :{ { SUMA x+ } { RESTA x- } Nul l MenuKey Nul l MenuKey Nul l MenuKey{ Sal i r : : %0 I ni t Menu% ; } } I ni t Menu;@

    25F00 StartMenuSe usa para personalizar mens, requiere el men y el nmero en el que empezara el men.Ejemplo:: :{{ Menu1 : : Ej ecut ast e menu1 Fl ashMsg ; }{ Menu2 : : Ej ecut ast e menu2 Fl ashMsg ; }{ Menu3 : : Ej ecut ast e menu3 Fl ashMsg ; }

    }2Star t Menu;

    @

    Nota: en este ejemplo el 2 indica que empiece a mostrar a partir del men 2. al presionar NXT, aparecerntodos los mens.

    En ambos casos se puede incluir un grob de men en lugar de las etiquetas ($).

  • 5/28/2018 Programacin en SystemRpl

    81/138

    80

    25 - BACKUPS

    2F255 OB>BAKRequiere de 2 argumentos en el nivel 2un IDo LAM(El nombre que tendr la copia de Seguridad ) yen el nivel 1cualquier objeto.

    081D9 BAKNAMEDevuelve el ID o LAM de la copia de seguridad y la bandera TRUE.

    0905F BAK>OBDevuelve el contenido almacenado en la copia de seguridad.

  • 5/28/2018 Programacin en SystemRpl

    82/138

    81

    26 - DoImputFormCon este comando podemos crear mens como MODEo cuando entramos a resolver ecuaciones. Estecomando es un poco complejo requiere de lo siguiente:

    EtiquetasCampos# de Etiquetas# de CamposMessageHandler (Normalmente DROPFALSE)TituloDoImputForm

    EtiquetasCada etiqueta consta de 3 Argumentos:

    Nombre de la Etiqueta (En un String )Coordenada en X (En nmeros enteros binarios)Coordenada en Y (En nmeros enteros binarios)

    CamposCada campo requiere de 13 Argumentos:MessageHandler (NormalmenteDROPFALSE)Coordenada en X (En nmeros enteros binarios)Coordenada en Y (Normalmente la coordenada de laEtiquetaen Y + 2)Longitud (La longitud que va a tener el campo en nmeros enteros binarios)Altura (La altura que va a tener el campo normalmente es 9 )Tipo de Campo (El tipo de campo que se va a querer esto se describe mas abajo){ Tipos de Objetos } (Los tipos de objeto que va a aceptar el campo )Descompilacin Ayuda (La ayuda en un String )Datos Choose

    Descompilacin ChooseValor de reinicio ( Valor que aparecer si se presiona RESET)Valor inicial ( Valor inicial que aparecer en el campo)

    Tipo de Campo1 Campo de texto ( DF/EDF )3 Campo Algebraico ( DF )

    12 Lista de Campos ( LF )32 Check ( CF )44 Choose

    Tipo de Objeto

    MINUSONE Cualquier Objeto0 Reales1 Complejos2 String3 Formacin real4 Formacin compleja5 Lista6 ID8 Programa9 Simblicos

    10Entero Binario

    8 Programa13 Objeto Unidad

  • 5/28/2018 Programacin en SystemRpl

    83/138

    82

    DescompilacinModo Estndar 4Choose o Lista de campos 17MINUSONE Cualquiera

    Datos ChooseSi no hay datos en un CHOOSE o si no es un CHOOSE entoncesMINUSONE.

    Descompilacin ChooseSi es un campo Choose se deber colocar el entero binario 17.Si no es un campo Choose se deber colocar MINUSONE.

    Valor de reinicioSi es DF/EDFMINUSONESi es LF {etiqueta cuerpo}Si es CF TRUE/FALSE

    Valor inicialIgual que en los valores de reinicio si no se desea ningn valor inicial entonces MINUSONE.

    MessageHandlerEs un secundario que se pone en la pila pero que no se evala generalmente esDROPFALSE

    TituloEl titulo en un string.

    DoInputForm

    Resultados del comando DoImputFormLa salida al stack o pila del usuario al pulsar ENTERes:N+1:Campo 1N: Campo 2...2: Campo N1: TRUE

    Si se pulsa CANCLretornara el flag FALSE.

  • 5/28/2018 Programacin en SystemRpl

    84/138

    83

    Ejemplo 1:::

    "MARCA" BI NT10 BI NT12' DROPFALSEBI NT1 BI NT9BI NT6 BI NT9

    BI NT32MI NUSONE MI NUSONE"AYUDA"MI NUSONE MI NUSONEFALSE FALSEBI NT1 BI NT1' DROPFALSE"TI TULO"DoI nput For m

    ;@

    Ejemplo 2:: :

    "ELI GE" BI NT0 BI NT15' DROPFALSEBI NT24 BI NT11BI NT44 BI NT9BI NT12

    MI NUSONEBI NT17"AYUDA"{

    { "PARTE 1" : : "PROGRAMA 1" ; }{ "PARTE 2" : : "PROGRAMA 2" ; }{ "PARTE N" : : "PROGRAMA N" ; }

    }BI NT17

    { "PARTE 2" : : "PROGRAMA 2" ; }{ "PARTE 2" : : "PROGRAMA 2" ; }

    BI NT1 BI NT1' DROPFALSE

    "TI TULO"DoI nput For m

    ;@

  • 5/28/2018 Programacin en SystemRpl

    85/138

    84

    Ejemplo 3:: :* Definicin de las etiquetas"EQ: " BI NT0 BI NT11"VAR: " BI NT0 BI NT22"TOL" BI NT70 BI NT22

    "RAI CES COMPLEJ AS" BI NT10 BI NT31"MODO DEL ANGULO" BI NT0 BI NT41

    * Definicion del campo EQ

    ' DROPFALSEBI NT16 BI NT7BI NT107 BI NT10BI NT3MI NUSONEBI NT4"ENTRE UNA EQUACI ON"MI NUSONE MI NUSONEMI NUSONE MI NUSONE

    * Definicin del campo VAR

    ' DROPFALSEBI NT16 BI NT18BI NT30 BI NT9BI NT1{ BI NT6 }BI NT4""MI NUSONE MI NUSONEMI NUSONE MI NUSONE

    * Definicin del campo TOL

    ' DROPFALSEBI NT83 BI NT18BI NT40 BI NT9BI NT1{ BI NT0 }BI NT4" I NGRESA TOLERANCI A"MI NUSONE MI NUSONE% . 001% . 001

    * Definicion del campo Checkmark

    ' DROPFALSE

    BI NT1 BI NT28BI NT6 BI NT9BI NT32MI NUSONE MI NUSONE"RAI CES COMPLEJ AS?"MI NUSONE MI NUSONEFALSE FALSE* Definicion del campo ANGLE MODE

    ' DROPFALSEBI NT64 BI NT37BI NT30 BI NT9BI NT12MI NUSONE

    BI NT17"SELECCI ONA MODO DEL ANGULO"

  • 5/28/2018 Programacin en SystemRpl

    86/138

    85

    {{ "RAD" xRAD }{ "DEG" xDEG }

    }BI NT17{ "RAD" xRAD }

    { "RAD" xRAD }* Informacin GeneralBI NT5 BI NT5' DROPFALSE"RESOLVER EQUACI ON"DoInputForm

    ;@

  • 5/28/2018 Programacin en SystemRpl

    87/138

    86

    27 - COMANDOS QUE OPERAN EN UN PROGRAMA

    34AA1 ?SEMIRequiere un flag si este es TRUEsale del programa en curso.

    3692D ?SEMIDROPRequiere un objeto en el nivel 2 y un flag en el nivel 1 de la pila, si el flag es TRUEelimina el objetosi el flag esFALSEsale del 1programa en curso.

    0712A ?SKIPRequiere un flag si este es TRUE, se salta el siguiente programa a continuacin de ?SKIP.

    34A92 NOT?SEMIRequiere un flag si este es FALSEsale del programa en curso.

    0714D SKIPSalta un objeto en el runstream.

    0715C 2SKIPSalta los dos siguientes objetos en el runstream.Ej m:

    Al ejecutar el programa se saltaBINT1 BINT2y solo devuelveBINT3.

    349F9 caseCase toma una bandera de la pila; si es TRUE, case ejecuta el objeto que le sigue en el runstreammientras baja la pila de retornos al puntero del interprete, descartando el resto del programa que sigueal objeto (como COLA). Si es FALSE, case se salta el siguiente objeto y continua con el programa(como SKIP).SINTAXIS:: :f l ag case : : pr ogr ama 1 ;f l ag case : : pr ogr ama 2 ;

    .

    .

    .

    f l ag case : : pr ogr ama n ;: : pr ogr ama por def ect o ;

    ;@

    NOTA:Si ninguno de los flags es TRUEentonces ejecutaprograma por defecto,basta que un flagsea TRUE y se salta los demas objetos por ejemplo si el flag1 y el flag2 ambos son TRUE soloejecuta el flag1 como se explica en la definicin de case.

    Ej empl o:::40 Test SysFl agcase:: 40 Cl r SysFl ag ;:: 40 SetSysFl ag ;

    ;@

  • 5/28/2018 Programacin en SystemRpl

    88/138

    87

    Lo que hacen las palabras que se listan ms abajo esta generalmente suficientemente claro a partirde sus nombres.

    Los nombres tienen (hasta) tres partes: una parte inicial, luego "case" y luego una parte final. Laparte inicial indica que se hace antes de la accin "case", o sea, "xxxcase..." es equivalente a "xxxcase...".

    Las palabras que tienen una parte final despus de "case" son de dos tipos.

    En un tipo, la parte final indica el objeto mismo ejecutado condicionalmente, o sea, "...caseyyy" esequivalente a "...case yyy".

    En el otro tipo, la parte final es una palabra o palabras que se incorporan al siguiente objeto.caseDROP y casedrop son del primer y segundo tipo respectivamente. caseDROP es equivalente acase DROP; casedropes como casecon un DROPincorporado en el siguiente objeto.

    Palabras que hacen COLAo SKIPal siguiente objeto:

    34939 #=casedrop ( # # )( # #' # )

    Se deber a l l amar OVER#=casedropEj empl o:En est e ej empl o se deber col ocar un nmer o ent er o bi nar i o en l a pi l a.: :1 #=casedrop : : numero 1 Fl ashMsg ;2 #=casedrop : : numero 2 Fl ashMsg ;3 #=casedrop : : numero 3 Fl ashMsg ;4 #=casedrop : : numero 4 Fl ashMsg ;: : numero mayor que 4 Fl ashMsg ;

    ;@

    2B1A3 %1=case ( % )

    2B149 %0=case ( % f l ag )

    36E6B ANDNOTcase ( f l ag1 f l ag2 )

    36D4E ANDcase ( f l ag1 f l ag2 )

    34985 case2drop ( ob1 ob2 TRUE )( FALSE )

    03495 casedrop ( ob TRUE )( FALSE )

    348F7 DUP#0=case ( # # )

    3490E DUP#0=csedrp ( # # ) # #0( # ) # = #0

    36E7F EQUALNOTcase ( ob ob' )

    36D62 EQUALcase ( ob ob' )

    36D08 EQUALcasedrp ( ob ob' ob' )( ob ob' ob' ' ob )

    34999 EQcase ( ob1 ob2 )

  • 5/28/2018 Programacin en SystemRpl

    89/138

    88

    34A13 NOTcase ( f l ag )

    3494E NOTcasedrop ( ob FALSE )( TRUE )

    359E3 ORcase ( f l ag1 f l ag2 )

    348E2 OVER#=case ( # #' # )

    Palabras que o salen o continan con el siguiente objeto:

    36C4F caseDoBadKey ( f l ag ) Sal e v a DoBadKey

    349D6 case2DROP ( ob1 ob2 TRUE )( FALSE )

    349B1 caseDROP ( ob TRUE )( FALSE )

    365E5 caseFALSE ( TRUE FALSE )( FALSE )

    3652C caseTRUE ( TRUE TRUE )( FALSE )

    365B3 casedrpfls ( ob TRUE FALSE )( FALSE )

    365CC case2drpfls ( ob1 ob2 TRUE FALSE )( FALSE )

    368FB casedrptru ( ob TRUE TRUE )( FALSE )

    36D21 DUP#0=csDROP ( #0 )( # # ) # 0.

    36914 NOTcaseTRUE ( FALSE TRUE )( TRUE )

    29E99 tok=casedrop ( $ $' : : ob1; )( $ $' : : $ ob2 r est ; )

    34ABE ITE_DROP ( ob T : : ob2 rest ; )( ob F : : ob ob1rest ; )

    36F65 UserITE ( #set : : ob1 ob3 rest ; )( #cl r : : ob2 rest ; )

    36F79 SysITE ( #set : : ob1 ob3 rest ; )( #cl r : : ob2 r est ; )

  • 5/28/2018 Programacin en SystemRpl

    90/138

    89

    28 - MENSAJES TEMPORALES

    A veces es conveniente mostrar una advertencia y luego devolver la pantalla a su estado previo. Hayvarias tcnicas y herramientas disponibles para esto. El modo mas fcil de hacerlo es con la palabraFlashWarning.

    2EE61 FlashWarningMuestra un mensaje de error y emite un pitido de error.Ejemplo::: PELIGRO FlashWarning ;

    NOTA: Es importante usar DISPROW1* y DISPROW2* en vez de DISPROW1 y DISPROW2 si existe laposibilidad que HARDBUFF haya sido desplazado.

    No existen las palabras correspondientes para otras lneas de la pantalla.

  • 5/28/2018 Programacin en SystemRpl

    91/138

    90

    29 - UBICACION DE LAS TECLAS

    La palabra de usuario WAITdevuelve un nmero real que es esta codificado de la forma rc.p donde:

    r= La fila de la teclac= La columna de la teclap= El plano de desplazamiento

    Entre los planos de desplazamiento tenemos los planos 1, 2, 3, 4, 5 y 6 que se describen en lassiguientes 2 tablas.

    P PLANOS PRINCIPALES1 Sin desplazar

    2

    3

    p PLANOS ALFA4

    5

    6

    La traduccin entre la numeracin interna de las teclas y la numeracin rc.p se puede llevar a cabocon dos palabras:

    25EA7 Ck&DecKeyLoc ( %r c. p #Cdi goTecl a #Pl ano )

    25EA9 CodePl>%rc.p ( #Cdi goTecl a #Pl ano %r c. p )

  • 5/28/2018 Programacin en SystemRpl

    92/138

    91

    29.1 - ESPERAR UNA TECLA

    Si una aplicacin necesita esperar a que se pulse una sola tecla, lo mejor es usar la palabraWaitForKey, que devuelve la tecla pulsada en el formato completo (tecla + plano).

    WaitForKey tambin controla los indicadores alfa y desplazamiento as como el procesado de

    alarmas.

    Estn disponibles las siguientes palabras:

    04708 CHECKKEY ( #Cdi goTecl a TRUE )( FALSE )

    Devuelve, pero no la saca, la siguiente tecla en el bufer.

    261CA FLUSHKEYS

    Vaca el bfer de teclado

    04714 GETTOUCH ( #Cdi goTecl a TRUE )( FALSE )

    Devuelve y saca la siguiente tecla del bfer.

    25EE3 KEYINBUFFER?Devuelve TRUEsi hay una tecla en el bfer de teclado, si no devuelve FALSE.

    25FAE ATTN?

    Devuelve TRUEsi se ha pulsado [ATTN] de lo contrario devuelve FALSE.

    05068 ATTNFLGCLR

    Borra la bandera de la tecla attn (no saca la tecla attn del bfer)

    25F0B WaitForKey ( #Cdi goTecl a #Pl ano )Devuelve la siguiente tecla que se pulse en formato completo (tecla + plano) Por ejemplo si pulsamosSPCdevuelve el siguiente cdigo:

  • 5/28/2018 Programacin en SystemRpl

    93/138

    92

    30 - EL BUCLE EXTERNO PARAMETRIZADO

    En esta seccin, el termino "bucle externo parametrizado" se usa para referirse al uso de la palabraRPL "ParOuterLoop" o al uso combinado de las utilidades fundamentales que lo componen, todo locual se puede ver como palabras que toman el control del teclado y de la pantalla hasta que secumple una condicin especificada.

    El bucle externo parametrizado, "ParOuterLoop", toma nueve argumentos en este orden:

    AppDisplayEl objeto de actualizacin de la pantalla que se evala antes de la evaluacin de cada tecla."AppDisplay" debera controlar la actualizacin de la pantalla no controlada por las teclas mismas ytambin debera realizar un control especial de errores.

    AppKeysLas asignaciones de las teclas fsicas, un objeto secundario con el formato que se describe msabajo.

    NonAppKeyOK?

    Una bandera (Flag)que especifica si las teclas fsicas no asignadas por la aplicacin deben realizarsus acciones por defecto o ser canceladas.

    DoStdKeys?Una bandera que se usa conjuntamente con "NonAppKeyOK? que especifica si las teclas que nousa la aplicacin usan las definiciones estndar de las teclas en lugar del procesado de teclas pordefecto.

    AppMenuLa especificacin de las teclas de men, un secundario o una lista con el formato especificado en eldocumento de asignaciones de teclas de men, o FALSE

    #AppMenuRowEl nmero de fila del men inicial de la aplicacin. En la mayora de las aplicaciones, debe ser elentero binario uno.

    SuspendOK?Una bandera que especifica si cualquier comando de usuario que creara un entorno suspendido yrestaurara el bucle externo del sistema debera generar en su lugar un error o no.

    ExitCondUn objeto que se evala a TRUEcuando se va a salir del bucle externo o si no, FALSE. "ExitCond"se evala antes de cada actualizacin de la pantalla y de cada evaluacin de tecla de la aplicacin.

    AppErrorEl objeto controlador de errores que se evala si se produce un error durante la parte del bucleexterno parametrizado de evaluacin de una tecla.

    El bucle externo parametrizado mismo no devuelve ningn resultado.Sin embargo, cualquiera de las teclas usadas por la aplicacin puede devolver resultados a la pila dedatos o de cualquier manera que se quiera.

  • 5/28/2018 Programacin en SystemRpl

    94/138

    93

    30.1 - UTILIDADES DEL BUCLE EXTERNO PARAMETRIZADO

    La palabra del bucle externo parametrizado "ParOuterLoop" consiste enteramente en llamadas (conel adecuado control de errores) a sus cuatro palabras de utilidades RPL, que son, en orden:

    2B4AC POLSaveUI

    Salva la actual interfase de usuario (UI) en un entorno temporal. No toma argumentos y no devuelveningn resultado.

    2B542 POLSetUIDispone (configura) el interfase de usuario actual de acuerdo a los mismos par metros que requiereel "ParOuterLoop". No devuelve ningn resultado.

    2B628 POLKeyUIMuestra, lee y evala teclas, controla errores y sale de acuerdo a la interfase de usuario especificadopor "POLStetUI". No toma ningn argumento ni retorna ningn resultado.

    2B6CD POLRestoreUIRestaura la interfase de usuario salvado por "POLSaveUI"y abandona el entorno temporal.

    No toma ningn argumento ni devuelve ningn resultado.

    Adems de las cuatro utilidades de arriba, se usa la utilidad:

    2B6B4 POLResUI&ErrPara proteger el interfase de usuario salvado en el caso de un error que no se controla dentro delbucle externo parametrizado.

    Estas utilidades pueden usar las aplicaciones que requieren un mayor control sobre la interfase deusuario. Por ejemplo:

    - Para una ejecucin ptima, una aplicacin puede crear un entorno temporal con variablestemporales con nombres nulos despus de llamar a "POLSaveUI", luego acceder a las variables

    con nombres nulos "dentro" de "POLKeyUI" , ya que solo "POLSaveUI"crea un entorno temporaldel bucle externo parametrizado y solo "POLRestoreUI" accede al mismo entorno.

    - Para evitar gastos innecesarios y que consumen tiempo, una aplicacin que usa mltiples buclesexternos parametrizados consecutivos (no anidados) puede llamar a "POLSaveUI"alprincipio de la aplicacin, luego llamar a "POLSetUI" y a "POLKeyUI" mltiples veces a lo largo dela aplicacin y finalmente llamar a "POLRestoreUI" al final de la aplicacin.

  • 5/28/2018 Programacin en Sys