%%HP: T(3)A(R)F(.);
DIR
  DMYJD
  \<<
    CASE DEPTH 3. <
      THEN 3000. .05
BEEP 1000. .05 BEEP
3000. .05 BEEP CLLCD
"Zu wenig
 Argumente 
  im Stack!"
MSGBOX
      END 3. PICK
TYPE 0. \=/ 4. PICK
TYPE 28. \=/ AND 3.
PICK TYPE 0. \=/ 4.
PICK TYPE 28. \=/ AND
OR 2. PICK TYPE 0. \=/
3. PICK TYPE 28. \=/
AND OR
      THEN 3000. .05
BEEP 2000. .05 BEEP
3000. .05 BEEP CLLCD
"Tag
Monat
Jahr
 m\252ssen 
 Zahlen sein!"
MSGBOX
      END 0. + ROT 0.
+ ROT 0. + ROT \-> D M
Y
      \<<
        IF M 2. \<=
        THEN Y 1. - M
12. +
        ELSE Y M
        END \-> y m
        \<<
          CASE 'Y<1582.
OR Y==1582. AND M<10.
OR Y==1582. AND M==10.
AND D\<=4.'
            THEN -2.
            END 'Y>1582.
OR Y==1582. AND M>10.
OR Y==1582. AND M==10.
AND D\>=15.'
            THEN '
FLOOR(y/400.)-FLOOR(y
/100.)' EVAL
            END 9999.
          END \-> B
          \<<
            IF 'B\=/9999.
AND M>0. AND M<13. AND
D>0. AND D<32.'
            THEN '
FLOOR(365.25*y)+FLOOR
(30.6001*(m+1.))+B+
1720997.+D' EVAL "JD"
\->TAG D M Y 4. ROLL
            ELSE
3000. .05 BEEP 2000.
.05 BEEP 3000. .05
BEEP CLLCD
"Ung\252ltiges Datum:

   "
D R\->I \->STR + "." + M
R\->I \->STR + "." + Y
R\->I \->STR + MSGBOX
            END
          \>>
        \>>
      \>>
    END
  \>>
  JDDMY
  \<<
    CASE DEPTH 1. <
      THEN 3000. .05
BEEP 1000. .05 BEEP
3000. .05 BEEP CLLCD
"Zu wenig
 Argumente 
  im Stack!"
MSGBOX
      END DUP TYPE
      IF 12. ==
      THEN DTAG
      END DUP TYPE
28. \=/ 2. PICK TYPE 0.
\=/ AND
      THEN 3000. .05
BEEP 2000. .05 BEEP
3000. .05 BEEP CLLCD
"JD mu\Gb als 
Zahl oder 
\\"tagged\\" Zahl
vorhanden sein!"
MSGBOX
      END DUP .5 +
FLOOR DUP
      IF 2299161. <
      THEN 1524. +
      ELSE DUP
1867216.25 - 36524.25
/ FLOOR DUP 4. /
FLOOR - + 1525. +
      END DUP 122.1 -
365.25 / FLOOR DUP
365.25 * FLOOR 3.
PICK 2. PICK -
30.6001 / FLOOR \-> JD
c d ee f
      \<< JD c ee - f
30.6001 * FLOOR - f
1. - f 14. / FLOOR
12. * - DUP 7. + 10.
/ FLOOR d 4715. -
SWAP -
      \>>
    END
  \>>
  JDWOT
  \<<
    CASE DEPTH 1. <
      THEN 3000. .05
BEEP 1000. .05 BEEP
3000. .05 BEEP CLLCD
"Zu wenig
 Argumente 
  im Stack!"
MSGBOX
      END DUP TYPE
      IF 12. ==
      THEN DTAG
      END DUP TYPE
28. \=/ 2. PICK TYPE 0.
\=/ AND
      THEN 3000. .05
BEEP 2000. .05 BEEP
3000. .05 BEEP CLLCD
"JD mu\Gb als 
Zahl oder 
\\"tagged\\" Zahl
vorhanden sein!"
MSGBOX
      END DUP .5 +
FLOOR 7. MOD 1. + {
"Mo" "Di" "Mi" "Do"
"Fr" "Sa" "So" } SWAP
GET "Wochentag" \->TAG
    END
  \>>
END