brainfuck.h 2.1 KB

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