-DIM SHARED ap$(1 TO 500)\r
-DIM SHARED apl\r
-DIM SHARED pp$(1 TO 500)\r
-DIM SHARED ppl\r
-DIM SHARED prt, prt2\r
-DIM SHARED timo$\r
-DIM SHARED dato$\r
-DIM SHARED sona$(1 TO 50)\r
-DIM SHARED mitus\r
-DIM SHARED lp$\r
-DIM SHARED ndlp\r
-DIM SHARED pn$(1 TO 7)\r
-DIM SHARED lk$\r
-DIM SHARED ssave\r
-DIM SHARED ssavel\r
-DIM SHARED timero AS LONG\r
-DIM SHARED kblukk\r
-DIM SHARED tunnidara\r
-\r
-start\r
-\r
-\r
-disp\r
-mnmain\r
-\r
-SUB chd\r
-b$ = "tuhi"\r
-IF apl = 0 THEN inita\r
-\r
-a$ = DATE$\r
-n1 = VAL(RIGHT$(a$, 4))\r
-n2 = VAL(LEFT$(a$, 2))\r
-a$ = LEFT$(a$, 5)\r
-n3 = VAL(RIGHT$(a$, 2))\r
-getnad n1, n2, n3, ndlp\r
-FOR a = 1 TO apl\r
-son ap$(a)\r
-SELECT CASE sona$(1)\r
-CASE "v"\r
-getmd sona$(2), m1, d1\r
-getmd sona$(3), m2, d2\r
-getmd DATE$, m3, d3\r
-IF m3 < m1 THEN GOTO 9\r
-IF m3 > m2 THEN GOTO 9\r
-IF m3 = m1 THEN IF d3 < d1 THEN GOTO 9\r
-IF m3 = m2 THEN IF d3 > d2 THEN GOTO 9\r
-b$ = sona$(4)\r
-CASE "n"\r
-getmd sona$(2), m1, d1\r
-getmd sona$(3), m2, d2\r
-getmd DATE$, m3, d3\r
-IF m3 < m1 THEN GOTO 9\r
-IF m3 > m2 THEN GOTO 9\r
-IF m3 = m1 THEN IF d3 < d1 THEN GOTO 9\r
-IF m3 = m2 THEN IF d3 > d2 THEN GOTO 9\r
-IF ndlp <> VAL(sona$(4)) THEN GOTO 9\r
-b$ = sona$(5)\r
-CASE "e"\r
-getmd sona$(2), m1, d1\r
-getmd DATE$, m2, d2\r
-IF (m1 = m2) AND (d1 = d2) THEN b$ = sona$(3)\r
+DIM SHARED yearplan$(1 TO 500)\r
+DIM SHARED yearplancount\r
+DIM SHARED dayplan$(1 TO 500)\r
+DIM SHARED dayplancount\r
+DIM SHARED lptport, prt2\r
+DIM SHARED lasttime$\r
+DIM SHARED lastdate$\r
+DIM SHARED words$(1 TO 50)\r
+DIM SHARED wordcount\r
+DIM SHARED loadedplan$\r
+DIM SHARED weekdaynum\r
+DIM SHARED dayname$(1 TO 7)\r
+DIM SHARED lastbell$\r
+DIM SHARED idlecount\r
+DIM SHARED idlelimit\r
+DIM SHARED timersnap AS LONG\r
+DIM SHARED keylock\r
+DIM SHARED dayoff\r
+\r
+initprogram\r
+\r
+\r
+drawscreen\r
+mainloop\r
+\r
+SUB checkdate\r
+ ' Selects today's day-plan file from the year plan (runs when the date changes).\r
+selplan$ = "tuhi" ' default plan name when no rule matches (tuhi = empty)\r
+IF yearplancount = 0 THEN loadyearplan\r
+\r
+tmp$ = DATE$\r
+yr = VAL(RIGHT$(tmp$, 4))\r
+mon = VAL(LEFT$(tmp$, 2))\r
+tmp$ = LEFT$(tmp$, 5)\r
+dy = VAL(RIGHT$(tmp$, 2))\r
+getweekday yr, mon, dy, weekdaynum\r
+FOR i = 1 TO yearplancount\r
+splitwords yearplan$(i)\r
+SELECT CASE words$(1)\r
+CASE "v" ' v <from> <to> <plan> = plan active within a date range\r
+parsedate words$(2), beginmon, beginday\r
+parsedate words$(3), endmon, endday\r
+parsedate DATE$, curmon, curday\r
+IF curmon < beginmon THEN GOTO 9\r
+IF curmon > endmon THEN GOTO 9\r
+IF curmon = beginmon THEN IF curday < beginday THEN GOTO 9\r
+IF curmon = endmon THEN IF curday > endday THEN GOTO 9\r
+selplan$ = words$(4)\r
+CASE "n" ' n <from> <to> <weekday> <plan> = plan active on one weekday in a range\r
+parsedate words$(2), beginmon, beginday\r
+parsedate words$(3), endmon, endday\r
+parsedate DATE$, curmon, curday\r
+IF curmon < beginmon THEN GOTO 9\r
+IF curmon > endmon THEN GOTO 9\r
+IF curmon = beginmon THEN IF curday < beginday THEN GOTO 9\r
+IF curmon = endmon THEN IF curday > endday THEN GOTO 9\r
+IF weekdaynum <> VAL(words$(4)) THEN GOTO 9\r
+selplan$ = words$(5)\r
+CASE "e" ' e <date> <plan> = plan active on one exact date\r
+parsedate words$(2), beginmon, beginday\r
+parsedate DATE$, endmon, endday\r
+IF (beginmon = endmon) AND (beginday = endday) THEN selplan$ = words$(3)\r