; The following structure resides at the beginning of memory block provided ; to the fasm_Assemble function. The condition field contains the same value ; as the one returned by function. ; When function returns FASM_OK condition, the output_length and ; output_data fields are filled - with pointer to generated output ; (somewhere within the provided memory block) and the count of bytes stored ; there. ; When function returns FASM_ERROR, the error_code is filled with the ; code of specific error that happened and error_line is a pointer to the ; LINE_HEADER structure, providing information about the line that caused ; the error. struct FASM_STATE condition dd ? union output_length dd ? error_code dd ? ends union output_data dd ? error_line dd ? ends ends ; The following structure has two variants - it either defines the line ; that was loaded directly from source, or the line that was generated by ; macroinstruction. First case has the highest bit of line_number set to 0, ; while the second case has this bit set. ; In the first case, the file_path field contains pointer to the path of ; source file (empty string if it's the source that was provided directly to ; fasm_Assemble function), the line_number is the number of line within ; that file (starting from 1) and the file_offset field contains the offset ; within the file where the line starts. ; In the second case the macro_calling_line field contains the pointer to ; LINE_HEADER structure for the line which called the macroinstruction, and ; the macro_line field contains the pointer to LINE_HEADER structure for the ; line within the definition of macroinstruction, which generated this one. struct LINE_HEADER file_path dd ? line_number dd ? union file_offset dd ? macro_calling_line dd ? ends macro_line dd ? ends ; General errors and conditions FASM_OK = 0 ; FASM_STATE points to output FASM_WORKING = 1 FASM_ERROR = 2 ; FASM_STATE contains error code FASM_INVALID_PARAMETER = -1 FASM_OUT_OF_MEMORY = -2 FASM_STACK_OVERFLOW = -3 FASM_SOURCE_NOT_FOUND = -4 FASM_UNEXPECTED_END_OF_SOURCE = -5 FASM_CANNOT_GENERATE_CODE = -6 FASM_FORMAT_LIMITATIONS_EXCEDDED = -7 FASM_WRITE_FAILED = -8 FASM_INVALID_DEFINITION = -9 ; Error codes for FASM_ERROR condition FASMERR_FILE_NOT_FOUND = -101 FASMERR_ERROR_READING_FILE = -102 FASMERR_INVALID_FILE_FORMAT = -103 FASMERR_INVALID_MACRO_ARGUMENTS = -104 FASMERR_INCOMPLETE_MACRO = -105 FASMERR_UNEXPECTED_CHARACTERS = -106 FASMERR_INVALID_ARGUMENT = -107 FASMERR_ILLEGAL_INSTRUCTION = -108 FASMERR_INVALID_OPERAND = -109 FASMERR_INVALID_OPERAND_SIZE = -110 FASMERR_OPERAND_SIZE_NOT_SPECIFIED = -111 FASMERR_OPERAND_SIZES_DO_NOT_MATCH = -112 FASMERR_INVALID_ADDRESS_SIZE = -113 FASMERR_ADDRESS_SIZES_DO_NOT_AGREE = -114 FASMERR_DISALLOWED_COMBINATION_OF_REGISTERS = -115 FASMERR_LONG_IMMEDIATE_NOT_ENCODABLE = -116 FASMERR_RELATIVE_JUMP_OUT_OF_RANGE = -117 FASMERR_INVALID_EXPRESSION = -118 FASMERR_INVALID_ADDRESS = -119 FASMERR_INVALID_VALUE = -120 FASMERR_VALUE_OUT_OF_RANGE = -121 FASMERR_UNDEFINED_SYMBOL = -122 FASMERR_INVALID_USE_OF_SYMBOL = -123 FASMERR_NAME_TOO_LONG = -124 FASMERR_INVALID_NAME = -125 FASMERR_RESERVED_WORD_USED_AS_SYMBOL = -126 FASMERR_SYMBOL_ALREADY_DEFINED = -127 FASMERR_MISSING_END_QUOTE = -128 FASMERR_MISSING_END_DIRECTIVE = -129 FASMERR_UNEXPECTED_INSTRUCTION = -130 FASMERR_EXTRA_CHARACTERS_ON_LINE = -131 FASMERR_SECTION_NOT_ALIGNED_ENOUGH = -132 FASMERR_SETTING_ALREADY_SPECIFIED = -133 FASMERR_DATA_ALREADY_DEFINED = -134 FASMERR_TOO_MANY_REPEATS = -135 FASMERR_SYMBOL_OUT_OF_SCOPE = -136 FASMERR_USER_ERROR = -140 FASMERR_ASSERTION_FAILED = -141