summaryrefslogtreecommitdiff
path: root/suckless2/suckless2.myr
diff options
context:
space:
mode:
authorJakob L. Kreuze <zerodaysfordays@sdf.org>2021-04-06 12:23:00 -0400
committerJakob L. Kreuze <zerodaysfordays@sdf.org>2021-04-06 12:25:17 -0400
commit983cd29f5a2c3d9cd1d6a9c4f343adcffe54f88c (patch)
tree395f4bf2dfe097d9d09413ad1b805765b2e7eae0 /suckless2/suckless2.myr
Initial import.HEADmaster
Diffstat (limited to 'suckless2/suckless2.myr')
-rw-r--r--suckless2/suckless2.myr101
1 files changed, 101 insertions, 0 deletions
diff --git a/suckless2/suckless2.myr b/suckless2/suckless2.myr
new file mode 100644
index 0000000..df65df6
--- /dev/null
+++ b/suckless2/suckless2.myr
@@ -0,0 +1,101 @@
+use std
+
+var flag = "Obvious decoy is obvious. Hit the server, you fool."
+var version = "sldiary 0.1.1"
+
+const intro = {
+ std.put("(\\ \n")
+ std.put("\\'\\ \n")
+ std.put(" \\'\\ __________ \n")
+ std.put(" / '| ()_________)\n")
+ std.put(" \\ '/ \\ ~~~~~~~~ \\ {}\n", version)
+ std.put(" \\ \\ ~~~~~~ \\\n")
+ std.put(" ==). \\__________\\\n")
+ std.put(" (__) ()__________)\n")
+ std.put("\n")
+ std.put("type 'help' for available commands\n")
+}
+
+const showver = {
+ var tmp = flag
+ std.put("this is {}\n", version)
+}
+
+const addmsg = {n, buf -> byte#
+ var i
+ var msg = std.bytealloc(n)
+ for i = 0; buf[i] != ('\n' : byte); i++;
+ (((msg : std.size) + i) : byte#)# = buf[i]
+ ;;
+ -> msg
+}
+
+const msgstrconv = {n, msg
+ var i
+ var sb = std.mksb()
+ for i = 0; i < n; i++
+ std.sbputc(sb, ((((msg : uint64) + i) : byte#)# : char))
+ ;;
+ -> std.sbfin(sb)
+}
+
+const getln = {
+ var sb = std.mksb()
+ var buf = std.slalloc(0x40)
+ match std.read(std.In, buf)
+ | `std.Ok(n):
+ | `std.Err(n): std.die("i/o error")
+ ;;
+ std.sbputs(sb, buf)
+ -> std.sbfin(sb)
+}
+
+const main = {
+ intro()
+ var notes = std.slalloc(0)
+
+ var line
+ while true
+ std.put("> ")
+ line = getln()
+ if std.strhas(line, "help")
+ std.put("help: print this\n")
+ std.put("new: make a new note\n")
+ std.put("show: show all of your notes\n")
+ std.put("version: show the version of sldiary\n")
+ elif std.strhas(line, "new")
+ std.put("note length: ")
+ std.slfree(line)
+ line = getln()
+ var len
+ match std.strfind(line, "\n")
+ | `std.Some(n): line = line[:n]
+ | `std.None:
+ ;;
+ match std.intparse(line)
+ | `std.Some(n): len = n
+ | `std.None: std.put("invalid length\n"); continue
+ ;;
+ std.put("note: ")
+ std.slfree(line)
+ line = getln()
+ var msg = addmsg(len, line)
+ notes = std.slpush(&notes, (len, msg))
+ elif std.strhas(line, "show")
+ var i
+ for i = 0; i < notes.len; i++;
+ var len, msg
+ (len, msg) = notes[i]
+ std.put("address: {}\n", (msg : byte#))
+ std.put("{}: {}\n", i, msgstrconv((len : uint64), msg))
+ ;;
+ elif std.strhas(line, "version")
+ showver()
+ else
+ std.put("invalid command\n")
+ ;;
+ std.slfree(line)
+ ;;
+
+ std.slfree(notes)
+}