silly scheduling program
This commit is contained in:
4
projects/sched/build.hxml
Normal file
4
projects/sched/build.hxml
Normal file
@@ -0,0 +1,4 @@
|
||||
-lib kiss
|
||||
-cp src
|
||||
--main sched.Main
|
||||
--interp
|
17
projects/sched/haxelib.json
Normal file
17
projects/sched/haxelib.json
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"main": "sched.Main",
|
||||
"name": "sched",
|
||||
"description": "barebones schedule-maker",
|
||||
"classPath": "src/",
|
||||
"dependencies": {
|
||||
"kiss": ""
|
||||
},
|
||||
"url": "https://github.com/NQNStudios/kisslang",
|
||||
"contributors": [
|
||||
"NQNStudios"
|
||||
],
|
||||
"version": "0.0.0",
|
||||
"releasenote": "",
|
||||
"tags": [],
|
||||
"license": "LGPL"
|
||||
}
|
23
projects/sched/src/sched/Main.hx
Normal file
23
projects/sched/src/sched/Main.hx
Normal file
@@ -0,0 +1,23 @@
|
||||
package sched;
|
||||
|
||||
import kiss.Kiss;
|
||||
import kiss.Prelude;
|
||||
|
||||
enum AMPM {
|
||||
AM;
|
||||
PM;
|
||||
}
|
||||
|
||||
enum Time {
|
||||
Time(hour:Int, minute:Int, ampm:AMPM);
|
||||
}
|
||||
|
||||
typedef ScheduleEntry = {
|
||||
start:Time,
|
||||
text:String
|
||||
}
|
||||
|
||||
typedef Schedule = Array<ScheduleEntry>;
|
||||
|
||||
@:build(kiss.Kiss.build())
|
||||
class Main {}
|
63
projects/sched/src/sched/Main.kiss
Normal file
63
projects/sched/src/sched/Main.kiss
Normal file
@@ -0,0 +1,63 @@
|
||||
(function :Time currentTime []
|
||||
(let [now (Date.now)
|
||||
&mut ampm AM]
|
||||
(Time
|
||||
(case (now.getHours)
|
||||
(0 12)
|
||||
(12
|
||||
(set ampm PM)
|
||||
12)
|
||||
((when (> hours 12) hours)
|
||||
(set ampm PM)
|
||||
(- hours 12))
|
||||
(hours hours))
|
||||
(now.getMinutes)
|
||||
ampm)))
|
||||
|
||||
(function :Int sortIndex [time]
|
||||
(case time
|
||||
((Time 12 minute AM) minute)
|
||||
((Time hour minute AM) (+ minute (* 60 hour)))
|
||||
((Time 12 minute PM) (+ minute (* 60 12)))
|
||||
((Time hour minute PM) (+ minute (* 60 (+ hour 12))))))
|
||||
|
||||
(function isBefore [time1 time2]
|
||||
(< (sortIndex time1) (sortIndex time2)))
|
||||
|
||||
(function isAfter [time1 time2]
|
||||
!(isBefore time1 time2))
|
||||
|
||||
(defMacro simpleSchedule [&body args]
|
||||
`[,@(for [startTime text] (groups args 2 Throw)
|
||||
`(object
|
||||
start ,startTime
|
||||
text ,text))])
|
||||
|
||||
(var sampleSchedule
|
||||
(simpleSchedule
|
||||
(Time 8 0 AM) "Coffee & shower"
|
||||
(Time 8 30 AM) "Breakfast"
|
||||
(Time 9 0 AM) "Writing or piano"
|
||||
(Time 10 0 AM) "Morning captures"
|
||||
(Time 11 0 AM) "Break"
|
||||
(Time 12 0 PM) "Lunch"
|
||||
(Time 1 0 PM) "After-lunch work"
|
||||
(Time 2 0 PM) "Break"
|
||||
(Time 3 0 PM) "After break work"
|
||||
(Time 5 0 PM) "Chill out"))
|
||||
|
||||
// Count midnight as the first hour of the day
|
||||
(assert (isBefore (Time 12 0 AM) (Time 12 0 PM)))
|
||||
(assert (isBefore (Time 11 59 AM) (Time 12 0 PM)))
|
||||
|
||||
(function currentEntry [schedule]
|
||||
(let [now (currentTime)]
|
||||
(doFor [event nextEvent] (pairs schedule)
|
||||
(when (and (isAfter now event.start) (isBefore now nextEvent.start))
|
||||
(return event.text)))
|
||||
(when (isAfter now .start (nth schedule -1))
|
||||
(return .text (nth schedule -1))))
|
||||
"Nothing scheduled right now")
|
||||
|
||||
(print (currentTime))
|
||||
(print (currentEntry sampleSchedule))
|
3
projects/sched/test.sh
Normal file
3
projects/sched/test.sh
Normal file
@@ -0,0 +1,3 @@
|
||||
#! /bin/bash
|
||||
|
||||
haxe build.hxml
|
Reference in New Issue
Block a user