A small but powerful customizer of the APPS choose box
and other builtin boxes or menus (HP49/HP49+)

The APPS choose box is getting fuller and fuller as time proceeds. Many people append their libraries to it. And some builtin topics are rather uninteresting because they are directly accessable by keys, e.g., EQW and the Matrix writer. With Appsman, this situation radically changes. It now will be easy to customize the APPS box and some other builtin boxes and menus like the TIME box completely, even context-sensitive, that is, dependend on the current directory.

Info is Appsman's only visible command and provides short information on some reserved variables listed below. Note that customization is active only in USR mode although no key will be assigned by Appsman. Outside USR mode Appsman has no effect. Examples below will demonstrate the enormous flexiblility of Appsman. It allows you to modify settings of other people in their libraries according to you own taste. Appsman is tested under ROM 19-6 and ROM 1.22 on the HP49+. Load Appsman in any port and attach as usual with a warmstart.

Appsman.txt revised and replaced by Appsman.htm.

Text and the library's Info option improved.

The creation of user-defined items has been liberalized, see examples below.

APAR, APAR1 etc can also be programs which generate a list.

Support for customizing several other builtin menus similar to APPS.
Definitions of APAR are backward compatible.

Appsman manages customization by means of some reserved variables listed in the 1st column of the table below. These may or may not be used. If used it should contain a list which determines the items you want to keep from the builtin box and addions of your one ones. This is explained in detail below. Your choice has priority over customization steps made by a library author. The 2nd column of the table tells us which choose box or Menu is customized. 

Filename Box or Menu Comments
APAR APPS box Invoked by the APPS key
APAR1 STAT box Main choose box on rightshift 5 (STAT)
APAR2 STAT box Subbrowser Hypothesis test of STAT
APAR3 STAT box Subbrowser Confidence intervals of STAT
APAR4  FINANCE Does not yet work. No information available
APAR5 NUM.SLV Subbrowser of APPS  which must first be initiated.
APAR6  TIME Time box on rightshift 9
APAR8 GAMES Subbrowser of APPS provided some special libraries like TETRI are present 
APAR11 EDIT-SEARCH menu if flag -117 is clear (Soft Menu mode)
APAR12 EDIT-TOOLS menu if flag -117 is clear
APAR13 EDIT-GOTO menu if flag -117 is clear
APAR14 EDIT-SEARCH menu if flag -117 is set (Choose Box mode)
APAR15 EDIT-TOOLS menu if flag -117 is set
APAR16 EDIT-GOTO menu if  flag 117 is set

Perhaps the most interesting case is the APPS browser which is customized by the variable APAR. We'll simplify the description by restricting ourself to APAR. But all what is said below about APAR, holds for the other reserved variables APAR1, APAR2,... correspondingly.

What can be in APAR and in the other reserved variables?

The little numbers in the default APPS box (the ones seen outside USR mode) are called indices in the sequel. These enumerate certain builtin tools and perhaps some external libraries which append itself to the APPS box.The APPS box with { 11 4 2 } in APAR Also the so-called Development library is included provided it has been attached. In the simplest case, APAR is a list of those indices you want to keep from the default APPS box. For instance, with {11 4 2 } in APAR, only the CAS menu, the I/O-functions, and the Numeric solver appear in this order in the APPS box as in the screen-shot. The indices in APAR may be zints or reals. The new APPS box is displayed in USR mode regardless of what a library author wrote in his library (in $EXTPRG). But you may also respect his wishes and include the index of his library from the default APPS box into APAR.You may also modify what the library author wants to have displayed, see Example1.

Besides numbers, APAR may contain other items of the following kind: a global name, a command, or a list of size >1, L say. A name or command will be executed if pressing OK on its selection. The head of a list member L appears as a title in APPS which runs the tail of L which converts itself into a program. The head of L need not be a string but can be (nearly) any object. For instance, { Keyman 1200 MENU } as a member of APAR will display "Keyman" in the APPS box, and if selected, Keyman's command menu is set. By the way, this simplicity in joining Keyman into the APPS browser is the reason why Keyman doesn't append itself to the APPS box. This saves a lot of bytes in the Keyman library. Thus, to make the point clear, libraries which don't append itself to APPS can later be appended with Appsman. Moreover, not the library author, but you fix its position in the APPS browser, simply because the entry order in APAR determines the item order in the APPS box. For instance, if Keyman should appear on top of the APPS browser, let {Keyman 1200 MENU} be the first member of the APAR list.

There may be different APAR in the directories, like different PPAR. This has the effect that APPS may look different in the directories. This enhancement can hardly be achieved with a user key assignment on the APPS key. Numbers >12 in APPS may change if you upload or purge a library. "Check APAR" is shown in APPS whenever some index has become invalid. This will recall APAR for correction which has to be done manually.

A few games, in particular TETRI, create an item "Games" in the default APPS box which is normally not visible. Its index will be 12. Hence, put 12 on top of APAR if "Games" should appear as the first item in APPS, see also Example 2.


Example 1. Suppose the libraries Emacs, Keyman and TETRI are on your 49 and APAR is the list { 12  4  STARTUP 4 { Keyman 1200 MENU } e } where e is the index of Emacs in the default APPS box - turn off the USR mode for a moment to read the index e. Then the APPS choose box will look in USR mode as follows:

If the menu created by Emacs in APPS is too long for your taste and you want only Confg.EMACS, just put this command into the above list instead of the number m. 

Example 2. Load a version from the MINES package. To integrate it into the Games box, a Games creating library must be present, TETRI say. Store the list { Mines 1 } in APAR8. Then clicking on Games will  automatically create the extra choose box without title and numbering

Example 3. Load the library Timeman.lib  It appends itself to the default TIME box. Timeman obsoletes the built-in Set dialog box. Hence, we may remove it by feeding APAR6 with the list { 1 2 5 }. From now on you will see the following small TIME box when pressing rightshift TIME  inside or outside USR mode:

Example 4. Suppose you need only the second Z-Test and the first T-Test from the statistical Hypothesis Tests (subitem of the STAT menu) but you want at the same time add your own test, MyHTest, say, which must exist as a global variable. Store { 2 5 MyHTest } in APAR2 and you're done.

Remark 1. APAR can also be a program which generates a list of the just described form. If APAR does not return a list the system may crash. Hence, verify this before pressing APPS. Programs are useful to let own edit tools not be affected by flag -117. E.g, prepare APAR12 as a list and store << APAR12 >> in APAR15.

Remark 2. Programs in APAR14, APAR15, APAR16 must start with a TakeOver, to activate them also in Edit mode. If you are not familiar with the TakeOver command, don't use these files. Information on TakeOver can be found in Keyman.htm.

Remark 3. The only feature of $EXTPRG in a library which a user cannot manage by means of Appsman is this: Possible HELP options on library commands in the CATalog. Therefore, this feature is supported by the library-creator DL of OT49. In other words, a user not familiar with SysRPL may forget about $EXTPRG but may nevertheless dispose on all its features.

Remark 4 for experts. The head of a list item L in LPAR can also be a bint which sets the corresponding message as title. For instance,  with { #BC01 FPTR 2 44 } in LPAR, APPS will include the alarm browser under its title "Browse alarms...". $EXTPRG of Appsman provides control not only on Appsman's reserved variables but also on the $EXTPRG of all external libraries, simply because Appsman has the highest possible ROMID of external libraries able to create visible commands.

Wolfgang Rautenberg -
Carsten Dominik -