Rautenberg Logo

Keyman

Un pequeño pero poderoso administrador de teclas para la HP49G/HP49G+

Keyman maneja asignaciones de teclas sensibles al modo. Puede ser guardado en cualquier puerto y se instala como cualquier otro programa. Además de shift-sostenido (mantener presionada la tecla shift, mientras se presiona otra tecla), Keyman soporta dos funcionalidades de teclado adicionales, el doble-click como en un ratón de PC y el long-pressed (mantener presionada una tecla por un periodo más largo que el normal). Con estas herramientas, la asignación de teclas se puede realizar sin perturbar la función estándar de las teclas. Se debiera preferir asignar teclas, o teclas con shift-sostenido, que sean prescindibles en los modos de edición y por defecto. Usando las posibilidades de shift-sostenido y “longhold” (long-pressed)  pueden haber más de 100 asignaciones de tecla en modo USR, sin que ninguna de ellas entre en conflicto con las funciones estándar de una tecla. Hay un ejemplo de asignaciones de tecla opcionales en More, que no afectan las teclas estándar. Claramente, esto tiene que pagarse teniendo un leve mayor cuidado al operar las teclas. Nosotros recomendamos asignar herramientas relacionadas a la misma tecla, en agrupaciones, similar a los ejemplos 3 y 4 de más abajo.

Importante: sólo para las versiones de ROM 1.19-3 o mayores. Para la HP49G+, cargar KeymanPlus (alias Keyman+). En la HP49+ una variable global lht (long hold time) debe ser creada con un zint en ella de un valor aproximado a 1000. En la HP49, lht puede pero no necesita existir.


¿Qué es lo NUEVO?

Versión 1.2004 sólo Keyman+. La última de las asignaciones de teclas opcionales en More, o 0..3, incluye también Port3 (Tarjeta-SD). Cada una de las teclas numéricas 0, 1, 2, 3 establece el navegador de puerto correspondiente si la tecla se presiona longhold.

Versión 9.2003: Asignación de teclas propuesta en ShiftDerecho-Sostenido F1 – F6 mejorada.

Versión 8.2003: El tiempo de longhold puede ahora configurarse opcionalmente creando la variable global lht, revise en IfL más abajo. Se agregó KeymanPlus, para la HP49G+

Versión 7.2003: Reorganización del navegador More, que incluye también un longhold para listar los RclK. El comando OVER es agregado a las asignaciones propuestas en More. El tiempo de Longhold debiera ahora funcionar también en un buen emulador. Este documento es una versión revisada en html, basada en Keyman.txt. Colocando el cursor sobre una imagen entrega información adicional.

Versión 6.2003: Por razones de seguridad, el navegador de mapas de teclas en More, busca mapas de teclas solamente en puertos.

Versión 4.2003: Asignaciones en las teclas 0, 1 y 2 son agregadas en More, estableciendo el puerto correspondiente de forma inmediata.

Versión 3.2003: ASMTs renombrado a More. Este ahora contiene, además de asignaciones de teclas, algunas herramientas adicionales incluyendo el grabador de teclas. Estos son ejecutados sólo directamente, por lo tanto son acumulados en un cuadro de selecciones. Esto garantiza compatibilidad con versiones anteriores.

Versión 1.2003: La asignación LEFTarrow (FlechaIzquierda) ahora se repite. Manteniendo presionada la tecla FlechaIzquierda, se conduce UPDIR (directorio arriba) hacia HOME, pero se puede detener en cualquier “estación”. Donde sea que uno se detenga, una vuelve a la página de menú donde el subdirectorio está localizado.

Importante: Las personas que estaban usando doble-click de versiones de Keyman inferiores a 7.2001 deben renombrar en las asignaciones ROMPTR 4B0 7 a ROMPTR 4B0 C (nueva localización del detector de doble-click). Se puede hacer fácilmente con la librería OT49.


Abreviaciones: LS = Shift-Izquierda, RS = Shift-Derecha, LS_= Sostener_ShiftIzquierda, RS_= Sostener_ShiftDerecha, i.e., el shift es sostenido mientras se presiona otra tecla. o = Longhold (Presionar más tiempo que el normal)- = denota FlechaIzquierda y símbolos similares denotan las otras teclas de Flechas de dirección. Aquí la descripción de los ocho comandos de Keyman en detalle.

IfD

Necesita dos argumentos, objetos arbitrarios O2 y O1 en nivel 2 y 1, respectivamente. Coloca un programa en la pila que, si es asignado a una tecla, evalua O2 si en la tecla se hace doble-click u O1 en caso contrario, vea el Ejemplo 1. La salida de IfD debe ser procesada con TO? siempre que sea directamente asignada, vea TO?. La ejecución es levemente retrasada ya que la detección del doble-click necesita unos 0.3 segundos. Presionar dos teclas diferentes en secuencia no se debe realizar de forma apresurada, ya que puede ser erróneamente interpretado como un doble-click.

Nuevo desde la version 6.2001. En lugar de escoger una asignación estándar para O2 u O1, uno también puede tomar su keycode (código de la tecla), i.e., un real de la forma rc.p (r=row(fila), c=column(columna), p=plane(plano)). rc.p será automáticamente reemplazado por la correspondiente asignación estándar. Un real no identificado como un código de tecla (e.g., el real 1), solamente hará beep (un sonido), vea el ejemplo 5. Los objetos O1 y O2 pueden también ser grabaciones generadas por RecordKeys de More. Todo lo dicho en este párrafo se cumple también para la otras If-opciones.

IfL

Necesita dos argumentos, objetos arbitrarios O2 y O1 en nivel 2 y 1. Crea un programa que, si es asignado a una tecla, ejecuta O2 si  la tecla se presiona más tiempo que el normal y O1 en caso contrario. Usted rápidamente lograra sentir lo que “presionar más tiempo” significa. Mejor ejercite con el comando A?D o algunos ejemplos del Apéndice. El tiempo de longhold por defecto es de aproximadamente 0.3 segundos en la HP49G (con un KEYTIME de 1200).

Nuevo desde la version 8.2003. Si el tiempo de longhold no le acomoda, cree una variable llamada lht en HOME con un zint o un real en ella. 0 corresponde al tiempo razonable más pequeño de longhold (para emuladores lentos). El tiempo por defecto, sin ningún lht en el path (la ruta) corresponde a 50. El escalamiento es abierto a lo de arriba y permite un ajuste fino óptimo. 100 en lht puede aún estar bien en la HP49. Pero la HP49+ necesita un valor superior a 900 ya que corre mucho más rápido.

IfE?P

Comprende IfE (“IfEdit”) e IfP (“IfPRG”). IfE?P tiene dos argumentos, objetos arbitrarios O2 y O1 en los niveles 2 y 1. Presionada normalmente, IfE?P coloca un programa en la pila que, si se asigna a una tecla, evalua O2 si la tecla se presiona en modo edición (i.e., una línea de comando o una línea de edición existe) y O1 en caso contrario. En otras palabras, la asignación corre el programa «Si en modo de edición entonces O2 en caso contrario O1 ». Los delimitadores de UsrRPL para describir la asignación, aquí son en parte mal usados dejar las cosas más claras, el programa mismo no puede ser escrito en UsrRPL. Esta división-de-tareas es indispensable al asignar las teclas de dirección, las cuales claramente deben preservar su función de mover-el-cursor en el modo de edición. Lo mismo para la combinación RS APPS, la cual está activa sólo en el modo de edición. En estos y otros casos, O2 es usualmente una asignación estándar de la tecla asignada (obtenida con K&SA) o su código de tecla. Presionando IfE?P un tiempo mayor al normal, se crea un programa que, si es asignado a una tecla, evalua O2 si la tecla es presionada en modo-PRG y O1 en caso contrario. Lo que se ha escogido, IfE o IfP, es mostrado. En el caso-IfP, O2 no debe ser hecho por el usuario (la tecla hará beep). Cadenas de caracteres, comandos y algunos otros objetos son impresos en la línea de edición.

Atención: Si una asignación es hecha con la opción IfP pero se presiona en modo edición sin el indicador-PRG, entonces O1 y no O2 es ejecutado, tal vez fuera de la línea de comando. Por lo tanto, sea cuidadoso al escoger IfE o IfP. La salida de IfE?P debe quizás ser procesada con TO? Como se explica en el siguiente párrafo.

TO?

Hace un programa “TakeOver” de cualquier objeto, que usualmente se ve igual que el original. Asignado a una tecla es evaluado incluso en modo de edición. Sin el TakeOver, la tecla simplemente haría beep. El commando TakeOver es colocado al principio de un objeto, pero sólo es visible si la flag (bandera) -85 está activada. En una composición de las opciones-If de arriba, sólo la última (el programa a ser asignado y no sus partes internas) necesita ser procesada con TO? para asegurar su actividad en todos los modos. Presionando TO? un tiempo mayor al normal, agrega un comando “alpha-off” (para dejar el modo alfanumérico) al programa, no un TakeOver. Útil para asignar una tecla en los planos alfa. Este tipo de asignación puede apuntar a establecer un menu, pero no a mantenerse en modo alfanumérico.

A?D

Asigna o borra una tecla. Si se presiona normalmente, espera que se presione una tecla para asignar el objeto en el nivel 1 a esta tecla, si se presiona más tiempo que el normal, espera que se presione una tecla para borrar su asignación. A?D indica si asignará o borrará. Si A?D es casualmente presionado un tiempo corto, responda con CANCEL. Entonces borre la asignación de la tecla CANCEL en un segundo paso. A?D no asigna Shift-sostenidos en las teclas Alpha y ON (ignorado por el sistema operativo), por lo que asignar estos shift-sostenidos es RAM malgastada.

RclK

Invoca la asignación de usuario de la tecla por la cual se pregunta (si hay alguna). Claramente, esta también puede ser una tecla con shift-sostenido. Tome en cuenta que ambos, RclK y A?D, no son comandos RPN. Aquí es obviamente más conveniente escoger primero el operador y luego el argumento.

K&SA

Devuelve el código de tecla rc.p de una tecla, junto con su asignación estándar, que puede ser un argumento para la varias If-opciones como se explica arriba. Esta poderosa opción devuelve el código de tecla y la asignación estándar también para las teclas con shift-sostenido. Muestra el tipo y el nombre del tipo del objeto de la tecla, como cosa extra. El el caso de teclas de menu sin shift, un nombre global simplemente se encierra en apóstrofes, mientras que un libname (nombre de librería, también conocido como rompointer) se encierra en apóstrofes junto con su contenido. Al nombre del tipo mostrado, se le agrega un asterisco para recorder que el nombre del tipo se refiere a su contenido. La pantalla de abajo muestra el resultado de K&SA aplicado a More. Su Cabecera nos dice que un objeto código tiene tipo 25. La pila muestra el contenido del comando More, el nombre de librería More y su tecla 12.1. La mayoría de las teclas corren nombres de librería. E.g., si SIN se presiona después de Code is the content of MoreK&SA, vemos SIN en dos niveles. El del nivel 2 es el nombre de librería, pero en el nivel 1 está la función SIN. Estos nombres son lo mismo en este caso, pero puede ser diferente en otros. Es diferente si un nombre de librería o su contenido es utilizado como argumento O2 para IfE?P. En modo PRG, el nombre de librería es impreso en la linea de edición, mientras la función es inmediatamente ejecutada, tal vez fuera del editor. K&SA debe ser asignado a una tecla para asegurar su acceso a todas las teclas, vea el ejemplo 2 de abajo.

 

 

More

Abre un navegador con 5 ítemes adicionales (al lado izquierdo de la pantalla) de los cuales los últimos 2 también son navegadores. El ultimo item muestra un cuadro de asignaciones útiles, descritas en el APÉNDICE. Estas asignaciones ejemplifican el poder de las If-opciones. Prueba algunas asignaciones y borra las que no te plazcan, lo que se puede hacer fácilmente aplicando un “longhold” a A?D.

Aquí están las explicaciones de los primeros cuatro ítemes en el navegador de la izquierda.

More browser scanning the right-hand browser19 proposed assignments

 

 

 



Assigned

Muestra la lista de todas las teclas asignadas por el usuario. Por ende, el usuario puede estar siempre al tanto de las situación de las asignaciones globales actuales. 

PackUKeys

Cuando se borran algunas asignaciones de teclas, el (escondido) UserKeys contiene varias redundancias. Esto también aplica si se ha asignado una lista vacía a una tecla lo cual el sistema ignora, pero pierde 32 bytes. La memoria perdida es recuperada (incluso más de 500 bytes) al ejecutar PackKeys de vez en cuando.

RecordKeys

Un poderoso grabador de teclas para guardar una secuencia de teclado para ser ejecutada más tarde. Una grabación puede ser terminada sólo con CANCEL y puede contener a los más 15 teclas. Hay un contador de teclas en la cabecera que controla el número de teclas presionadas.

Ejemplo: Presiones RecordKeys. Esto muestra REC 0 en la cabecera. Entonces presione la secuencia de teclas [MODE][F1][CANCEL]. Esto deja un programa en la pila que muestra el Flag Browser presionando una tecla. Una grabación puede ser directamente ejecutada, pero también puede ser usada en una if-opción como en el ejemplo 8.

Importante: Como se ve en el ejemplo, RecordKeys también activa teclas válidas sólo en ambientes cerrados (en el ejemplo, la tecla F1 dentro del navegador MODE). Este lujo no se puede lograr con el comando KEYEVAL.

Keymap Box

Para usuarios que les gustan las asignaciones de teclas alternatives. Uno puede tener un mapa de teclas para física (digamos Phys.K), otro para ingeniería, etc. RCLKEYS y STOKEYS son muy lentos para realizar esto en UsrRPL. Keymap Box cambia el mapa de teclas instantáneamente. Al principio tiene solamente el item GetUKeys (obtiene la lista UserKeys actual). Al ejecutarlo después de haber realizado algunas asignaciones de teclas, coloca una lista en la pila. Guárdala en un puerto, digamos 2: U.K. Al ejecutar Keymap Box de nuevo, este contiene “Set 2:U.K”. El sufijo .K es básico, ya que Keymap Box busca sólo en los puertos, nombres con el sufijo .K. Este archivo sólo puede contener una lista obtenida con GetUKeys o un código auto-descomprimible que se evalue a esta lista. Este último se puede hacer fácilmente con las BZ-tools de OT49. Una lista UserKeys es siempre inmensa, pero homogénea. Por lo tanto el rango de compresión la mayoría de las veces es sobre 90%. Atención: Un mapa de teclas sobrescribe completamente las asignaciones de teclado actuales.


Examples of application

1. IfD. To invoke the builtin library 256 which offers some useful commands, several keys have to be pressed. To get it with a single key you may choose the double-clicked APPS-key 21.1. Put « 256 MENU » onto level 2 and the standard assignment of APPS (obtained with K&SA) on level 1. Then apply IfD, process the result with TO and assign it to the APPS key with A?D. Now, double-clicking APPS  sets the lib 256 menu - also in the edit mode - while an ordinary key press sets the APPS box as before. Instead of taking the standard assignment of 21.1, you may also take the real 21.1 itself. If you prefer long-press, use IfL instead of IfD.

2. IfL. It is very useful to get the STACK-menu (a subdirectory of the TOOL- menu) in all modes with a single key-stroke. Get the assignment of the STACK-submenu in the TOOL-menu, and the assignment of the TOOL-key, both with K&SA. Next, press IfL, process with TO? and assign this to TOOL (key 23) using A?D. From now on, if TOOL is pressed a bit longer, the STACK-menu will appear. This works in edit mode as well and makes programming much faster. This example is included also in the Appendix.

3. IfE?P. It is convenient to have more often used Keyman commands on key K and its shiftings. RS K (CUT) is one of several keys needed only in edit mode. Hence, it may be used for directly launching the More browser, needed only in default mode. Put the standard assignment of 32.3 on level 2 and the program « More » (or simply the command More) on Level 1. Hit IfE?P normally, process with TO? and assign the output to 32.3. Then in default mode this key runs More while in edit mode the key cuts text as before. Note that the dispensable LS_K and RS_K are still to our disposal. We use them by assigning « RclK » or simply RclK to LS_K with A?D. Thus, if the shift is hold then RclK is run instead of RCL. Similarly, we may assign K&SA directly to RS_K.

4. We still have many possibilities to set the entire Keyman menu somehow with key K. For instance, it could be done with longhold K. Put «1200 MENU » and 32.1 on level 2 and 1, press IfL, process the output with TO and assign this to Key K (STO). Then longhold STO invokes the Keyman menu in each mode. An alternative is to assign Keyman to ALPHA-shift longhold. To realize this, apply TO? longhold  to «1200 MENU » which adds a "Turn alpha off" command to it. Put the result on level 2, the standard assignment of alpha K (character K) on level 1 and run IfL. Process the output with TO? and assign this to ALPHA K. Now, pressing K in alpha mode, prints K in the editor as before, also repeatedly. But releasing the ALPHA key (still in alpha mode) and pressing K longer, sets Keyman's menu. The assignment reads « If in alpha mode key K is hit shortly write K in the edit line, but if K is longhold (after releasing ALPHA) set Keyman's menu and leave the alpha mode ». It is proposed also by More.

5. Suppose you often need some command sequence or text in edit mode only. It is obviously more easy to have it printed by a key instead of rewriting it over and over again. Put the text on Level 2, the real 1 on Level 1, apply IfE?P and TO? and assign this to your key. The key will then beep outside the edit mode (since 1 is no keycode!) but print the text in the command line just at the cursor position if the editor is active. Several standard assignments on the 49 are made in just this way, COPY, CUT etc. If a text is directly assigned to a key then the key immediately opens the editor which is not always wanted.

6. An easy but handy example of a composition of the above If-options is the assignment « If in edit mode then move cursor left else go UPDIR or go directly HOME if the key if longer pressed » to LeftArrow (34.1). PICTURE, normally invoked with 34.1, can as conveniently be entered also with 34.2 (default on the HP48). This example is easily made with IfL and IfE, but the Appendix contains a similar and still more comfortable assignment.

7. Younger versions of OT49 contains the togglers ~ANG and ~COOR for angle and coordinate systems, resp. Since both are closely related, we want to have them on the same key, LS_π say (104.21). Put ~COOR on level 2 and ~ANG on level 1, run IfL, then TO? and assign this to LS_π. A really useful and amazing assignment. If LS is hold and SPC is shortly hit, DEG toggles with RAD, but while still holding LS and pressing SPC a bit longer, you see toggling the 3 coordinate system in the Header.

8. Record the key-sequence [MODE][F19] as in the example under RecordKeys. Apply IfL on this record on level 2 and 22.1 on level 1 and assign the result after processing it with TO? to key 22.1. Then the MODE key invokes the MODE dialog screen if normally hit, but runs immediately into the Flag browser if longpressed, hence saves an additional key press. This amazing assignment is contained in More.

9. Record the key sequence [UpArrow][NXT][F6] which runs the INFO option from the interactive stack menu. Put this on level 2, print 25.1 on level 1 and run IfL. Leave this on level 1, put 25.1 on level 2 and execute IfE. The result (after processing it with TO?) reads as « In edit mode move the cursor up; else visit the stack, and if longhold, display some INFO on the level 1 object ». A variant: record the key sequence [UpArrow][RS][UpArrow] and procede as before. Then longhold UpArrow drives immediately to the highest level in the interactive stack. Very useful for those who are frequently working in the interactive stack.


Remark 1. One may compose the If-options and gets an inexhaustible variety of possible assignments. This all is completely independent on whether you can or cannot read the programs created with the If-options. The only what has to be kept in mind is how they were combined. All assignments are readable with extable (a huge library) by setting flag -85. Results of the If-options can also be used in temporary menus to make a longhold decision on a menu key. Mixed UsrRPL and SysRPL objects can be managed with OT49. Clearly, IfL or IfD may also be used for getting information on a key's function. This is recommended to those who do not remember their own assignments.

Remark 2. Mode-sensitive assignments containing standard assignments may not properly work after a ROM upgrade because pointers occurring in a standard assignment may move. Rewrite the assignment using the keycode instead of the standard assignment. This makes key assignments safe against any future upgrades.

Remark 3. A shifthold key may also be assigned with suitable rompointer. It works in edit mode without a TakeOver on top. For instance, you may assign the rompointer DUP to LS_ENTER. Then this key prints DUP in  edit mode but does DUP like ENTER in default mode. Be sure that DUP is really a rompointer (5.5 bytes) and not its content which has the name DUP (2.5 bytes) as well.

Remark 4. If Keyman is purged from the ports, many keys assigned with Keyman will not work anymore in USR mode. Either leave this mode or purge the assignments. If you only change a version, make sure that the old version is in both, Port1 and Port2. Then purge the one from Port1 and put therein the new version. This procedure needs no warmstart and does not affect any assigned keys.

Remark 5. If Keyman is purged from all ports some keys assigned with it may not work anymore in USR mode. Either leave this mode or delete the assignment. To install a new version make sure that the old one is in both Port1 and Port2. Purge the one from Port1 and put therein the new version. This procedure needs no warmstart and does not affect any key assignments.

Remark 6. Items in the sub-boxes of More can be executed in programs via Recordkeys. We assume that More is assigned to RS K as proposed in the Appendix. Then the following key record will run GetUKeys (first item of More/KeymapBox), which immediately recalls the current UserKeys list:
            RS              (The RS key)
            K                (Key K = STO)
                     (three times DownArrow, i.e.,  go down in More till the Keyman box)
            F6              (OK, this is set the Keymap box)
            F6              (OK, run first item in the Keymap Box which is GetUKeys)
            CANCEL  (end the recording)
Just press Recordkeys and record this key sequence. Store it in GUK, say. Then GUK will  recall the currently used keymap to the stack while you may watch the automated passing through the browsers similar as in the DEMO library 1234.

Remark 7 for experts. Instead of using the lengthy standard assignments of the arrow keys in edit mode, one may use the corresponding cursor moving commands, easily found if hacking the standard assignments of the arrow keys. Some standard assignments are unnamed rompointers, e.g. that of 21.3. One saves many bytes if using rompointers instead of their lengthy content. A rompointer assignment need no TakeOver top if the rompointer itself has it on top. For instance, the last optional assignments of 0, 1, 2, 3 in Keyman+/More is the same for all 4 keys: ROMPTR 4B0 F. It first identifies the key which saves bytes for the user. And with its TakeOver on top it runs also in edit mode without disturbing the command line. 


CREDITS
Thanks to Jonathan Busby for his code invoking the hexa key code, to Carsten Dominik for his fruitful proposal of creating the longpress option, to Simone A. Rapisarda whose basic ideas from SmartKeys inspired Keyman, to Denis Martinez for his key recorder, used in ROMPTR 4B0 D, to Joseph K. Horn for beta-testing of Keyman+ and to Heiko Arneman and Otto Praxl for help in creating this html-document.

Wolfgang Rautenberg


APPENDIX

The sub-browser More/KeyAssignments. A key is denoted by the letter on it if any. More assignments are found in Topkeys .  

RS_A..F  quote

assigns the dispensable RS-hold menu keys in a nice way for quoting the name. That may be a global variable, a rompointer (libname) like %CH or ABS, or a port name. Thus, forget about quoting with the quoter or with RS alpha for port names. Names from temporary or CST-menus are quoted only if these names are globals. Otherwise the program executed by the menu name is recalled.which is an excellent control possibility for self-made menus. RS_ may also be pressed on submenu-names like VECTR in MTH. Then the stack contains what the menu key would do if pressed. But this is readable only if extable is present in a port..

o H  FlagBox

assigns the MODE key 22.2. If normally pressed works as before, but if longer pressed invokes the Flag browser without additional key presses. Note that the longhold time can be modified.

o I  STACKMenu

assigns key I (TOOL) to invoke the STACK submenu of TOOL if long pressed. This applies in edit mode as well. Thus, this important menu is always at the disposal with a single keystroke, in particular while programming. 

      n PICK o    StkTop

assigns UpArrow: If the numeric key n is pressed and n is still in the command line, does n PICK. In default mode you enter stack level 1 as usual, but if longhold you immediately drive to the highest stack level.

alpha K  Keyman

assigns alpha-shift K. If normally hit, the key runs its standard function. Pressing K a bit longer (after first releasing alpha) sets Keyman's menu. 

RS K  More

assigns the More browser in default mode.

LS_K RclK RS_K K&SA

assigns the Keyman commands RclK and K&SA to the shiftholds of K.

  UPDIR  LS PICT

assigns the LeftArrow key (34.1) to go UPDIR if hit normally but drives direction HOME if pressed longer. You may stop at any station. Hence, UPDIR and HOME are on the same key now. The key choice nicely agrees with the path display in the Header. Important: PICTURE is now invoked with LS (standard on the HP48). Clearly, in the PICTURE environement, LS_ continues toggling with the graphic scroll mode. 

LS_     PAINT

assigns LS_ with a new plot type PAINT. It respects the size of PICT and does not create a new PPAR file. Pressing (X,Y) in the PAINT environement displays the cursor's true pixel coordinates, i.e., X:0 and Y:0 is the left upper corner. There is no PPAR dialog setting to get the true pixel coordinates! These are important for painting by hand or placing grobs at the right positions, in programming games, etc. Special feature: PAINT runs also in edit mode. This allows to have look for data stored in PICTURE because CANCEL nicely returns to the command line.

o   OVER

assignes the OVER command to longhold which normally does SWAP. Thus, you have two highly important stack operations just on one key. 

o 0..3  Ports

(on the 49 only o 0..2). It should be noticed that in default (stack) mode a port browser is better than a port menu. Hence, pressing key 0, 1,  2 or 3 a bit longer, sets a corresponding port browser in default mode (on the slow 49 the port menu is maintained) together with a 2-page menu containing the basic commands for managing the ports. These port browsers are all the same, in particular, longhold 3 is a card browser. In addition, some hardkeys are active in the browser: N, S, T for sorting and the corresponding leftshift keys for inverse sorting, U for unsortig. for entering the TREE, +/- (or ENTER) for selection, ALPHA (double clicked) for search and CANCEL for leaving the browser. To change the port or visiting a directory, enter the TREE. In the TREE view also 0, 1, 2, 3 are reactivated for direct return to a port. Note: If 0, 1, 2, are longhold during an edit session, the port menu is set because menu access may be useful during programming. Longhold 3 errors since a card file menu doesn't exist.