commit 799129eaead1e50a8132bb2a4ed86b3575985557 Author: kappa Date: Thu Jan 3 16:59:28 2019 +0100 Иницијализован гит репо, REPL тренутно само копира оно што је корисник написао diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6801aa4 --- /dev/null +++ b/Makefile @@ -0,0 +1,51 @@ +# cirilisp - компајлер за ћирилични дијалекат лиспа + +# ћирилисп верзија +VERSION = 0.0 + +# локација за инсталацију +PREFIX = /usr/local + +# флегови за C компајлер и линкер +# CFLAGS = -g -std=c99 -pedantic -Wall -O0 +CFLAGS = -std=c99 -pedantic -Wall -O1 +LDFLAGS = -lm -lc + +CC = cc + +SRC = cirilisp.c util.c +OBJ = $(SRC:.c=.o) + +all: cirilisp + +.c.o: + $(CC) -c $(CFLAGS) $< + +$(OBJ): util.h + +cirilisp: $(OBJ) + $(CC) -o $@ $(OBJ) $(LDFLAGS) + +clean: + -rm -f cirilisp $(OBJ) cirilisp-$(VERSION).tar.gz + +dist: clean + mkdir -p cirilisp-$(VERSION) + cp -r Makefile util.h $(SRC) + tar -cf cirilisp-$(VERSION).tar cirilisp-$(VERSION) + gzip cirilisp-$(VERSION).tar + rm -rf cirilisp-$(VERSION) + +install: all + mkdir -p $(DESTDIR)$(PREFIX)/bin + cp -f cirilisp $(DESTDIR)$(PREFIX)/bin + chmod 755 $(DESTDIR)$(PREFIX)/bin/cirilisp +# mkdir -p $(DESTDIR)$(MANPREFIX)/man1 +# sed "s/VERSION/$(VERSION)/g" < cirilisp.1 > $(DESTDIR)$(MANPREFIX)/man1/dwm.1 +# chmod 644 $(DESTDIR)$(MANPREFIX)/man1/cirilisp.1 + +uninstall: + rm -f $(DESTDIR)$(PREFIX)/bin/dwm +# rm -f $(DESTDIR)$(MANPREFIX)/man1/cirilisp.1 + +.PHONY: all clean dist install uninstall diff --git a/cirilisp.c b/cirilisp.c new file mode 100644 index 0000000..8e7c1b0 --- /dev/null +++ b/cirilisp.c @@ -0,0 +1,34 @@ +#include +#include +#include + +#include "util.h" + +int main(int argc, char **argv) +{ + // Омогућава библиотекама коришћеним у интерпретеру да протумаче + // српску ћирилицу + // struct lconv *loc; + setlocale(LC_ALL, "sr_RS.utf8"); + // loc = localeconv(); + + // Бојлерплејт обавештења о окружењу + puts("Прост РЕПЛ:"); + puts("Притисните ctrl+c да бисте изашли\n"); + + while (1) + { + char *input = readline("k> "); + if (input == NULL) + { + putchar('\n'); + exit(0); + } + + printf("НАПИСАЛИ СТЕ: %s\n", input); + + free(input); + } + + return 0; +} diff --git a/util.c b/util.c new file mode 100644 index 0000000..112d25f --- /dev/null +++ b/util.c @@ -0,0 +1,31 @@ +#define _POSIX_C_SOURCE 200809L +#include +#include +#include + +#include "util.h" + +ssize_t _bytesRead; +size_t _nbytes = 2048; +char *_buffer = NULL; + +char *readline(char *prompt) +{ + if (_buffer == NULL) + { + _buffer = (char *) malloc(_nbytes + 1); + } + fputs(prompt, stdout); + _bytesRead = getline(&_buffer, &_nbytes, stdin); + if (_bytesRead == -1) + { + return NULL; + } + + char *cpy = malloc(strlen(_buffer)+1); + strcpy(cpy, _buffer); + cpy[strlen(cpy)-1] = '\0'; + // Уклања завршни њу-лајн или ЕОФ у стрингу и копира га на ново место + + return cpy; +} diff --git a/util.h b/util.h new file mode 100644 index 0000000..d0d1374 --- /dev/null +++ b/util.h @@ -0,0 +1,5 @@ +#pragma once + +char *readline(char *prompt); + +void add_history(char *unused);