50 lines
960 B
C
50 lines
960 B
C
#pragma once
|
|
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
|
|
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);
|