brainfuck.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #ifndef BRAINFUCK_BRAINFUCK_H
  2. #define BRAINFUCK_BRAINFUCK_H
  3. #include <stdio.h>
  4. #include <stdbool.h>
  5. #ifndef TYPEDEF_bf_code
  6. typedef struct bf_code *bf_code;
  7. #define TYPEDEF_bf_code
  8. #endif
  9. #ifndef TYPEDEF_bf_env
  10. typedef struct bf_env bf_env;
  11. #define TYPEDEF_bf_env
  12. #endif
  13. #ifndef TYPEDEF_bf_STEP_FUNC
  14. #define TYPEDEF_bf_STEP_FUNC
  15. typedef int (*bf_STEP_FUNC)(bf_env *env);
  16. #endif
  17. #define bf_setEnvModeFunc(name) bool bf_setEnv##name##Mode(bf_env *env, int mode)
  18. bf_setEnvModeFunc(step);
  19. bf_setEnvModeFunc(information);
  20. #undef bf_setEnvModeFunc
  21. #define bf_setEnvMode(env, name, mode) (bf_setEnv##name##Mode((env), (mode)))
  22. // bf_setEnvMode用于设置enc的mode
  23. // 目前env的mode支持step(步进模式)和information(执行时显示信息)
  24. // mode: 0-关闭 1-打开 -1-若打开则关闭,否则打开 其他值-无实际操作
  25. // 返回值为对应mode的实际值
  26. char *bf_getVersionInfo(void); // 获取版本和版本信息字符串
  27. char *bf_getVersion(void); // 获取版本
  28. // bf_env指针通常可以使用void *来代替
  29. bf_env *bf_setEnv(void); // 设置一个运行环境(返回一个指针)
  30. void bf_freeEnv(bf_env *env); // 释放一个环境
  31. void bf_resetEnv(bf_env *env); // 重启env,清空一切数据
  32. void bf_initEnv(bf_env *env); // 复位读取头到初始位置
  33. // bf_code指针通常可以使用void *来代替
  34. void bf_freeBrainFuck(bf_code code); // 释放代码
  35. bf_code bf_parserBrainFuck_File(FILE *file); // 读取文件并生成代码(返回一个code)
  36. bf_code bf_parserBrainFuck_Str(const char *str); // 读取字符串并生成代码(返回一个code)
  37. void bf_printBrainFuck(bf_code code); // 打印代码
  38. int bf_runBrainFuck(bf_code code, bf_env *env); // 在指定环境中执行代码 (返回0表示无异常)
  39. char *bf_printError(char *info, bf_env *env); // 打印错误信息, 若无错误则不执行, 返回错误信息(若无则返回NULL)
  40. void bf_printPaperTape(bf_env *env); // 打印纸带
  41. void bf_printPaperTapeNear(bf_env *env); // 打印前后20个
  42. void bf_printHead(bf_env *env); // 打印读取头信息
  43. void bf_printEnv(bf_env *env); // 打印env信息
  44. void bf_printEnvWithMode(bf_env *env); // 打印env信息和env的mode信息
  45. bf_STEP_FUNC bf_setEnvStepFunc(bf_env *env, bf_STEP_FUNC step_func); // 设置步进函数, 每次不仅时当用户输入m时则回调该函数(step_func)
  46. #endif //BRAINFUCK_BRAINFUCK_H