From 585aafd306ccebc2f1843ecdc0c44051ce70ee2f Mon Sep 17 00:00:00 2001 From: Josha von Gizycki Date: Fri, 23 Aug 2019 16:15:25 +0200 Subject: [PATCH] initial commit --- .gitignore | 2 + main.janet | 110 +++++++++++++++++++++++++++++++++++++++++++++++++- project.janet | 4 ++ 3 files changed, 114 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 99cf5ff..c29e341 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ *.*~ +build +dorodata diff --git a/main.janet b/main.janet index 4815fd5..b25ee21 100644 --- a/main.janet +++ b/main.janet @@ -1,4 +1,110 @@ -(print "build time") +(def logo + ` +▓█████▄ ▒█████ ██▀███ ▒█████ +▒██▀ ██▌▒██▒ ██▒▓██ ▒ ██▒▒██▒ ██▒ +░██ █▌▒██░ ██▒▓██ ░▄█ ▒▒██░ ██▒ +░▓█▄ ▌▒██ ██░▒██▀▀█▄ ▒██ ██░ +░▒████▓ ░ ████▓▒░░██▓ ▒██▒░ ████▓▒░ + ▒▒▓ ▒ ░ ▒░▒░▒░ ░ ▒▓ ░▒▓░░ ▒░▒░▒░ + ░ ▒ ▒ ░ ▒ ▒░ ░▒ ░ ▒░ ░ ▒ ▒░ + ░ ░ ░ ░ ░ ░ ▒ ░░ ░ ░ ░ ░ ▒ + ░ ░ ░ ░ ░ ░ + ░ +`) + +(def bye + ` + ▄▄▄▄ ▓██ ██▓▓█████ +▓█████▄▒██ ██▒▓█ ▀ +▒██▒ ▄██▒██ ██░▒███ +▒██░█▀ ░ ▐██▓░▒▓█ ▄ +░▓█ ▀█▓░ ██▒▓░░▒████▒ +░▒▓███▀▒ ██▒▒▒ ░░ ▒░ ░ +▒░▒ ░▓██ ░▒░ ░ ░ ░ + ░ ░▒ ▒ ░░ ░ + ░ ░ ░ ░ ░ + ░░ ░ +`) + +(def dorodata "dorodata") + +(defn help [] + (print "add, rm, mod, help, quit, [enter]")) + +(defn readline [] + (let [line (file/read stdin :line)] + (if (nil? line) + nil + (string/trimr line)))) + +(defn quit [] + (print bye) + (os/exit 0)) + +(defn lines->entries [lines] + (var entries @[]) + (loop [line :in lines] + (let [[key content] (string/split ":" line) + kwkey (keyword key)] + (when (or (= "id" key) + (nil? (array/peek entries))) + (array/push entries @{})) + (set ((array/peek entries) kwkey) + content))) + entries) + +(defn ensure-dorodata [] + (-> (file/open dorodata :w) + (file/flush) + (file/close))) + +(defn load-entries [] + (let [f (file/open dorodata :r) + content (file/read f :all)] + (file/close f) + (->> content + (string/split "\n") + lines->entries))) + +(defn entries->string [entries] + (reduce (fn [acc entry] + (string acc + "id:" (entry :id) "\n" + "title:" (entry :title) "\n")) + "" + entries)) + +(defn save-entries [entries] + (let [f (file/open dorodata :w)] + (file/write f (entries->string entries)) + (file/flush f) + (file/close f))) + +(defn request-val [label] + (print label) + (readline)) + +(defn new-id [] + (inc (max ;(map (fn [e] (scan-number (e :id))) + (load-entries))))) + +(defn add [] + (-> (load-entries) + (array/push {:id (new-id) + :title (request-val "Title")}) + save-entries)) + +(def structure + {"add" add + "rm" (fn [] (print "rm")) + "mod" (fn [] (print "mod")) + "help" help + "" (fn [] (print "overview")) + "quit" quit}) (defn main [& args] - (print "hello world")) + (ensure-dorodata) + (print logo) + (help) + (while true + ((get structure (readline) help)))) diff --git a/project.janet b/project.janet index fc092c6..e202391 100644 --- a/project.janet +++ b/project.janet @@ -1,3 +1,7 @@ +(declare-project + :name "doro" + :description "pomodoro style task tracker") + (declare-executable :name "doro" :entry "main.janet")