Skip to content

Commit dc19e68

Browse files
committed
Squashed commit of the following:
commit 3bb58428d3f4d02ea95f772296c3a5769eb3eddc Author: Sergi Reyner <sergi.reyner@gmail.com> Date: Mon Jan 1 19:02:47 2018 +0100 Completely replaced aria with s7, modularised the code a bit more
1 parent 86c0da4 commit dc19e68

20 files changed

Lines changed: 85702 additions & 2085 deletions

‎Makefile‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
BINARY=lambda8
22
CC=gcc
3-
CFLAGS=-O3 -Wall -pedantic `sdl2-config --cflags`
4-
LDFLAGS= -lm `sdl2-config --libs` -lSDL2_image -lSDL2_mixer -lSDL2_ttf
3+
CFLAGS=-O3 -g -Wall -pedantic `sdl2-config --cflags`
4+
LDFLAGS=-lm `sdl2-config --libs` -lSDL2_image -lSDL2_mixer -lSDL2_ttf
55

66
.PHONY: clean
77

88
all: $(BINARY)
99

10-
$(BINARY): aria.o api.o gapbuffer.o buffer.o terminal.o main.o
10+
$(BINARY): api.o gapbuffer.o buffer.o terminal.o editor.o main.o s7.o
1111
${CC} ${CFLAGS} $^ ${LDFLAGS} -o ${BINARY}
1212

1313
clean:
@@ -17,7 +17,7 @@ clean:
1717
check-syntax:
1818
${CC} -Wall -pedantic ${CFLAGS} -o nul -S ${CHK_SOURCES}
1919

20-
make.depend: aria.c main.c aria.h api.c api.hgapbuffer.h gapbuffer.c buffer.h buffer.c terminal.h terminal.c
20+
make.depend: main.c api.c api.h gapbuffer.h gapbuffer.c buffer.h buffer.c terminal.h terminal.c s7.c s7.h editor.c editor.h
2121
touch make.depend
2222
makedepend -I/usr/include/linux -I/usr/lib/gcc/x86_64-linux-gnu/5/include/ -fmake.depend $^
2323

‎api.c‎

Lines changed: 100 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22
** HOOKS
33
*************************************/
44

5+
#include "s7.h"
6+
57
#include "lambda8.h"
6-
#include "aria.h"
8+
9+
#include "api.h"
710

811
int palette[16][3] = {
912
{0x00, 0x00, 0x00}, /* BLACK */
@@ -13,81 +16,56 @@ int palette[16][3] = {
1316
{0x7F, 0x00, 0x00},
1417
{0x7F, 0x00, 0x7F},
1518
{0x7F, 0x7F, 0x00},
16-
{0x7F, 0x7F, 0x7F},
17-
{0x7F, 0x7F, 0x7F}, /* GREY */
19+
{0x7F, 0x7F, 0x7F}, /* watered white */
20+
{0x4F, 0x4F, 0x4F}, /* GREY */
1821
{0x7F, 0x7F, 0xFF}, /* */
1922
{0x7F, 0xFF, 0x7F},
2023
{0x7F, 0xFF, 0xFF},
2124
{0xFF, 0x7F, 0x7F},
2225
{0xFF, 0x7F, 0xFF},
23-
{0xFF, 0xFF, 0x7F},
26+
{0xFF, 0xFF, 0x7F}, /* YELLOW */
2427
{0xFF, 0xFF, 0xFF}
2528
};
2629

27-
ar_Value *f_spr(ar_State *S, ar_Value *args) {
28-
int i = (int) ar_check_number(S, ar_car(args));
29-
int x = (int) ar_check_number(S, ar_nth(args, 1));
30-
int y = (int) ar_check_number(S, ar_nth(args, 2));
31-
int w = (int) ar_check_number(S, ar_nth(args, 3));
32-
int h = (int) ar_check_number(S, ar_nth(args, 4));
33-
SDL_Rect dst = {x, y, w, h};
34-
35-
SDL_RenderCopy( gRenderer, gSprites[i],
36-
NULL,
37-
&dst /* NULL */ );
38-
return NULL;
39-
}
40-
41-
ar_Value *f_pix(ar_State *S, ar_Value *args) {
42-
double a = ar_check_number(S, ar_car(args));
43-
double b = ar_check_number(S, ar_nth(args, 1));
44-
int c = (int) ar_check_number(S, ar_nth(args, 2));
30+
s7_pointer l8_pix(s7_scheme *sc, s7_pointer args) {
31+
double x = s7_number_to_real(sc, s7_car(args));
32+
double y = s7_number_to_real(sc, s7_cadr(args));
33+
int c = (int) s7_number_to_real(sc, s7_caddr(args));
4534

4635
SDL_SetRenderDrawColor(gRenderer, palette[c][0], palette[c][1], palette[c][2], 255);
47-
SDL_RenderDrawPoint(gRenderer, a, b);
48-
return NULL;
49-
}
50-
51-
ar_Value *f_rect(ar_State *S, ar_Value *args) {
52-
double a = ar_check_number(S, ar_car(args));
53-
double b = ar_check_number(S, ar_nth(args, 1));
54-
double c = ar_check_number(S, ar_nth(args, 2));
55-
double d = ar_check_number(S, ar_nth(args, 3));
56-
57-
SDL_Rect dstrect;
36+
SDL_RenderDrawPoint(gRenderer, x, y);
5837

59-
dstrect.x = a;
60-
dstrect.y = b;
61-
dstrect.w = c;
62-
dstrect.h = d;
63-
64-
SDL_SetRenderDrawColor(gRenderer, 255, 0, 0, 255);
65-
SDL_RenderDrawRect(gRenderer, &dstrect);
66-
return NULL;
38+
return s7_make_integer(sc, 1);
6739
}
6840

69-
ar_Value *f_line(ar_State *S, ar_Value *args) {
70-
double a = ar_check_number(S, ar_car(args));
71-
double b = ar_check_number(S, ar_nth(args, 1));
72-
double c = ar_check_number(S, ar_nth(args, 2));
73-
double d = ar_check_number(S, ar_nth(args, 3));
41+
s7_pointer l8_printxy(s7_scheme *sc, s7_pointer args) {
42+
const char *str = s7_string(s7_car(args));
43+
double x = s7_number_to_real(sc, s7_cadr(args));
44+
double y = s7_number_to_real(sc, s7_caddr(args));
45+
printText(str, x, y);
7446

75-
SDL_SetRenderDrawColor(gRenderer, 255, 0, 0, 255);
76-
SDL_RenderDrawLine(gRenderer, a, b, c, d);
77-
return NULL;
47+
return s7_make_integer(sc, 1);
7848
}
7949

80-
ar_Value *f_cls(ar_State *S, ar_Value *args) {
81-
int c = (int) ar_check_number(S, ar_car(args));
82-
SDL_SetRenderDrawColor(gRenderer, palette[c][0], palette[c][1], palette[c][2], 255);
83-
SDL_RenderClear( gRenderer );
84-
return NULL;
50+
s7_pointer l8_spr(s7_scheme *sc, s7_pointer args) {
51+
double i = s7_number_to_real(sc, s7_car(args));
52+
double x = s7_number_to_real(sc, s7_cadr(args));
53+
double y = s7_number_to_real(sc, s7_caddr(args));
54+
double w = s7_number_to_real(sc, s7_cadddr(args));
55+
double h = s7_number_to_real(sc, s7_car(s7_cddddr(args)));
56+
SDL_Rect dst = {x, y, w, h};
57+
58+
SDL_RenderCopy( gRenderer, gSprites[(int) i],
59+
NULL,
60+
&dst /* NULL */ );
61+
62+
return s7_make_integer(sc, 1);
8563
}
8664

87-
ar_Value *f_define_sprite(ar_State *S, ar_Value *args) {
88-
char *id = ar_check(S, ar_car(args), AR_TSTRING)->u.str.s;
65+
s7_pointer l8_define_sprite(s7_scheme *sc, s7_pointer args) {
66+
const char *id = s7_string(s7_car(args));
8967
int success = 1;
90-
68+
9169
SDL_Surface *surf = IMG_Load(id);
9270
if (surf == NULL) {
9371
printf("Error creating surface for %s\n", id);
@@ -106,11 +84,11 @@ ar_Value *f_define_sprite(ar_State *S, ar_Value *args) {
10684

10785
SDL_FreeSurface(surf);
10886

109-
return success ? ar_new_number(S, gMaxSprite) : NULL;
87+
return s7_make_integer(sc, success ? gMaxSprite : -1);
11088
}
11189

112-
ar_Value *f_define_sfx(ar_State *S, ar_Value *args) {
113-
char *id = ar_check(S, ar_car(args), AR_TSTRING)->u.str.s;
90+
s7_pointer l8_define_sfx(s7_scheme *sc, s7_pointer args) {
91+
const char *id = s7_string(s7_car(args));
11492
int success = 1;
11593

11694
++gMaxSfx;
@@ -122,21 +100,74 @@ ar_Value *f_define_sfx(ar_State *S, ar_Value *args) {
122100
success = 0;
123101
}
124102

125-
return success ? ar_new_number(S, gMaxSfx) : NULL;
103+
return success ? s7_make_integer(sc, gMaxSfx) : s7_nil(sc);
126104
}
127105

128-
ar_Value *f_sfx(ar_State *S, ar_Value *args) {
129-
int i = (int) ar_check_number(S, ar_car(args));
106+
s7_pointer l8_sfx(s7_scheme *sc, s7_pointer args) {
107+
int i = s7_integer(s7_car(args));
130108
Mix_PlayChannel(-1, gSfx[i], 0);
131109
return NULL;
132110
}
133111

134-
ar_Value *f_printxy(ar_State *S, ar_Value *args) {
135-
size_t len;
136-
const char *str = ar_to_stringl(S, ar_car(args), &len);
137-
double x = ar_check_number(S, ar_nth(args, 1));
138-
double y = ar_check_number(S, ar_nth(args, 2));
139-
printText(str, x, y);
112+
s7_pointer l8_rect(s7_scheme *sc, s7_pointer args) {
113+
double a = s7_number_to_real(sc, s7_car(args));
114+
double b = s7_number_to_real(sc, s7_cadr(args));
115+
double c = s7_number_to_real(sc, s7_caddr(args));
116+
double d = s7_number_to_real(sc, s7_cadddr(args));
117+
118+
SDL_Rect dstrect;
140119

120+
dstrect.x = a;
121+
dstrect.y = b;
122+
dstrect.w = c;
123+
dstrect.h = d;
124+
125+
SDL_SetRenderDrawColor(gRenderer, 255, 0, 0, 255);
126+
SDL_RenderDrawRect(gRenderer, &dstrect);
141127
return NULL;
142128
}
129+
130+
s7_pointer l8_line(s7_scheme *sc, s7_pointer args) {
131+
double a = s7_number_to_real(sc, s7_car(args));
132+
double b = s7_number_to_real(sc, s7_cadr(args));
133+
double c = s7_number_to_real(sc, s7_caddr(args));
134+
double d = s7_number_to_real(sc, s7_cadddr(args));
135+
136+
SDL_SetRenderDrawColor(gRenderer, 255, 0, 0, 255);
137+
SDL_RenderDrawLine(gRenderer, a, b, c, d);
138+
return NULL;
139+
}
140+
141+
s7_pointer l8_cls(s7_scheme *sc, s7_pointer args) {
142+
int c = s7_integer(s7_car(args));
143+
SDL_SetRenderDrawColor(gRenderer, palette[c][0], palette[c][1], palette[c][2], 255);
144+
SDL_RenderClear(gRenderer);
145+
return NULL;
146+
}
147+
148+
149+
typedef s7_pointer (*l8_func)(s7_scheme *sc, s7_pointer args);
150+
151+
struct { const char *name; l8_func fn; int nargs; int optargs; bool restargs; const char *doc; } l8_prims[] = {
152+
{ "define-sprite", l8_define_sprite, 1, 0, false, "(define-sprite filename) Loads an image from filename, makes a texture and registers it, returning it's handle" },
153+
{ "spr", l8_spr, 5, 0, false, "(spr id x y w h) Blits sprite id at x,y with size w,h" },
154+
{ "pix", l8_pix, 3, 0, false, "(pix x y c) Sets the pixel at x,y to color c" },
155+
156+
{ "define-sfx", l8_define_sfx, 1, 0, false, "(define-sfx filename) Loads a sound effect from filename, returning it's handle" },
157+
{ "sfx", l8_sfx, 1, 0, false, "(sfx id) Plays the sound efect with number id" },
158+
159+
{ "printxy", l8_printxy, 3, 0, false, "(printxy text x y) Prints text at x,y using the current color" },
160+
161+
{ NULL, NULL, 0, 0, false, NULL }
162+
};
163+
164+
void initMachineLisp(s7_scheme *sc) {
165+
// initialise the environment
166+
s7_define_variable(sc, "SCREEN-WIDTH", s7_make_integer(sc, L8_WIDTH));
167+
s7_define_variable(sc, "SCREEN-HEIGHT", s7_make_integer(sc, L8_HEIGHT));
168+
169+
// register the functions
170+
for (int i = 0; l8_prims[i].name; ++i) {
171+
s7_define_function(sc, l8_prims[i].name, l8_prims[i].fn, l8_prims[i].nargs, l8_prims[i].optargs, l8_prims[i].restargs, l8_prims[i].doc);
172+
}
173+
}

‎api.h‎

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,26 @@
1-
#include "aria.h"
1+
#ifndef L8_API_H_
2+
#define L8_API_H_
23

3-
extern ar_Value *f_spr(ar_State *S, ar_Value *args);
4-
extern ar_Value *f_pix(ar_State *S, ar_Value *args);
5-
extern ar_Value *f_rect(ar_State *S, ar_Value *args);
6-
extern ar_Value *f_line(ar_State *S, ar_Value *args);
4+
#include "s7.h"
75

8-
extern ar_Value *f_cls(ar_State *S, ar_Value *args);
6+
//Screen dimension constants
7+
#define SCREEN_WIDTH 768
8+
#define SCREEN_HEIGHT 384
9+
#define L8_WIDTH 256
10+
#define L8_HEIGHT 128
11+
#define SCREEN_FPS 60
12+
#define SCREEN_TICKS_PER_FRAME (1000 / SCREEN_FPS)
913

10-
extern ar_Value *f_define_sprite(ar_State *S, ar_Value *args);
11-
extern ar_Value *f_define_sfx(ar_State *S, ar_Value *args);
12-
extern ar_Value *f_sfx(ar_State *S, ar_Value *args);
14+
extern s7_pointer l8_pix(s7_scheme *sc, s7_pointer args);
15+
extern s7_pointer l8_spr(s7_scheme *sc, s7_pointer args);
16+
extern s7_pointer l8_printxy(s7_scheme *sc, s7_pointer args);
17+
extern s7_pointer l8_define_sprite(s7_scheme *sc, s7_pointer args);
18+
extern s7_pointer l8_define_sfx(s7_scheme *sc, s7_pointer args);
19+
extern s7_pointer l8_sfx(s7_scheme *sc, s7_pointer args);
20+
extern s7_pointer l8_rect(s7_scheme *sc, s7_pointer args);
21+
extern s7_pointer l8_line(s7_scheme *sc, s7_pointer args);
22+
extern s7_pointer l8_cls(s7_scheme *sc, s7_pointer args);
1323

14-
extern ar_Value *f_printxy(ar_State *S, ar_Value *args);
24+
extern void initMachineLisp(s7_scheme *s7);
25+
26+
#endif // L8_API_H_

0 commit comments

Comments
 (0)