%%HP: T(3)A(D)F(.);
@
@  HP49G Version S.Lui 9/25/01
@  General Command Help Routine
@  Copyright Stanley H.H. Lui 1/24/99
@
@  input:  cstr  lblstr
@  cstr - list of one-character or two-character strings representing the command keys
@          for example: {"A" "CD" "F"}
@          two-character string is for a dual-key command where two keys have the
@          identical function
@  lblstr - list of help strings for the corresponding command keys in cstr
@
\<< 0 1 {3 3 2 2 1} RCLF 0  0 
GROB 7 9 E3F7F7F7F7F7F7F7E3

GROB 3 5 4060706040

GROB 3 5 1030703010

\-> cstr lblstr    g h cdx fs k si0    cbbox lptr rptr \<<
  
  \<< 0 \-> si  i \<<
  PICT {# 12d,# 27d} # 107d # 29d BLANK REPL
  2 CF
  DO
      3 CF
      PICT #12d 29 i 10 * + R\->B 2 \->LIST si \->STR ":" + 1 \->GROB GOR
      PICT #22d 27 i 10 * + R\->B 2 \->LIST cbbox GOR 
      PICT 22 cdx cstr si GET 1 1 SUB 1 \->GROB SIZE DROP B\->R 1 - GET + R\->B 29 i 10 * + R\->B 2 \->LIST 
      cstr si GET 1 1 SUB 1 \->GROB GXOR
      IF cstr si GET SIZE 2 == THEN
        3 SF
        PICT #30d 27 i 10 * + R\->B 2 \->LIST cbbox GOR 
        PICT 30 cdx cstr si GET 2 2 SUB 1 \->GROB SIZE DROP B\->R 1 - GET + R\->B 29 i 10 * + R\->B 2 \->LIST 
        cstr si GET 2 2 SUB 1 \->GROB GXOR
      END
      9 CF
      PICT IF 3 FC? THEN #31d ELSE #39d END 
      29 i 10 * + R\->B 2 \->LIST lblstr si GET 1 \->GROB 
      DUP SIZE DROP B\->R  IF 3 FC? THEN 82 ELSE 74 END   IF > THEN
      {#0 #0} IF 3 FC? THEN 81 ELSE 73 END R\->B #4d 2 \->LIST  SUB 9 SF END GOR
      IF 9 FS? THEN PICT #114d 29 i 10 * + R\->B 2 \->LIST "..." 1 \->GROB GOR END
      IF 'i' INCR 3 == 'si' INCR cstr SIZE > OR THEN 2 SF END 
  UNTIL 2 FS? END
  IF si cstr SIZE > THEN 1 ELSE si END  
  \>> \>>
 
 \-> dispcmh \<<
  PICT {# 10d,# 14d} {# 120d,# 57d} SUB 'g' STO
  PICT {# 10d,# 14d} # 111d # 44d BLANK REPL
  {# 10d,# 14d} {# 120d,# 57d} BOX
  PICT {#12d #16d}  CMDGPIC  GOR
  PICT {# 22d,# 18d} cstr SIZE \->STR " COMMANDS" + 1 \->GROB GOR
  PICT {# 111d,# 18d} lptr GOR PICT {# 116d,# 18d} rptr GOR
  {# 12d,# 25d} {# 118d,# 25d} LINE
  1 CF
  1 dispcmh EVAL 'h' STO 1 'si0' STO
  DO
    1 WAIT

@ZKEYLABELS 15 710108 -1 -16777216 3 45 "Exit Help" 47 "Prev Page" 48 "Next Page" 

    DO UNTIL KEY END 'k' STO
    CASE
       k 36 == THEN h 'si0' STO h dispcmh EVAL 'h' STO END
       k 105 == THEN 1 SF END
       k 34 == THEN
         IF si0 1 \=/ THEN
           si0 3 - DUP 'si0' STO dispcmh EVAL 'h' STO
         ELSE
           cstr SIZE DUP 3 MOD IF DUP 0 == THEN DROP 3 END - 1 +
           'si0' STO si0 dispcmh EVAL 'h' STO 
         END 
       END
    END
  UNTIL 1 FS? END
 \>>
 PICT {# 10d,# 14d} g REPL
 fs STOF
\>>
\>>
