From 799129eaead1e50a8132bb2a4ed86b3575985557 Mon Sep 17 00:00:00 2001 From: kappa Date: Thu, 3 Jan 2019 16:59:28 +0100 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=BD=D0=B8=D1=86=D0=B8=D1=98=D0=B0?= =?UTF-8?q?=D0=BB=D0=B8=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=20=D0=B3=D0=B8=D1=82?= =?UTF-8?q?=20=D1=80=D0=B5=D0=BF=D0=BE,=20REPL=20=D1=82=D1=80=D0=B5=D0=BD?= =?UTF-8?q?=D1=83=D1=82=D0=BD=D0=BE=20=D1=81=D0=B0=D0=BC=D0=BE=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BF=D0=B8=D1=80=D0=B0=20=D0=BE=D0=BD=D0=BE=20=D1=88?= =?UTF-8?q?=D1=82=D0=BE=20=D1=98=D0=B5=20=D0=BA=D0=BE=D1=80=D0=B8=D1=81?= =?UTF-8?q?=D0=BD=D0=B8=D0=BA=20=D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ cirilisp.c | 34 ++++++++++++++++++++++++++++++++++ util.c | 31 +++++++++++++++++++++++++++++++ util.h | 5 +++++ 4 files changed, 121 insertions(+) create mode 100644 Makefile create mode 100644 cirilisp.c create mode 100644 util.c create mode 100644 util.h 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);