Skip to content

Commit

Permalink
help
Browse files Browse the repository at this point in the history
  • Loading branch information
nic-gaffney committed Jun 27, 2023
1 parent 9f7f0f9 commit 5d958f8
Show file tree
Hide file tree
Showing 10 changed files with 80 additions and 65 deletions.
9 changes: 6 additions & 3 deletions build.sh
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
# Build Sloth
cargo build

FILENAME="$1"
# Compile standard library
./target/debug/sloth std/stdio.sloth std/stdlib.sloth std/stdmath.sloth "$1"
./target/debug/sloth std/stdio.sloth std/stdlib.sloth std/stdmath.sloth $FILENAME

# Generate binary
clang output.o std/stdio.c std/stdlib.c std/stdmath.c -o program
clang output.o std/stdio.c std/stdlib.c std/stdmath.c -o "${FILENAME%.sloth}"

# Move file
mv "${FILENAME%.sloth}" .
Binary file added cgol
Binary file not shown.
76 changes: 51 additions & 25 deletions examples/cgol.sloth
Original file line number Diff line number Diff line change
@@ -1,73 +1,99 @@
foreign fn print(str: String);
foreign fn randGen(min: Int, max: Int) Int;
foreign fn wait(time: Float);
foreign fn termpos(x: Int, y: Int);


fn populate() [Int] {
# Initialize life vector
var life: [Int] = [0];
vpopi(life);

# Fill the vector with random values
var i: Int = 0;
while i < 100 {
n: Int = randGen(0,1);
var n: Int = randGen(0,1);
println(istr(n));
vpushi(life, n);
i = i+1;
}

return life;
}

fn coord(x: Int, y: Int) Int {
println("COORD");
var res: Int = -1;
# Calculate index based on coordinates
if x >= 0 && y >= 0 {
return y*10 + x;
println("COORD1");
res = y*10 + x;
}
return -1;

# if coordinate is invalid, return -1
return res;
}

fn cval(x: Int, y: Int, life: [Int]) Int {
c: Int = coord(x, y);
if c < 0 {
return 0;
println("CVAL");
# Check to make sure index exists before returning
var res: Int = 0;
var c: Int = coord(x, y);
println("CVAL1");
if c >= 0 {
println("CVAL2");
res = vgeti(life, c);
}
return vgeti(life, c);
println("CVAL3");
return res;
}

fn update(life: [Int]) [Int] {
x: Int = 0;
while x < 10 Int {
y: Int = 0;
# Iterate through life
var x: Int = 0;
while x < 10 {
var y: Int = 0;
while y < 10 {
total: Int = cval(x-1, y-1) + cval(x-1, y) + cval(x-1, y+1) + cval(x, y-1) + cval(x, y+1) + cval(x+1, y-1) + cval(x+1, y) + cval(x+1, y+1);
if cval(x, y) == 1 && total < 2 || total > 3{
# Calculate total score around selected cell
var total: Int = cval(x-1, y-1) + cval(x-1, y) + cval(x-1, y+1) + cval(x, y-1) + cval(x, y+1) + cval(x+1, y-1) + cval(x+1, y) + cval(x+1, y+1);

# Apply game of life rules
if cval(x, y) == 1 && total < 2 || total > 3 {
vseti(life, 0);
} else if total == 3 {
vseti(life, 1);
}
y = y+1;
}
x = x+1;
}

return life;
}

fn display(life: [Int]) {
x: Int = 0;
println("DISPLAY");
# Iterate through life
var x: Int = 0;
while x < 10 {
y: Int = 0;
println("DISPLAY1");
var y: Int = 0;
while y < 10 {
alive: Bool = cval(x, y) == 1;
if alive {
println("DISPLAY2");
# if the cell is alive, print
if cval(x, y) == 1{
println("DISPLAY3");
termpos(x, y);
print("#");
}


y = y+1;
}
x = x+1;
}
}

fn main() Int {
# Populate
var life: [Int] = populate();
display(life);
# Play forever
while true {
life = update(life);
display(life);
wait(0.5);
}
return 0;
}
8 changes: 4 additions & 4 deletions examples/mandelbrot.sloth
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
foreign fn print(str: String);
foreign fn printint(i: Int);
foreign fn as_int(x: Float) Int;
#foreign fn print(str: String);
#foreign fn printint(i: Int);
#foreign fn as_int(x: Float) Int;

foreign fn termpos(x: Int, y: Int) Void;
#foreign fn termpos(x: Int, y: Int) Void;

fn main() Int{
var size: Float = 1000.0;
Expand Down
Binary file modified mandelbrot
Binary file not shown.
22 changes: 0 additions & 22 deletions mandelbrot.py

This file was deleted.

4 changes: 4 additions & 0 deletions std/stdio.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,7 @@ char* readln() {
void print(char *str) {
fputs(str, stdout);
}

void termpos(int x, int y) {
printf("\x1b[%d;%dH", x, y);
}
9 changes: 9 additions & 0 deletions std/stdlib.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,12 @@ char charAt(char *str, int x) {
int parse_int(char *str) {
return (int) atoi(str);
}

int as_int(float x) {
return (int) x;
}

char* istr(int x) {
char snum[100];
return (char* )itoa(x, snum, 10);
}
11 changes: 3 additions & 8 deletions std/stdlib.sloth
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,9 @@ foreign fn print(str: String) Void;
foreign fn slen(str: String) Int;
# foreign fn charAt(str: String) Char;
foreign fn parse_int(str: String) Int;

fn termpos(x: Int, y: Int) Void {
print("\x1b[");
print(x);
print(";");
print(y);
print("H");
}
foreign fn termpos(x: Int, y: Int);
foreign fn as_int(x: Float) Int;
foreign fn istr(x: Int) Int;

fn termclear() Void {
print("\x1b[2J\x1b[H");
Expand Down
6 changes: 3 additions & 3 deletions std/stdmath.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
#include <stdlib.h>
#include <time.h>

bool random_setup = false;
int random_setup = 0;

int randGen(int min, int max) {
if random_setup == false {
if (random_setup == 0) {
srandom(time(NULL));
random_setup = true;
random_setup = 1;
}
return random() % (max - min + 1) + min;
}

0 comments on commit 5d958f8

Please sign in to comment.