%%HP: T(3)A(D)F(.);
\<<
@ Added alternative input 7/7/02
@ HP49G Version S. Lui 9/25/01
@ Stan Lui 5/17/98
@ MORE48D - MORE48 Designer Edition 9/27/98
@ more48 - This function displays page(s) of text on the hp48.
@ it features one page of backup memory.  Pressing the <- key
@ displays the last page displayed.  The active keys for this function
@ <- (displays last page), -> (display the forward page), and the 
@ return key (quits more48).
@
@ input: x  y  xd  yn ds bflag dflag cflag
@          x - x-coordinate of display box
@          y - y-coordinate of display box
@          xd - width of display box
@          yn - maximum number of lines to display in a page (max=5)
@          ds - display string
@          bflag - 0/1 - don't/do display box
@          dflag - 0/1 - don't/do display, exits and returns
@                            the underlying grob.
@                            
@          cflag - 0/1 - don't/do center each line displayed.
@ Note: x, y, xd, and yn can be adjusted in order to fit the box into the
@          display screen.
@ routine called : getstr
@
@ 2002: 
@ If x is negative, then the inputs are:
@       sw    x   y  xd  yn ds bflag dflag cflag
@       where s - the number of seconds to wait. If no key is entered within
@       sw seconds, MORE48D will exit automatically
@       
RCLF 
0
0 0 0 0 

GROB 2 3 103010

GROB 2 3 203020

0   0

\-> x y  xd yn ds bflag dflag cflag          fs g    p0 p1 p2 k  fg bg yd  tc \<<

IF x 0 < THEN x ABS 'x' STO ELSE 0 END \->  sw \<<
@ IF dflag THEN 1 'bflag' STO END

@ IF xd 65 < THEN 65 'xd' STO END 

IF x xd + 1 - 130 > THEN 131 xd - 'x' STO END 
      
IF yn 5 > THEN 5 'yn' STO END
yn 1 - 6 * 9 + 'yd' STO

IF y yd + 1 - 63 > THEN 64 yd - 'y' STO END

IF bflag THEN
  PICT x R\->B y R\->B 2 \->LIST x xd + 1 - R\->B y yd + 1 - R\->B 2 \->LIST
ELSE
  PICT x 2 + R\->B y 2 + R\->B 2 \->LIST x xd + 3 - R\->B y yd + 3 - R\->B 2 \->LIST
END
SUB 'g' STO

\<<
  "" 0 \-> s0 lc \<<
     p1 'p0' STO 0 'p2' STO PICT x 5 + R\->B y 2 + R\->B 2 \->LIST
     xd 10 - R\->B yn 6 * R\->B BLANK REPL 1 CF
     WHILE 1 FC? REPEAT
        x 5 +  x xd + 6 - 
        IF 'lc' INCR yn \=/ THEN 0 ELSE 1 END ds  GETSTR 
        'ds' STO IF lc yn == ds "" \=/ AND THEN "..." + END 's0' STO
        PICT x 5 +  
        IF cflag THEN
          xd 10 - s0  1 \->GROB SIZE DROP B\->R - 2 / IP +   
        END 
        R\->B  lc 1 - 6 * y + 2 + R\->B 2 \->LIST s0 1 \->GROB GOR
        IF ds "" == lc yn == OR THEN 1 SF END
     END
     PICT x 5 + R\->B y 2 + R\->B 2 \->LIST
     x xd + 6 - R\->B yn 6 * y + 1 + R\->B 2 \->LIST
     SUB 'p1' STO
  \>>
\>>

\<<
     PICT x 2 + R\->B y yd + 5 - R\->B 2 \->LIST
     IF p0 0 == THEN   # 2d # 3d BLANK REPL
       ELSE bg REPL END
     PICT x xd + 4 - R\->B y yd + 5 - R\->B 2 \->LIST
     IF p2 0 == ds "" == AND THEN  #2d #3d BLANK REPL
       ELSE fg REPL END 
\>>

\-> dspstrg dsparr \<<

  IF bflag THEN
    PICT x R\->B y R\->B 2 \->LIST xd R\->B yd R\->B BLANK REPL
    x R\->B y R\->B 2 \->LIST  x xd + 1 - R\->B y yd + 1 - R\->B 2 \->LIST BOX
  ELSE
    PICT x 2 + R\->B y 2 + R\->B 2 \->LIST xd 4 - R\->B yd 4 - R\->B BLANK REPL
  END

  2 CF dspstrg EVAL 

  IF dflag NOT THEN
   dsparr EVAL
   WHILE 2 FC? REPEAT
     IF KEY THEN
        'k' STO 0 'tc' STO
        CASE
         k 36 == THEN
          IF p2 0 SAME NOT THEN
             p1 'p0' STO p2 'p1' STO 0 'p2' STO
             PICT x 5 + R\->B y 2 + R\->B 2 \->LIST p1 REPL
          ELSE
             IF ds "" \=/ THEN dspstrg EVAL ELSE 100 .1 BEEP END
          END
          dsparr EVAL
         END
         k 34 == THEN
          IF p0 0 SAME NOT THEN
             p1 'p2' STO p0 'p1' STO 0 'p0' STO
             PICT x 5 + R\->B y 2 + R\->B 2 \->LIST p1 REPL
          ELSE
             100 .1 BEEP
          END
          dsparr EVAL
         END
         k 105 == THEN 2 SF END
        END
     ELSE
        IF sw THEN
          1 WAIT 1 'tc' STO+ IF tc sw > THEN 2 SF END
        END
     END 
   END

   IF bflag THEN
     PICT x R\->B y R\->B 2 \->LIST
   ELSE
     PICT x 2 + R\->B y 2 + R\->B 2 \->LIST
   END
   g REPL
  ELSE
   g
  END

fs STOF    
\>>
\>>
\>>
\>>
