[comp.sys.handhelds] A Calender ProgramdjAm

maurice@bruce.cs.monash.OZ.AU (Maurice David Castro) (04/21/91)

Having Noticed that people have started distributin parts of a Calander
program similar to one I was working on, I thought it about time to 
release my own. This program is fully operational, however, it
probably needs some modification to make it neater. (Unfortunately
I just do not have the time at the moment to do it!) 

Operation is straight forward, just down load it to the HP48SX as CAL and then
press CAL. The menu is in 2 parts and allows the user to increment by a week
or year or day, and to display a calander in Month format. (P.S. I am 
Australian, so my appologies the dates{will look backwards to those in 
America.) One last comment: Use Exit to leave the program as it leaves
a heap of small subroutines lying around in its current dirrectory if you 
fail to do so.

Good Luck with the program but bear in mind the Standard disclaimer.
All care has been taken in the writing, however, the program is to be
used at your own risk. The author is not responsible for any loss, damage or
subsequent problems resulting from the use of this program. The
program is placed into the Public Domain.

Maurice Castro 
Monash University, Clayton, Australia

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

%%HP: T(3)A(D)F(.);
\<<
  IF -42 FS?
  THEN 1 'F42' STO
  ELSE 0 'F42' STO
  END -42 SF
  \<< DUP FP
    IFERR DUP 31 +
1 TSTR DROP2 DROP
31
    THEN
      IFERR DROP2
DUP 30 + 1 TSTR
DROP2 DROP 30
      THEN
        IFERR DROP2
DUP 29 + 1 TSTR
DROP2 DROP 29
        THEN DROP2
DROP2 28
        END
      END
    END
  \>> 'LASTDAY' STO
  \<< FP 1 +
  \>> 'FIRSTMTH' STO
  \<< TIME TSTR 1 3
SUB
    CASE DUP "SUN"
SAME
      THEN 1
      END DUP "MON"
SAME
      THEN 2
      END DUP "TUE"
SAME
      THEN 3
      END DUP "WED"
SAME
      THEN 4
      END DUP "THU"
SAME
      THEN 5
      END DUP "FRI"
SAME
      THEN 6
      END DUP "SAT"
SAME
      THEN 7
      END
    END SWAP DROP
  \>> 'DAYNO' STO
  \<< 1 "" 0 2 \-> TDAY
LDAY FDWK DAY LNE
CNT LNO
    \<< CLLCD
" Su Mo Tu We Th Fr Sa"
1 DISP FDWK 1 -
'CNT' STO
      WHILE CNT 0 >
      REPEAT "   "
LNE + 'LNE' STO
'CNT' DECR DROP
      END 1 7 FDWK
- 1 +
      FOR DAY LNE
        IF DAY TDAY
1 + SAME NOT
        THEN " " +
        END
        IF DAY TDAY
SAME
        THEN "\<<" +
        ELSE " " +
        END DAY
\->STR +
        IF DAY TDAY
SAME
        THEN "\>>" +
        END 'LNE'
STO 1
      STEP LNE LNO
DISP 7 FDWK - 1 +
'DAY' STO
      WHILE DAY
LDAY <
      REPEAT 1
'CNT' STO 'LNO'
INCR DROP "" 'LNE'
STO
        WHILE CNT 7
\<= DAY LDAY < AND
        REPEAT
'DAY' INCR DROP
'CNT' INCR DROP LNE
          IF DAY 9
\<=
          THEN " "
+
          END
          IF DAY
TDAY SAME
          THEN "\<<"
+
          ELSE
            IF DAY
TDAY 1 + SAME NOT
CNT 2 SAME OR
            THEN
" " +
            END
          END DAY
\->STR +
          IF DAY
TDAY SAME
          THEN "\>>"
+
          END 'LNE'
STO
        END LNE LNO
DISP
      END 3 FREEZE
    \>>
  \>> 'DM' STO DATE
CLLCD DATE TIME
TSTR 1 12 SUB 3
DISP 3 FREEZE 0
'STAT' STO { {
"SHOW"
  \<<
    IF STAT 0 SAME
    THEN DUP DUP
DUP IP ROT ROT
LASTDAY SWAP
FIRSTMTH DAYNO DM 1
'STAT' STO
    ELSE CLLCD DUP
TIME TSTR 1 12 SUB
3 DISP 3 FREEZE 0
'STAT' STO
    END
  \>> } { "+Day"
  \<< 1 +
    IF DUP DUP 1 -
LASTDAY >
    THEN DUP 1 -
LASTDAY SWAP FP +
    END CLLCD DUP
TIME TSTR 1 12 SUB
3 DISP 3 FREEZE 0
'STAT' STO
  \>> } { "-Day"
  \<< 1 -
    IF DUP 1 <
    THEN 1 +
    END CLLCD DUP
TIME TSTR 1 12 SUB
3 DISP 3 FREEZE 0
'STAT' STO
  \>> } { "+Mth"
  \<< .01 +
    IF DUP FP .13 >
    THEN .01 -
.000001 + .11 -
    END CLLCD DUP
TIME TSTR 1 12 SUB
3 DISP 3 FREEZE 0
'STAT' STO
  \>> } { "-Mth"
  \<< .01 -
    IF DUP FP .01 <
    THEN .01 +
.000001 - .11 +
    END CLLCD DUP
TIME TSTR 1 12 SUB
3 DISP 3 FREEZE 0
'STAT' STO
  \>> } { "EXIT"
  \<<
    IF F42 0 SAME
    THEN -42 CF
    END { CST
LASTDAY FIRSTMTH
DAYNO DM F42 STAT }
PURGE 2 MENU DROP
KILL
  \>> } { "+Yr"
  \<< .000001 + CLLCD
DUP TIME TSTR 1 12
SUB 3 DISP 3 FREEZE
0 'STAT' STO
  \>> } { "-Yr"
  \<< .000001 - CLLCD
DUP TIME TSTR 1 12
SUB 3 DISP 3 FREEZE
0 'STAT' STO
  \>> } { "Today"
  \<< DROP DATE CLLCD
DUP TIME TSTR 1 12
SUB 3 DISP 3 FREEZE
0 'STAT' STO
  \>> } { "+Wk"
  \<< 7 DATE+ CLLCD
DUP TIME TSTR 1 12
SUB 3 DISP 3 FREEZE
0 'STAT' STO
  \>> } { "-Wk"
  \<< -7 DATE+ CLLCD
DUP TIME TSTR 1 12
SUB 3 DISP 3 FREEZE
0 'STAT' STO
  \>> } } MENU HALT
\>>
-- 
Maurice Castro
maurice@bruce.cs.monash.edu.au