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