mirror of
https://github.com/azur1s/bobbylisp.git
synced 2024-10-16 02:37:40 -05:00
feat: init trolley :trollface:
This commit is contained in:
parent
25128092e1
commit
b78cb3b9a4
18
README.md
18
README.md
|
@ -2,24 +2,6 @@
|
||||||
another lisp dialect
|
another lisp dialect
|
||||||
> Also available on https://git.ablecorp.us/azur/bobbylisp
|
> Also available on https://git.ablecorp.us/azur/bobbylisp
|
||||||
|
|
||||||
```lisp
|
|
||||||
; example/s.blsp
|
|
||||||
(fun factorial (x)
|
|
||||||
(if (<= x 1)
|
|
||||||
1
|
|
||||||
(* x (factorial (- x 1)))))
|
|
||||||
(do
|
|
||||||
(print (factorial 7)))
|
|
||||||
```
|
|
||||||
|
|
||||||
Compliation flow:
|
|
||||||
```
|
|
||||||
Input(file) -> Parser -> Compile(Bytecode) -> Interpret
|
|
||||||
String SExprs Bytecode IO
|
|
||||||
|-> Compile
|
|
||||||
Assembly(?)
|
|
||||||
```
|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
```bash
|
```bash
|
||||||
$ make
|
$ make
|
||||||
|
|
92
install.sh
Executable file
92
install.sh
Executable file
|
@ -0,0 +1,92 @@
|
||||||
|
#!/bin/bash
|
||||||
|
tput sc
|
||||||
|
|
||||||
|
function clear_print() {
|
||||||
|
tput rc
|
||||||
|
}
|
||||||
|
|
||||||
|
function print_menu() {
|
||||||
|
local function_arguments=($@)
|
||||||
|
|
||||||
|
local selected_item="$1"
|
||||||
|
local menu_items=(${function_arguments[@]:1})
|
||||||
|
local menu_size="${#menu_items[@]}"
|
||||||
|
|
||||||
|
for (( i = 0; i < $menu_size; ++i ))
|
||||||
|
do
|
||||||
|
if [ "$i" = "$selected_item" ]
|
||||||
|
then
|
||||||
|
echo "* ${menu_items[i]}"
|
||||||
|
else
|
||||||
|
echo " ${menu_items[i]}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function run_menu() {
|
||||||
|
local function_arguments=($@)
|
||||||
|
|
||||||
|
local selected_item="$1"
|
||||||
|
local menu_items=(${function_arguments[@]:1})
|
||||||
|
local menu_size="${#menu_items[@]}"
|
||||||
|
local menu_limit=$((menu_size - 1))
|
||||||
|
|
||||||
|
clear_print
|
||||||
|
print_menu "$selected_item" "${menu_items[@]}"
|
||||||
|
|
||||||
|
while read -rsn1 input
|
||||||
|
do
|
||||||
|
case "$input"
|
||||||
|
in
|
||||||
|
$'\x1B')
|
||||||
|
read -rsn1 -t 0.1 input
|
||||||
|
if [ "$input" = "[" ]
|
||||||
|
then
|
||||||
|
read -rsn1 -t 0.1 input
|
||||||
|
case "$input"
|
||||||
|
in
|
||||||
|
A) # Arrow up
|
||||||
|
if [ "$selected_item" -ge 1 ]
|
||||||
|
then
|
||||||
|
selected_item=$((selected_item - 1))
|
||||||
|
clear_print
|
||||||
|
print_menu "$selected_item" "${menu_items[@]}"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
B) # Arrow down
|
||||||
|
if [ "$selected_item" -lt "$menu_limit" ]
|
||||||
|
then
|
||||||
|
selected_item=$((selected_item + 1))
|
||||||
|
clear_print
|
||||||
|
print_menu "$selected_item" "${menu_items[@]}"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
read -rsn5 -t 0.1 # stdin flush
|
||||||
|
;;
|
||||||
|
"") # Enter
|
||||||
|
return "$selected_item"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
selected_item=0
|
||||||
|
menu_items=("Install" "Uninstall" "Exit")
|
||||||
|
|
||||||
|
run_menu "$selected_item" "${menu_items[@]}"
|
||||||
|
menu_result="$?"
|
||||||
|
|
||||||
|
case "$menu_result"
|
||||||
|
in
|
||||||
|
0)
|
||||||
|
echo "Install selected"
|
||||||
|
;;
|
||||||
|
1)
|
||||||
|
echo "Uninstall selected"
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
echo "Goodbye"
|
||||||
|
;;
|
||||||
|
esac
|
9
trolley/.editorconfig
Normal file
9
trolley/.editorconfig
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*.cr]
|
||||||
|
charset = utf-8
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
trim_trailing_whitespace = true
|
5
trolley/.gitignore
vendored
Normal file
5
trolley/.gitignore
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
/docs/
|
||||||
|
/lib/
|
||||||
|
/bin/
|
||||||
|
/.shards/
|
||||||
|
*.dwarf
|
13
trolley/shard.yml
Normal file
13
trolley/shard.yml
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
name: trolley
|
||||||
|
version: 0.1.0
|
||||||
|
|
||||||
|
authors:
|
||||||
|
- Natapat Samutpong <natapat.samutpong@gmail.com>
|
||||||
|
|
||||||
|
targets:
|
||||||
|
trolley:
|
||||||
|
main: src/trolley.cr
|
||||||
|
|
||||||
|
crystal: 1.3.2
|
||||||
|
|
||||||
|
license: MIT
|
2
trolley/spec/spec_helper.cr
Normal file
2
trolley/spec/spec_helper.cr
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
require "spec"
|
||||||
|
require "../src/trolley"
|
9
trolley/spec/trolley_spec.cr
Normal file
9
trolley/spec/trolley_spec.cr
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
require "./spec_helper"
|
||||||
|
|
||||||
|
describe Trolley do
|
||||||
|
# TODO: Write tests
|
||||||
|
|
||||||
|
it "works" do
|
||||||
|
false.should eq(true)
|
||||||
|
end
|
||||||
|
end
|
35
trolley/src/trolley.cr
Normal file
35
trolley/src/trolley.cr
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
require "option_parser"
|
||||||
|
|
||||||
|
module Trolley
|
||||||
|
VERSION = "0.1.0"
|
||||||
|
|
||||||
|
def self.display_help
|
||||||
|
puts "trolley " + VERSION
|
||||||
|
puts <<-HELP
|
||||||
|
USAGE:
|
||||||
|
trolley [COMMAND] [OPTION]
|
||||||
|
|
||||||
|
COMMANDS:
|
||||||
|
-h, --help Display this help message
|
||||||
|
-v, --version Display version
|
||||||
|
HELP
|
||||||
|
exit
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.run
|
||||||
|
OptionParser.parse do |parser|
|
||||||
|
parser.on("-h", "--help") do
|
||||||
|
display_help
|
||||||
|
end
|
||||||
|
|
||||||
|
parser.on("-v", "--version") do
|
||||||
|
puts "trolley " + VERSION
|
||||||
|
exit
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
begin
|
||||||
|
Trolley.run
|
||||||
|
end
|
Loading…
Reference in a new issue