Path: seq!spell
From: Detlef Mueller <detlef@mwhh.hanse.de>
Subject:  v01i033:  updir - UPDIR v1.1 (Bug fix), Part01/01
Newsgroups: comp.sources.hp48
Keywords: UPDIR UP tool bugfix
Organization: M. Witt
Followup-To: comp.sys.hp48
Approved: spell@seq.uncwil.edu

Checksum: 1523641503 (verify with brik -cv)
Submitted-by: Detlef Mueller <detlef@mwhh.hanse.de>
Posting-number: Volume 1, Issue 33
Archive-name: updir/part01
Supersedes: updir: Volume 1, Issue 31


BEGIN_RDME up.rdm
Hi, all.

Forgive me,

the first version of the UP program I post, has a bug. I forget to handle
the temporary menu. The sequence 'GetMenu% %IP>#' returns zero if the
actual menu is the TMENU. In this case 'NTHCOMPDROP' didn't return any
object. This can end up in a memory lost in further actions (this is the
way I detect the bug, system RPL don't forgive any error :-). I hope,
nobody has lost his memory by this way ...
Also the binary download header in the source code was missing (I use a
batch job to compile my programs and link them with a seperate header).
I shouldn't post at 3:00 in the morning ...
END_RDME

Here is the corrected article :

BEGIN_DOC up.doc
In Mar 90 Jake G Schwartz (Jake-S@cup.portal.com) posted an UP function
for built-in Menus.

> ... several of the built-in (ROM) menus in the machine are nested in a
> tree structure as low as three levels deep.  The user manual on page 56
> advises that one doesn't traverse these like a tree; one should simply
> go to the new one.  In many cases, this requires more than a keystroke
> or two.
  ...
> If UP is assigned to the UP keyboard key, its use becomes transparent
> when the HP48 is in USER mode.  In the first weeks of calculator use, ROM
> menu tree traversal is helpful in order to get a feel for where the
> literally hundreds of functions reside in the machine.
  ...
> Rules:
> -----
>
> If the current        The action of
> menu is:              UP is:
> -----------------------------------
> Menu with no          LAST MENU
> parent
>
> Menu with a           Moves to parent
> parent                menu, page of
>                       parent key
>
> RAM directory         UPDIR
>
> Custom Menu           LAST MENU
>

  Library sub-menu	Library menu

  TMENU			LAST MENU

>
> Jake Schwartz

I've convert UP into system-RPL and add support for library sub-menues.

If you only want to use UP, download UP.ASC into your HP48, execute ASC\->
and store the result into a variable in the HOME directory.

To generate UP, put the listings of UP.S and UP.M in the appropriate files,
then invoke the following commandlines at the MS-DOS (urgh) prompt:

	rplcomp up.s up.a
	sasm -e -N up.a
	sload -H up.m

BTW, could anyone EMAIL me routines to support fast bitblit ? I'll need
them in my PACMAN version (no time to write my own set :-).
Thanks.

Tschuess (German slang of 'bye' =-),
	Detlef 8-)

P.S.
I wrote a working RPL decompiler library, 26kb in size. It was a hard
job (I think about a RPL compiler .. :), so maybe I'll release it as
shareware. Any comments ?
	Detlef

END_DOC

BEGIN_SRC up.s
*****************************************************************************
* Modulname:	Up
* Modultype:	Secondary
* Dest.Comp.:	HP48
* Language:	System RPL
* Author:	Detlef Mueller,Nibelungenweg 6,2000 Hamburg 56,W-Germany
* Interface:	UP	( --> )
* Description:	Derivat for build-in command UPDIR.
* Edition History :
*	0.000	08-11-1991	DM	Alpha version
*	1.000	09-04-1991	DM	release
*	  001	09-05-1991	DM	fix TMENU bug, bin. download header
*****************************************************************************

    TITLE	Up

*****************************************************************************
*		OBJECT
*****************************************************************************

ASSEMBLE
=%18	EQU	#1CDF2		Not 'supported' (Why ??? It is the object
*				followed by %19)
	NIBASC	/HPHP48-E/	Binary download header
RPL

::
    CK0NOLASTWD
    GetMenu% %IP>#			( *Get menu nr, convert IP to #* )
    TWO
    #=casedrop
	UPDIR				( *In VAR menu, do simple UPDIR* )
    DUP SIXTY
    #<ITE
    ::	{   %0      %0      %0      %3      %3
	    %3      %3      %3      %3      %0
	   %10     %10     %10     %10     %10
	   %10      %0      %0     %18      %0
	    %0      %0      %0      %0     %24
	   %24     %24      %0      %0    % 29
	    %0    % 31    % 32      %0      %0
	  % 35    % 35    % 37    % 35      %0
	  % 40.04   %0    % 42    % 42    % 42
	  % 42    % 42    % 42    % 42.02 % 42.02
	  % 40.02 % 40.02 % 42.02 % 42.02 % 42.03
	  % 42.03 % 42.03 % 42.03 % 42.0
	}
	SWAP NTHELCOMP			( *determine menu parent* )
	NOTcase				( *Not in list, must be TMENU* )
	    %0				( *so do LASTMENU* )
    ;
    ::  DROP %24			( *From a library submenu do LIBRARY* )
    ;
    InitMenu%
;
END_SRC

BEGIN_SRC up.m
SUpress XRef
OUtput up
LLu up.lr
SEarch entries.o
RElocate up.o
END_SRC

BEGIN_ASC up.asc
%%HP: T(3)A(R)F(.);
"D9D2051A819C51411CE2300403D816F61A1881302BB46D9E36D9D2047A204B2A

50DA9164B2A2B2130D9D204423010DC1B213097614B2130DD48"
END_ASC

BYTES: #84DDh 414

BEGIN_UU up.uu
begin 644 up.bin
M2%!(4#0X+46=+5"A&,D5%,$N`T`PC6%OH8$8`[)+UNECG2U`IP*THD(K*K2BV
M,B\J\Z(R+RKSHC(O*O.B0BLJYU!V#F7G4'8.9>=0=@YEM*)"*RKRS4$K*K2B8
M0BLJM*)"*RH!S1'0'`'-02LJM*(RDP(!``````"0`K2B,I,"`0``````$`,SR
M*1`````````R0"LJM*(RDP(!``````!0`S,I$````````#4PDP(!``````!P5
M`S,I$````````#5`*RHS*1````````1`0"LJ,RD0````````0C"3`@$`````-
M`"`$,RD0````````0C"3`@$``````"`$,RD0````````0C"3`@$``````"`$.
M,RD0```````"0C"3`@$`````("`$,RD0```````"0#"3`@$`````(``$,RD0L
M```````"0C"3`@$`````("`$,RD0```````#0C"3`@$`````,"`$,RD0````A
M```#0C"3`@$`````,"`$,RD0````````0K`2`R,R8&L%K1E&*RHK,=#9`D0R@
+$-`<*S&09T$K,0`K#
``
end
END_UU
-- 
+-----------------------------------+---------------------------------------+
|      `What a depressingly         |             Detlef Mueller            |
|         stupid machine`           |          detlef@mwhh.hanse.de         |
|  Marvin in THGTTG, part II, p.48  |...!uunet!mcsun!unido!mcshh!mwhh!detlef|
+-----------------------------------+---------------------------------------+

