// Assm-util.h // Utility functions for the SplitBit Assembler's first pass. // Written by Anachronaut // 10/25/2024 #ifndef ASSMUTL_H #define ASSMUTL_H #include #include #include #include #include "Assm-util.h" #include "assembly.h" #define MAX_INCLUDES 128 // Type values. #define UNKNOWN 0 #define KEYWORD 1 #define INSTRUCTION 2 #define LABEL 3 #define LABEL_DEFINITION 4 #define VALUE 5 #define STRING 6 // Keyword values. #define KEYWORD_INCLUDE 1 #define KEYWORD_PROGRAM 2 #define KEYWORD_DATA 3 // Destination values. #define NOWHERE 0 #define PROGRAM 1 #define DATA 2 // For colorful text. #define RESET "\x1B[0m" #define RED "\x1B[31m" #define GREEN "\x1B[32m" #define YELLOW "\x1B[33m" #define BLUE "\x1B[34m" #define MAGENTA "\x1B[35m" #define CYAN "\x1B[36m" #define WHITE "\x1B[37m" typedef struct { char* token; char* fileName; int lineNumber; uint8_t byteValue; uint8_t dataPointer[MAX_DATA_POINTER_OPERANDS]; // Which Data Pointers this instruction works through, if any. int byteLength; uint16_t address; int type; // "KEYWORD", "INSTRUCTION" , "LABEL" , "VALUE", "STRING" int destination; // "NOWHERE", "PROGRAM", "DATA" } intermediateElement; int checkIfKeyword(intermediateElement *currentElement); int checkIfInstruction(intermediateElement *currentElement); int checkIfLiteralValue(intermediateElement *currentElement); int checkIfLabel(intermediateElement *currentElement); int readToken(intermediateElement *currentElement, FILE *file, int *lineNumber); #endif