Advertisement
Guest User

brainfuck interp

a guest
Mar 17th, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.35 KB | None | 0 0
  1. #include <unistd.h>
  2. #include <stdlib.h>
  3.  
  4. void ft_putchar(char c)
  5. {
  6. write(1, &c, 1);
  7. }
  8.  
  9. char *initmem(void)
  10. {
  11. int sizetab;
  12. int i;
  13. char *mem;
  14.  
  15. sizetab = 5000;
  16. i = 0;
  17. mem = (char*)malloc(sizeof(char) * sizetab + 1);
  18. while (i < sizetab)
  19. {
  20. mem[i] = 0;
  21. i++;
  22. }
  23. mem[i] = '\0';
  24. return (mem);
  25. }
  26.  
  27. int isbf(char c)
  28. {
  29. if (c == '+' || c == '-' || c == '<' || c == '>' || c == '[' || c == ']' || c == '.')
  30. return (1);
  31. return (0);
  32. }
  33.  
  34. void brainfuck(char *code, char *mem)
  35. {
  36. int c;
  37. int i;
  38. int loop;
  39.  
  40. c = 0;
  41. i = 0;
  42. while (code[c])
  43. {
  44. if (isbf(code[c]))
  45. {
  46. if (code[c] == '>')
  47. i++;
  48. if (code[c] == '<')
  49. i--;
  50. if (code[c] == '.')
  51. ft_putchar(mem[i]);
  52. if (code[c] == '+')
  53. mem[i]++;
  54. if (code[c] == '-')
  55. mem[i]--;
  56. if (code[c] == ']')
  57. {
  58. loop = 1;
  59. while (loop)
  60. {
  61. c--;
  62. if (code[c] == ']')
  63. loop++;
  64. else if (code[c] == '[')
  65. loop--;
  66. }
  67. c--;
  68. }
  69. if (code[c] == '[')
  70. {
  71. if (mem[i] == 0)
  72. {
  73. loop = 1;
  74. while (loop)
  75. {
  76. c++;
  77. if (code[c] == '[')
  78. loop++;
  79. else if (code[c] == ']')
  80. loop--;
  81. }
  82. }
  83. }
  84. }
  85. c++;
  86. }
  87. }
  88.  
  89. int main(int ac, char **av)
  90. {
  91. char *mem;
  92.  
  93. if (ac == 2)
  94. {
  95. mem = initmem();
  96. brainfuck(av[1], mem);
  97. }
  98. return (0);
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement