[comp.sys.handhelds] STRING->CODE in ASC Format

n233dk@tamuts.tamu.edu (Rick Grevelle) (09/07/90)

In <email> Jurjen N.E. Bos writes:

>Just as idea...  how about posting it in the new ASC format?

Thanks for the suggestion; here's STRING->CODE again.  For those
who don't already know, the ASC-> routine, written by Dr. Wickes,
is used to convert the below string into a program.

%%HP: T(1)A(D)F(.);
"D9D20E1632C2A205000076BA1CCD205D000143132100146DD10A164142D61361
64C2DA136819F20613710934C2A208A5771C5417133DC1C018114A31149EED13
103B6A40531909E67415106910B6A31509E63330AA0A1510CD5AB1C4071451C4
34CCD201451111331416900111133112DC110132142164808C093632B21301E4
4"

Rick Grevelle

dwalton@jarthur.Claremont.EDU (Dave Walton) (10/07/90)

Here's a program that creates a scrollable menu facility on the HP48SX.
It's easy to edit, so can be taylored to many uses.  See the comments
below for more info.
There's also a demo file below the main program that shows how to use
the SCRL program from inside another program (though it can be run
standalone)

%%HP: T(3)A(R)F(.);
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@                                                                      @
@  Name:        SCRL    (size 1951.5, checksum #17721d)                @
@                                                                      @
@  Description: This program is a scrollable menu program.  It can be  @
@                 called externally from another program (see SCRL.DMO)@
@                 or it can be made into a standalone program.  Right  @
@                 now, the program is written for values of the form   @
@                 :TAG:VALUE.  When the value is displayed on the lcd, @
@                 only TAG:VALUE is displayed.  And when the value is  @
@                 pushed onto the stack, the full :TAG:VALUE is pushed,@
@                 but only TAG:VALUE shows up.  For example, if you    @
@                 push :DEMOTAG:123 onto the stack, only DEMOTAG:123   @
@                 shows up.  Then if you press '3 -' then the tag is   @
@                 stripped off, and 120 is the result.  Play around    @
@                 with it.  You'll get the idea.  Anyway, the program  @
@                 can easily be modified to handle other types of data @
@                 as I have indicated further on in the file.  Also,   @
@                 I have defined the first function key as the 'push   @
@                 to stack' key and the last function key as 'exit'.   @
@                 It is pretty trivial to add different functions.     @
@                 Just look below!  Well, that's about all.  I hope    @
@                 this program is useful!  If you have any comments,   @
@                 contact me at my net address below.                  @
@                                                                      @
@  Arguments:   NONE                                                   @
@                                                                      @
@  History:     01-OCT-90 -Dave Walton- Original coding.               @
@                                                                      @
@  Address:     dwalton@@jarthur.claremont.edu                         @
@                  (use only one 'at')                                 @
@                                                                      @
@  About the author:  Dave Walton is a Junior at Havey Mudd College    @
@                     and is pursuing a degree in general engineering. @
@                                                                      @
@  Payment:     If you like this program, send $80,000 to me to cover  @
@                  my education!!!  No just kidding, but a nice mail   @
@                  message would be appreciated!                       @
@                                                                      @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
\<<
@@@@@
@ If you were going to make a standalone menu program, place the
@ data HERE!!!!  Eg:
@ { "TITLE" ":AAA:1" ":BBB:2:" ":CCC:3" }
@@@@@
0 0 \->
M                            @M --> Matrix containing all values (from stack)
MAX                          @MAX --> Total number of values
CURSOR                       @CURSOR --> Cursor grob
  \<<
ERASE                        @Erase graphics screen
{ # 0d # 0d } PVIEW          @Show graphics screen
PICT { # 0d # 0d }           @Retrieve blank graphics screen to stack
M LIST\-> 1 -                  @Break up M and reform without first entry
  \->LIST 'M' STO              @     which is the title
  M SIZE 'MAX' STO           @Save size of M
"                       "    @Set up cursor grob
2 \->GROB NEG
'CURSOR' STO
2 \->GROB REPL                 @Title was on stack. Grob and put on screen
{ {"\->STK" } { "" } {         @Set up temporary function menu
"" } { "" } { "" }
{ "EXIT" } } TMENU
1 1 9 9 0 \->
CURR                         @CURR --> Current VALUE
TOPR                         @TOPR --> VALUE currently at top position on lcd
POSR                         @POSR --> Position of CURR
TPOSR                        @TPOSR --> Temp position
KEYPRESS                     @KEYPRESS --> Key pressed by user
    \<<
      DO                     @Only update screen of KEYPRESS = 0
        IF '
KEYPRESS==0'
        THEN
9 'TPOSR' STO                @Start from position 9
TOPR TOPR 4 +                @Print values from TOPR to TOPR+4
          FOR I
PICT # 0d TPOSR DUP          @Push screen grob to stack and form coordinate
9 + 54 MOD 'TPOSR'           @      list of where next value should go
STO R\->B 2 \->LIST              @      Eg. { # 0d # 30d } will print at (0,30)
M I GET                      @Get I'th VALUE
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
DUP SIZE 2 SWAP              @Translate :TAG:VALUE to TAG:VALUE
SUB                          @       Modify this for different types of VALUE
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2 \->GROB REPL                 @Put VALUE on screen
          NEXT
PICT # 0d POSR R\->B 2         @Place CURSOR on current VALUE
\->LIST CURSOR GXOR
        END
-1 WAIT                      @Wait for a key press
FLOOR                        @Get integer part of value of key pressed
'KEYPRESS' STO               @           and store it in KEYPRESS
        IF '                 @If key was 1st function key, push to stack
KEYPRESS==11'
        THEN M CURR GET      @Get current VALUE
STR\->                         @Convert from string to value
        END
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@The previous 'push to stack' could be modified for different types of
@  data.  For example, if the user wanted the value of type string to
@  be coppied exactly (and as a string) to the stack, the code would look
@  like this:
@  ... THEN M CURR GET END...
@  Easy, huh?
@Also, here is where the rest of the function key declarations would go
@  where 12 --> function key 2,
@        13 --> function key 3,  etc.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
        IF '                 @Up arrow
KEYPRESS==25'
        THEN PICT            @Push screen grob to stack
# 0d POSR R\->B 2              @Make current position
\->LIST CURSOR GXOR            @Turn off cursor
          IF 'CURR           @If we're already at the first element,
==1'
          THEN MAX           @         then print last screen and place
'CURR' STO MAX 4 -           @         cursor on last line.
'TOPR' STO 45
'POSR' STO 9
'TPOSR' STO 0                @Set KEYPRESS to 0 so that we go through the
'KEYPRESS' STO               @         first loop again and print all values.
          ELSE CURR
1 - 'CURR' STO POSR          @If not at first value, decrement CURR and POSR
9 - 'POSR' STO
            IF '             @If we're now above the first entry, shift the
POSR==0'                     @         screen down
            THEN
              IF '
TOPR\=/1'
              THEN
TOPR 1 - 'TOPR' STO          @Set new element for top of screen
PICT { # 0d # 18d }          @Put position of where copied section WILL GO
PICT { # 0d # 9d }           @Put position of where WILL COPY SECTION FROM
{ # 131d # 44d }             @Put bottom right corner of where WILL COPY FROM
SUB                          @Move section
PICT { # 0d                  @Now put new row that we don't have yet onto
# 9d } M TOPR GET            @           screen
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
DUP SIZE 2 SWAP SUB          @THIS LINE CONVERTS :TAG:VALUE to TAG:VALUE
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2 \->GROB REPL REPL
              END 9
'POSR' STO
            END
PICT # 0d POSR R\->B
2 \->LIST CURSOR GXOR          @Put CURSOR on current VALUE
          END
        END
        IF '
KEYPRESS==35'                @Down arrow -- the logic is almost the same
        THEN PICT            @     as the Up arrow, so I won't comment
# 0d POSR R\->B 2              @     step by step.  REMEMBER ABOUT THE
\->LIST CURSOR GXOR            @     CONVERSION FROM :TAG:VALUE to TAG:VALUE!!!
          IF 'CURR
==MAX'
          THEN 1
'CURR' STO 1 'TOPR'
STO 9 'POSR' STO 9
'TPOSR' STO 0
'KEYPRESS' STO
          ELSE CURR
1 + 'CURR' STO POSR
9 + 'POSR' STO
            IF '
POSR==54'
            THEN
              IF '
TOPR+4\=/MAX'
              THEN
TOPR 1 + 'TOPR' STO
PICT { # 0d # 9d }
PICT { # 0d # 18d }
{ # 131d # 53d }
SUB PICT { # 0d
# 45d } M TOPR 4 +
GET DUP SIZE 2 SWAP
SUB 2 \->GROB REPL
REPL
              END
45 'POSR' STO
            END
PICT # 0d POSR R\->B
2 \->LIST CURSOR GXOR
          END
        END
      UNTIL '                @Keep on doing all of this until EXIT is pressed
KEYPRESS==16'
      END
ERASE                        @Erase graphics screen
0 MENU                       @Restore menu that was there before
    \>>                        @           execution began
  \>>
\>>



%%HP: T(3)A(R)F(.);
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@                                                                      @
@  Name:        SCRL.DMO                                               @
@                                                                      @
@  Description: This is a demo program for the program SCRL.    It     @
@                 contains all of the SI prefixes.  This demo shows    @
@                 how the SCRL program can be used internally from     @
@                 other programs to create scrollable menues.  There   @
@                 is also the option of putting the definitions in     @
@                 the MENU program itself making it standalone.  The   @
@                 format of the list should be the following:          @
@                         TITLE  (to be displayed at top line of lcd   @
@                         VALUE1                                       @
@                         VALUE2 (make sure that all entries have the  @
@                          ...    same length so that no stray         @
@                         VALUEn  characters are left over)            @
@                 With a few modifications, the SCRL program can       @
@                 handle many different types of data and perform      @
@                 many different functions.                            @
@                                                                      @
@  Arguments:   NONE                                                   @
@                                                                      @
@  History:     01-OCT-90 -Dave Walton- Original coding.               @
@                                                                      @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
\<< {
"     SI Prefixes"      @ TITLE
":deka:1E1   "          @ VALUE1
":hecto:1E2  "          @ VALUE2, etc.
":kilo:1E3   "
":mega:1E6   "
":giga:1E9   "
":tera:1E12  "
":peta:1E15  "
":exa:1E18   "
":deci:1E-1  "
":centi:1E-2 "
":milli:1E-3 "
":micro:1E-6 "
":nano:1E-9  "
":pico:1E-12 "
":femto:1E-15"
":atto:1E-18 " }
SCRL                    @ Invoke MENU program
\>>