[Plugin] Brainfuck Interpreter
#1

Brainfuck Interpreter

INFORMATION
It is a plugin to interpret codes esoteric programming language BrainFuck in PAWN in a simple way.

Quote:

The language is based on a simple execution model consisting, besides the program, a vector of (at least) 30,000 bytes initialized to zero, a pointer to the vector (at the beginning of execution points to the first element of the vector) and two "streams" of bytes for input and output.

NATIVES

pawn Код:
native _BFInterpret(dest[], code[], len = sizeof(dest));
To use it simply define the native and add the plugin to server.cfg.

EXAMPLES ..

pawn Код:
native _BFInterpret(dest[], code[], len = sizeof(dest));

main()
{
    new
        str[150]
        ;
       
    _BFInterpret(str, "++++[++++>---<]>++.[--->+++++<]>.+.+++[->+++<]>.--[--->+<]>-.+[->+++<]>++.[--->+<]>----.+[---->+<]>+++.---[->++++<]>+.-------.-[->+++++<]>-.+[->+++<]>++.+++++.-----.++++++++.+++.----.+++.[--->+<]>-----.+[->+++<]>+.+.--[--->+<]>-.+[->++<]>.---[----->+<]>-.+++[->+++<]>++.++++++++.+++++.-[->+++<]>-.[++>-------<]>.+[->+++<]>+.++++++++.+[++>---<]>-.");
    printf("\n\n\n\n%s\n\n", str);
}


Quote:

The code "Hello World!" would be written in a single line:

pawn Код:
_BFInterpret(str, "-[------->+<]>-.-[->+++++<]>++.+++++++..+++.[--->+<]>-----.---[->+++<]>.-[--->+<]>---.+++.------.--------.-[--->+<]>.");
Output: Hello World!

pawn Код:
/* This program prints "Hello World!" and a newline to the screen, its
  length is 106 active command characters [it is not the shortest.]

  This loop is a "comment loop", it's a simple way of adding a comment
  to a BF program such that you don't have to worry about any command
  characters. Any ".", ",", "+", "-", "<" and ">" characters are simply
  ignored, the "[" and "]" characters just have to be balanced.
*/


+++++ +++               //Set Cell #0 to 8
[
    >++++               //Add 4 to Cell #1; this will always set Cell #1 to 4
    [                   //as the cell will be cleared by the loop
        >++             //Add 2 to Cell #2
        >+++            //Add 3 to Cell #3
        >+++            //Add 3 to Cell #4
        >+              //Add 1 to Cell #5
        <<<<-           //Decrement the loop counter in Cell #1
    ]                   //Loop till Cell #1 is zero; number of iterations is 4
    >+                  //Add 1 to Cell #2
    >+                  //Add 1 to Cell #3
    >-                  //Subtract 1 from Cell #4
    >>+                 //Add 1 to Cell #6
    [<]                 //Move back to the first zero cell you find; this will
                        //be Cell #1 which was cleared by the previous loop
    <-                  //Decrement the loop Counter in Cell #0
]                       //Loop till Cell #0 is zero; number of iterations is 8

/*The result of this is:
Cell No :   0   1   2   3   4   5   6
Contents:   0   0  72 104  88  32   8
Pointer :   ^

>>.                     Cell #2 has value 72 which is 'H'
>---.                   Subtract 3 from Cell #3 to get 101 which is 'e'
+++++++..+++.           Likewise for 'llo' from Cell #3
>>.                     Cell #5 is 32 for the space
<-.                     Subtract 1 from Cell #4 for 87 to give a 'W'
<.                      Cell #3 was set to 'o' from the end of 'Hello'
+++.------.--------.    Cell #3 for 'rl' and 'd'
>>+.                    Add 1 to Cell #5 gives us an exclamation point
>++.                    And finally a newline from Cell #6*/
Possibly they knew that it is based on the ASCII table.

instructions:

CharacterMeaning
>increment the data pointer (to point to the next cell to the right).
<decrement the data pointer (to point to the next cell to the left).
+increment (increase by one) the byte at the data pointer.
-decrement (decrease by one) the byte at the data pointer.
.output the byte at the data pointer.
[if the byte at the data pointer is zero, then instead of moving the instruction pointer forward to the next command, jump it forward to the command after the matching ] command.
]if the byte at the data pointer is nonzero, then instead of moving the instruction pointer forward to the next command, jump it back to the command after the matching [ command.
DOWNLOAD >
Source: Download
Bin DLL: Donwload

This is not absolute use (or maybe yes), can be used simply as a plugin to help you learn this language, possibly always is good to learn something new.

Text converter of text to Brainfuck online: http://copy.sh/brainfuck/text.html

Thank you very much to JustBored and Fother!
Reply
#2

So what can I do with this again? And what are the advantages to using it?
Reply
#3

It has no advantage at all, yes would benefit if wanted you interpret a BrainFuck code in PAWN.

It could possibly be used to create an encryption method, this is just a code interpreter.
Reply
#4

I don't see a use for this...
Reply
#5

Umm... The purpose of this language, Brainfuck, was too be able to use the smallest compiler (which is 200 bytes)... The use of this is merely none at all...

But still, good job... :P
Reply
#6

Quote:
Originally Posted by SickAttack
Посмотреть сообщение
I don't see a use for this...
Me neither, but I really like the language and i thought to interpret it in PAWN!
Reply
#7

Sadly, this has no use whatsoever for an actual server scripter / owner / player..
Reply
#8

It has no uses #sadbuttrue

btw, still good job
Reply
#9

Brainfuck is the best way to waste your time, in my option. Thanks for sharing this
Reply
#10

Anyone can create .so plug-in file for linux?

// edit: a problem with run plug-in:

Код:
20150202 205931>   Loaded.
20150202 205931>  Loading plugin: mysql
20150202 205931>  SA:MP MySQL Plugin v2.1.1 Loaded.
20150202 205931>   Loaded.
20150202 205931>  Loading plugin: BrainFuck
20150202 205931> [MySQL] Thread running. Threadsafe: Yes.
20150202 205931>   Failed.
20150202 205931>  Loaded 2 plugins.
Reply
#11

Why is this called brainfuck?
Reply
#12

Quote:
Originally Posted by x4x
Посмотреть сообщение
because it fucks your brain.

---

I don't see a user for thisІ
But good job
Couldn't resist going off topic to tell that's a fucking no-brainer.
Reply
#13

Why i can't load this plugin?
Reply
#14

It has no uses at all but it's fun
Reply
#15

uhmmmm... im gonna use it to battle aliens...

* Ritzy2K packs his things n boards up a UFO..

I dunno why its called brain fuck....it can be used in galaxies for war...
call it the ultimate alien pumping intergalatic Hydropower saturated tool (random words...tho make sense xD)

Look at my avatar...im gonna use that suit.

P.S there are childrens dying in africa!

About the plugin: serious post...- where do i use it and why do i use it?
Reply
#16

Код:
++++++++[>+>++>+++>++++>+++++>++++++>+++++++>++++++++>+++++++++>++++++++++>+++++++++++>++++++++++++>+++++++++++++>++++++++++++++>+++++++++++++++>++++++++++++++++<<<<<<<<<<<<<<<<-]>>>>>>>>++.--<<<<<<<<>>>>>>>>>>>>>>++.--<<<<<<<<<<<<<<>>>>>>>>>>>>+.-<<<<<<<<<<<<>>>>>>>>>>>>>+.-<<<<<<<<<<<<<>>>>>>>>>>>>>>--.++<<<<<<<<<<<<<<>>>>>>>>>>>>>--.++<<<<<<<<<<<<<>>>>>>>>>>>>>>>---.+++<<<<<<<<<<<<<<<>>>>>>>>>>>>+++.---<<<<<<<<<<<<>>>>>>>>>>>>>+++.---<<<<<<<<<<<<<>>>>.<<<<>>>>>>>>>>>>>.<<<<<<<<<<<<<>>>>>>>>>>>>+.-<<<<<<<<<<<<>>>>>>>>>>>>>>+++.---<<<<<<<<<<<<<<>>>>.<<<<>>>>>>>>>>>>>>--.++<<<<<<<<<<<<<<>>>>>>>>>>>>>>-.+<<<<<<<<<<<<<<>>>>.<<<<>>>>>>>>>>>>>>.<<<<<<<<<<<<<<>>>>>>>>>>>>>>----.++++<<<<<<<<<<<<<<>>>>>>>>>>>>+.-<<<<<<<<<<<<>>>>>>>>>>>>+++.---<<<<<<<<<<<<>>>>>>>>>>>>>---.+++<<<<<<<<<<<<<>>>>.<<<<>>>>>>>>>>>>>+.-<<<<<<<<<<<<<>>>>>>>>>>>>>>--.++<<<<<<<<<<<<<<>>>>.<<<<>>>>>>>>>>>>>>>----.++++<<<<<<<<<<<<<<<>>>>>>>>>>>>>.<<<<<<<<<<<<<>>>>>>>>>>>>>---.+++<<<<<<<<<<<<<>>>>.<<<<>>>>>>>>>>+++.---<<<<<<<<<<>>>>>>>>+.-<<<<<<<<>>>>>>---.+++<<<<<<>>>>>>>>>>---.+++<<<<<<<<<<>>>>>>>>>>.<<<<<<<<<<>>>>.<<<<>>>>>>>>>>>>>>>-.+<<<<<<<<<<<<<<<>>>>>>>>>>>>>>-.+<<<<<<<<<<<<<<>>>>>>>>>>>>>>++.--<<<<<<<<<<<<<<>>>>>>>>>>>>>>----.++++<<<<<<<<<<<<<<>>>>>>>>>>>>>----.++++<<<<<<<<<<<<<>>>>+.-<<<<.
Код:
++++[++++>---<]>-.---[----->+<]>-.+++[->+++<]>++.++++++++.+++++.--------.-[--->+<]>--.+[->+++<]>+.++++++++.-[++>---<]>+.-[--->++<]>--.-------.--[--->+<]>--.+[---->+<]>+++.+[----->+<]>+.+.[--->+<]>-----.[-->+++++++<]>.----.-----------.++.++.--[--->+<]>-.-[--->++<]>-.+++++.-[->+++++<]>-.---[->++++<]>.------------.---.--[--->+<]>-.>-[--->+<]>--.---[->++++<]>+.+[--->++<]>+.------[->++<]>-.+++.[----->++<]>.--[->++++<]>-.--------.+++.------.--------.-[--->+<]>.
Reply
#17

Quote:
Originally Posted by Tamer
Посмотреть сообщение
Why is this called brainfuck?
Cause it was probably designed to fuck up your brain.

@Topic: The only usage that i saw on this plugin is: Credits, if you release some code and dont want something to be modifyied by newbies you can use this plugin, thats the only reason which i found. Congrats anyways.
Reply
#18

Who say this is useless ? Well im saying that one time you will search for a plugin like this !
Reply
#19

Quote:
Originally Posted by ******
Посмотреть сообщение
Why does the native function start with an underscore? Those names are normally reserved for PAWN implementation details.
He'll be fixing that no doubt...


Beer or popcorn on this matter?

I'm looking at popcorn.
Reply
#20

Lol I like it, pretty unique concept

Just 1 question though,

Were you bored like hell when this idea came up?
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)