summaryrefslogtreecommitdiff
path: root/userspace/brainfuck.c
diff options
context:
space:
mode:
authorMichal Idziorek <m.i@gmx.at>2014-10-21 00:13:40 +0200
committerMichal Idziorek <m.i@gmx.at>2014-10-21 00:13:40 +0200
commitc81e5044a5d609a42407a5e9b0725d22e33cf5fa (patch)
treebcdd3ed322f64c8bde316bfaf065fe2248947ef1 /userspace/brainfuck.c
parent37ceff93572bba6defd916884999c496108220ee (diff)
ported Brainfuck interpreter.
Diffstat (limited to 'userspace/brainfuck.c')
-rw-r--r--userspace/brainfuck.c28
1 files changed, 21 insertions, 7 deletions
diff --git a/userspace/brainfuck.c b/userspace/brainfuck.c
index 03ce4f5..c363693 100644
--- a/userspace/brainfuck.c
+++ b/userspace/brainfuck.c
@@ -25,7 +25,7 @@
// by brainfuck standards (doesn't that sound funny?), the data pointer has
// 30,000 bytes at its disposal, but I hate hard-coding such stuff.
-#define DATA_SIZE 30000
+#define DATA_SIZE 3000
void usage() {
puts(
@@ -34,13 +34,14 @@ void usage() {
);
}
-int main(int argc, char **argv) {
-
- // ADDED BY FOOLOS: we will show usage anyway
- usage();
+int main(int argc, char **argv)
+{
+ //added by FOOLOS
+ syscalls_init();
// used by the bf program
unsigned char *dataptr = malloc(sizeof(char) * DATA_SIZE);
+
// position of the data pointer
unsigned int datapos = 0;
// input file
@@ -51,6 +52,8 @@ int main(int argc, char **argv) {
// we will read chars from the input into r
unsigned char r;
+ /* uncommented by FOOLOS
+
// determine input
if (argc == 2) {
if (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0) {
@@ -69,16 +72,26 @@ int main(int argc, char **argv) {
usage();
return EXIT_FAILURE;
}
-
+
+ */
+
+ // added by FOOLOS
+ input=fopen(1,"r");
+ puts("Welcome to the BRAINFUCK by Felix Oghina");
+ puts("Compiled for FoolOS");
+ printf("dataptr: 0x%08X\n",dataptr);
+
// zero the data pointer
for (i=0; i < DATA_SIZE; i++) {
dataptr[i] = 0;
}
-
+
// start interpreting
rewind(input);
+
while (!feof(input)) {
r = (unsigned char) fgetc(input);
+// printf("%c",r);
switch(r) {
case '>':
if (datapos < DATA_SIZE - 1) datapos++;
@@ -129,5 +142,6 @@ int main(int argc, char **argv) {
break;
}
}
+ puts("brainfuck: finishing!");
return EXIT_SUCCESS;
}