[comp.sys.handhelds] large time and date display

jrl@images1.Waterloo.NCR.COM (john Latala) (06/13/90)

A couple of days ago someone asked that they be sent a copy of the large
clock display program.  I assumed (:-) that they meant my seven segment
display program so I sent them another copy. 

I never did like the way that program displayed digits, but it was
really an experiment in programming with the LCD display.  Also quite a
ways back I posted a 'Times Square' horizontal scrolling program that
would scroll a text string horizontally in large (double height)
letters. 

The font used in that program is just an enlarged version of the HP28's
own font.  It looked a little jagged, but was much nicer than the seven
segment clock display so I decided to update the clock display program
to use the blown up font. 

Here are four routines:

        MAKE - make the large fonts needed by everybody else

        BT   - 'Big Time' displays the time (HH:MM:SSp) in letters
               that are twice the normal size

        BDT  - 'Big Date and Time' displays the date (mm/dd/yyyy) and
               the time (HH:MM:SSp) on two lines in digits that are twice
               the normal size.

        BT4  - 'Big Time in 4 lines' displays the time (HH:MM) in digits
               that are four times the height and width of the normal
               text.

MAKE will make two lists of fonts 'Row2' for the two line and 'Row4' for
the four line versions.  It also makes a string that lists the valid
characters that are available. 

The 'Chars' string variable should contain every character that you're
going to want to display in the date or time format.

The 'ATIME' routine takes two arguments. A numeric time and a string to
indicate which format of time display is wanted. The sequence: TIME
"HMSP" ATIME can be replaced by anything that gets the current time and
converts it to a string. Remember that for BT and BDT the maximum string
length is 137 / 12 or 11 characters and for BT4 it's 137 / 24 or 5
characters.

In all cases the generated date or time string is horizontally centered.

If you have any questions drop me a line. Have fun!

-------------------------------------------------------------------------------

BT : [740C]

<<
  IFERR 'Chars' RCL THEN
    MAKE
  END
  DROP
  IFERR 'Row2' RCL THEN
    MAKE
  END
  DROP
  CLLCD LCD-> DUP XOR "" "" 0 
  -> nulls top bot time
  <<
    DO
      TIME "HMSP" ATIME			convert time to a string <= 11 chars
      'time' STO
      "" DUP 'bot' STO
      'top' STO
      1 time SIZE
      FOR i
        top Row2 1 GET Chars time i DUP SUB
        POS 1 - 12 * 1 + DUP 11 + SUB +
        'top' STO
        bot Row2 2 GET Chars time i DUP SUB
        POS 1 - 12 * 1 + DUP 11 + SUB +
        'bot' STO
      NEXT
      nulls 1 137 SUB 
      nulls 1 137 top SIZE - 2 / IP SUB top + nulls + 1 137 SUB +
      nulls 1 137 bot SIZE - 2 / IP SUB bot + nulls + 1 137 SUB +
      ->LCD
    UNTIL KEY END
    DROP
  >>
  CLMF
>>

BDT : [E8F2]

<<
  IFERR 'Chars' RCL THEN
    MAKE
  END
  DROP
  IFERR 'Row2' RCL THEN
    MAKE
  END
  DROP
  CLLCD LCD-> DUP XOR
  -> nulls 
  <<
    0 0 "" "" "" "" 
    <<
      -> msg
      <<
        "" ""
        1 msg SIZE
        FOR i
          SWAP 
          Row2 1 GET Chars msg i DUP SUB POS 1 - 12 * 1 + DUP 11 + SUB +
          SWAP 
          Row2 2 GET Chars msg i DUP SUB POS 1 - 12 * 1 + DUP 11 + SUB +
        NEXT
      >>
    >>
    <<
      -> msg
      <<
        nulls 1 137 msg SIZE - 2 / IP SUB
        msg + nulls + 1 137 SUB
      >>
    >>
    -> date time dtop dbot ttop tbot btext center
    <<
      DO
        IF DATE DUP date == THEN
          DROP
        ELSE
          UDATE				break mm.ddyyyy into mm dd yyyy
          -> m d y
          <<
            m ->STR "/" + d ->STR + "/" + y ->STR +
          >>
          btext EVAL 
          'dbot' STO 'dtop' STO
        END
        TIME "HMSP" ATIME		convert hh.mmss to "HH:MM:SSp"
        btext EVAL
        'tbot' STO 'ttop' STO
        dtop center EVAL
        dbot center EVAL
        ttop center EVAL
        tbot center EVAL
        + + + ->LCD
      UNTIL KEY END
      DROP
    >>
    CLMF
  >>
>>

BT4 : [E9FE]

<<
  IFERR 'Chars' RCL THEN
    MAKE
  END
  DROP
  IFERR 'Row4' RCL THEN
    MAKE
  END
  DROP
  CLLCD ->LCD DUP XOR 
  -> nulls
  <<
    <<
      -> msg
      <<
        nulls 1 137 msg SIZE - 2 / IP SUB
        msg + nulls + 1 137 SUB
      >>
    >>
    -> center
    <<
      <<
        -> msg
        <<
          1 4
          FOR r
            ""
            1 msg SIZE
            FOR i
              Row4 r GET Chars msg i i SUB POS 1 - 24 * 1 + DUP 23 + SUB +
            NEXT
            center EVAL
          NEXT
        >>
      >>
      -> btext
      <<
        DO
          TIME "HMSP" ATIME		convert time to "HH:MM:SS"
          1 5 SUB			keep "HH:MM"
          btext EVAL + + +
          ->LCD
        UNTIL KEY END
        DROP
        CLMF
      >>
    >>
  >>
>>

MAKE : [FBA8]

<<
  "0123456789:ap/" 'Chars' STO
  "" ""
  -> top bot
  <<
    1 Chars SIZE
    FOR i
      Chars i i SUB 1 DISP
      LCD-> 1 6 SUB
      -> c
      <<
        1 6
        FOR j 
          c j j SUB NUM 128 0
          -> n m b
          <<
            1 8
            START
              IF n R->B m R->B AND #0d == THEN
                b 4 *
              ELSE
                b 4 * 3 +
              END
              'b' STO
              m 2 / IP 'm' STO
            NEXT
            bot b 256 / IP CHR DUP + + 'bot' STO
            top b 256 MOD CHR DUP + + 'top' STO
          >>
        NEXT
      >>
    NEXT
    top bot 2 ->LIST 'Row2' STO
  >>
  { "" "" "" "" }
  -> rows
  <<
    1 Chars SIZE
    FOR i
      Chars i i SUB 1 DISP
      LCD-> 1 6 SUB
      -> c
      <<
        1 6
        FOR j
          c j j SUB NUM 128 0
          -> n m b
          <<
            1 8
            START
              IF n R->B m R->B AND #0d == THEN
                b 16 *
              ELSE
                b 16 * 15 +
              END
              'b' STO
              m 2 / IP 'm' STO
            NEXT
            b 
            1 4
            START
              DUP 256 MOD CHR SWAP 256 / IP 
            NEXT
            DROP
            rows LIST-> DROP
            -> r1 r2 r3 r4 R1 R2 R3 R4
            <<
              R1 r1 DUP + DUP + +
              R2 r2 DUP + DUP + +
              R3 r3 DUP + DUP + +
              R4 r4 DUP + DUP + +
              4 ->LIST 'rows' STO
            >>
          >>
        NEXT
      >>
    NEXT
    rows 'Rows4' STO
    CLMF
  >>
>>


--
john.Latala@Waterloo.NCR.COM