#pragma once #include #include typedef enum { MoveLeft, MoveRight, Increment, Decrement, StartLoop, EndLoop, PutChar, GetChar, Allocate, Free, EnterTape, LeaveTape, PutString, GetString, Clear, Eof, Invalid } Symbol; typedef struct { uint32_t len; uint32_t index; Symbol* data; } Program; void program_init(char* file_path, Program* program); void program_peek(Program* program, Symbol* symbol); void program_next(Program* program, Symbol* symbol); void program_last(Program* program, Symbol* symbol); void program_free(Program* program); typedef struct { uint32_t len; uint32_t index; uint8_t* data; } Tape; void tape_init(uint32_t len, Tape* tape); void tape_left(Tape* tape); void tape_right(Tape* tape); uint8_t tape_get(Tape* tape); void tape_set(Tape* tape, uint8_t value); uint8_t* tape_ptr(Tape* tape); void tape_free(Tape* tape);