51 lines
960 B
C
51 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);
|