Junio 24, 2018, 10:36:23 am

Autor Tema: [C] Interprete brainfuck  (Leído 1044 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado OnTheCore

  • Si te metes con CPH
    te metes conmigo
  • ****
  • Mensajes: 1610
  • Sexo: Masculino
    • Ver Perfil
[C] Interprete brainfuck
« en: Marzo 10, 2015, 03:30:47 pm »
Hola gente, les dejo este interpete de brainfuck que programe, espero sus criticas y consejos. Gracias.

Código: (C) You are not allowed to view links. Register or Login
#include <stdio.h>
#include <stdlib.h>

void Brainfuck(char *pcData, unsigned long dwData, unsigned char *ucStack, unsigned long dwStack, unsigned long *dwStackPtr);

int main()
{
    char ucData[] = "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.";

    unsigned long dwStackPtr = 0;
    unsigned long dwStack = 16384;
    void *pvStack = malloc(dwStack);
    memset(pvStack, 0, dwStack);
    Brainfuck(ucData, sizeof(ucData) - 1, pvStack, dwStack, &dwStackPtr);
    free(pvStack);

    return 0;
}

void Brainfuck(char *pcData, unsigned long dwData, unsigned char *ucStack, unsigned long dwStack, unsigned long *dwStackPtr)
{
    if(!pcData || !dwData || !ucStack || !dwStack || !dwStackPtr) {return;}

    unsigned long i;
    for(i = 0; i < dwData; i++)
    {
        switch(pcData[i])
        {
            case '>': if(*dwStackPtr < dwStack) {(*dwStackPtr)++;} break;
            case '<': if(*dwStackPtr) {(*dwStackPtr)--;} break;
            case '+': ucStack[*dwStackPtr]++; break;
            case '-': ucStack[*dwStackPtr]--; break;
            case '.': putchar(ucStack[*dwStackPtr]); break;
            case ',': ucStack[*dwStackPtr] = getchar(); break;
            case '[':
            {
                unsigned long j = 0;
                int iLoop = 0;
                do {
                    if(pcData[i + j] == '[') {iLoop++;} else if(pcData[i + j] == ']') {iLoop--;}
                    j++;
                } while((j < dwData - i) && iLoop);

                while(ucStack[(*dwStackPtr)]) {Brainfuck(&pcData[i + 1], j - 1, ucStack, dwStack, dwStackPtr);}
                i += j;
                break;
            }
        }
    }
}
« Última modificación: Marzo 14, 2015, 11:29:37 am por OnTheCore »
No me mandes mensajes privados sobre troyanitos,  "crypters" o alguna otra boludez. No voy a ser tu maestro personal ni te voy a vender un curso para ser hacker. Si me envias un mensaje asi, probablemente no te guste la respuesta.


exclamation
[C]Interprete de Brainfuck

Iniciado por mr.blood

2 Respuestas
2351 Vistas
Último mensaje Marzo 05, 2011, 11:31:52 am
por mr.blood
exclamation
Interprete de Brainfuck

Iniciado por mr.blood

8 Respuestas
1833 Vistas
Último mensaje Marzo 05, 2011, 11:32:25 am
por mr.blood
exclamation
[BrainFuck-Código]Imprime mensaje - JaAViEr

Iniciado por JaAViEr

13 Respuestas
2170 Vistas
Último mensaje Marzo 15, 2011, 08:02:39 pm
por tenaciousd
question
Interprete de comandos

Iniciado por Eliasdf

7 Respuestas
1354 Vistas
Último mensaje Febrero 27, 2011, 07:13:20 pm
por JaAViEr
xx
ayuda con interprete

Iniciado por diablokira

19 Respuestas
5332 Vistas
Último mensaje Marzo 23, 2011, 01:15:54 am
por diablokira
resuelto
ayuda interprete perl

Iniciado por Woomd

0 Respuestas
857 Vistas
Último mensaje Junio 24, 2010, 09:51:41 am
por Woomd
xx
Interprete B-Code (Source)

Iniciado por Punk-Rock

2 Respuestas
1271 Vistas
Último mensaje Mayo 10, 2007, 10:30:47 pm
por ziBboh
xx
[vb]Sacar interprete de un archivo de sonido

Iniciado por carloshackii

1 Respuestas
1245 Vistas
Último mensaje Diciembre 14, 2009, 02:48:16 pm
por Rakzo-Fimbres
xx
[Sloth] Psuedo-intérprete (en proceso)

Iniciado por »NaSH

0 Respuestas
991 Vistas
Último mensaje Mayo 19, 2013, 04:16:49 am
por »NaSH