diff --git a/DOC_EN.TXT b/DOC_EN.TXT
new file mode 100644
index 0000000..ddcd17e
--- /dev/null
+++ b/DOC_EN.TXT
@@ -0,0 +1,45 @@
+Description of functions inside FASM.DLL
+
+fasm_GetVersion()
+ Returns double word containg major version in lower 16 bits, and minor version in the higher 16 bits.
+
+fasm_Assemble(lpSource,lpMemory,cbMemorySize,nPassesLimit,hDisplayPipe)
+ Assembles the given source, using the provided memory block as a free storage space(which is also to contain generated output).
+ The lpSource should contain a pointer to zero-ended source text(pansichar).
+ The lpMemory should be a pointer to the memory block and cbMemorySize should contain its size. In the beginning of this memory block the FASM_STATE(TFASM_STATE in Delphi) structure will reside. The assembler doesn't allocate any memory beside this block, if it is not enough for its purposes, the function return FASM_OUT_OF_MEMORY.
+ The nPassesLimit should be a value in range from 1 to 65536, defining the maximum number of passes the assembler can perform in order to generate the code(the recommended value is 100). If the limit is reached, the function return FASM_CANNOT_GENERATE_CODE.
+ The hDisplayPipe should contain handle of the pipe, to which the output of DISPLAY directives will be written. If this parameter is 0, all the display will get discarded.
+ If the assembly is successful, function returns FASM_OK value and fills the output_data and output_length fields of the FASM_STATE structure(which resides at the beginning of provided memory block).
+ If the assembly failed, function returns one of the other general conditions/errors codes(see "General errors and conditions" in Fasm4Delphi.pas). If if error code is FASM_ERROR, it means that an error caused by a specific place in source occured, then the error_code and error_line fields of FASM_STATE are filled, first one with detailed error code(see "Error codes for FASM_ERROR condition" in Fasm4Delphi.pas), and the second one with pointer to a structure containing data about line that caused the error(see "TLINE_HEADER" in Fasm4Delphi.pas).
+
+fasm_AssembleFile(lpSourceFile,lpMemory,cbMemorySize,nPassesLimit,hDisplayPipe)
+ This function performs identically to fasm_Assemble, except that it takes the lpSourceFile parameter in place of lpSource, and it shall contain the pointer to zero-ended path to file containing the source to assemble(pansichar).
+
+********************************************
+Description of structures used in FASM.DLL
+
+ 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(see "Error codes for FASM_ERROR condition" in Fasm4Delphi.pas) that happened and error_line is a pointer to the LINE_HEADER structure, providing information about the line that caused the error.
+
+TFASM_STATE=record
+ condition:Int32;
+ case byte of
+ 0:(error_code:Int32;
+ error_line:PLINE_HEADER;);
+ 1:(output_length:cardinal;
+ output_data:pointer;);
+end;
+
+ 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.
+
+TLINE_HEADER=record
+ file_path:PAnsiChar;
+ line_number:cardinal;
+ case byte of
+ 0:(file_offset:cardinal);
+ 1:(macro_calling_line:^TLINE_HEADER;
+ macro_line:^TLINE_HEADER;);
+end;
\ No newline at end of file
diff --git a/DOC_JP.TXT b/DOC_JP.TXT
new file mode 100644
index 0000000..caee2f1
Binary files /dev/null and b/DOC_JP.TXT differ
diff --git a/DOC_RU.TXT b/DOC_RU.TXT
new file mode 100644
index 0000000..516b02d
--- /dev/null
+++ b/DOC_RU.TXT
@@ -0,0 +1,45 @@
+Описание функций FASM.DLL
+
+fasm_GetVersion()
+ Возвращает двойное слово(dword) содержащее основную чать версии в младших 16 битах, и подверсию в сташих 16 битах.
+
+fasm_Assemble(lpSource,lpMemory,cbMemorySize,nPassesLimit,hDisplayPipe)
+ Ассемблирует переданный исходный код, используя переданный блок памяти как рабочее пространство(вывод также будет находиться в нём).
+ lpSource должен содержать указатель на оканчивающийся нулём(zero-ended?ansi string) исходный код(pansichar).
+ lpMemory должен содержать указатель на блок памяти,а cbMemorySize должен содержать его размер. Вначале этого блока будет создана структура FASM_STATE(TFASM_STATE в Delphi). Ассемблер не выделяет память вне этого блока, еси её недостаточно функция вернёт FASM_OUT_OF_MEMORY.
+ nPassesLimit должен быть в диапозоне от 1 до 65536. Он задёт максимальное количество проходов, которые ассемблер может выполнить во время генерации кода (рекомендованая величина 100). Если лимит достигнут, вуткция вернёт FASM_CANNOT_GENERATE_CODE.
+ hDisplayPipe должен содержать handle pipe'а, в котрорый будет записан вывод на экран. Если это праметр равен 0, весь вывод будет отброшен.
+ Если ассемблирование пройдёт удачно, функция вернёт FASM_OK и заполнит output_data и output_length в структуре FASM_STATE (которая находится в начале выделнного блока памяти).
+ Если ассемблирование неудалось, функция вернёт один из других основных кодов ошибок(см. "General errors and conditions" в Fasm4Delphi.pas). Если код ошибки - FASM_ERROR, это значит что ошибка произошла в определённом месте кода, тогда поля error_code and error_line FASM_STATE'а будут заполнены, первое из них будет содержать детальный код ошибки(см. "Error codes for FASM_ERROR condition" в Fasm4Delphi.pas),а вторая - указатель(pointer) на структуру содержащую информацию о строке в котрой произошла ошибка(см. "TLINE_HEADER" в Fasm4Delphi.pas).
+
+fasm_AssembleFile(lpSourceFile,lpMemory,cbMemorySize,nPassesLimit,hDisplayPipe)
+ Эта функция работает идентично fasm_Assemble, но в отличии от неё принимает параметр lpSourceFile вместо lpSource. Этот параметр должен содержать указатель(pointer) на оканчивающийся нулём(zero-ended?ansi string) путь до файла содержащего исходный код для ассемблироания(pansichar).
+
+********************************************
+Описание структур используемых FASM.DLL
+
+ Следующая структура находится в начале блока памяти передаваемого в fasm_Assemble. Поле condition содержит тоже значение которое возвращается функцией.
+ Когда функция возвращает FASM_OK, поля output_length и output_data заполнены указателем(pointer) на результат ассемблирования(он находится внутри блока памяти) и длинной этого блока памяти соответственно.
+ Когда функция возвращает FASM_ERROR - error_code содержит детальный код ошибки(см. "Error codes for FASM_ERROR condition" в Fasm4Delphi.pas), а error_line - указатель(pointer) на структуру LINE_HEADER, передающую информацию о строке в которой произошла ошибка.
+
+TFASM_STATE=record
+ condition:Int32;
+ case byte of
+ 0:(error_code:Int32;
+ error_line:PLINE_HEADER;);
+ 1:(output_length:cardinal;
+ output_data:pointer;);
+end;
+
+ Следующая структура имеет два варианта - она либо определяет линию, котрая была загружена непосредственно из исходного кода, либо линию,которая была сгенерирована макроинструкцией. В первом случае старший бит line_number'а установлен в 0, в товремя как во втором этот бит установлен в 1.
+ В превом случае, поле file_path содержит указатель(pointer) на путь до файла с исходным кодом(пустая строка означает, что это исходный код переданный в fasm_Assemble), line_number - номер линии в этом файле(считая с 1), а поле file_offset содержит смешение в файле, на котопом начинается линия.
+ Во вторм случае поле macro_calling_line содержит указатель(pointer) на структуру TLINE_HEADER для линии, которую вызывает макроинструкция, а поле macro_line содержит указатель(pointer) на структуру TLINE_HEADER для линии, в которой находится макро инструкция, указывающая на текущую.
+
+TLINE_HEADER=record
+ file_path:PAnsiChar;
+ line_number:cardinal;
+ case byte of
+ 0:(file_offset:cardinal);
+ 1:(macro_calling_line:^TLINE_HEADER;
+ macro_line:^TLINE_HEADER;);
+end;
\ No newline at end of file
diff --git a/FPCTests/fpcunitproject1.lps b/FPCTests/fpcunitproject1.lps
index 9c90b9b..fe6d19e 100644
--- a/FPCTests/fpcunitproject1.lps
+++ b/FPCTests/fpcunitproject1.lps
@@ -8,20 +8,19 @@
-
+
-
+
-
@@ -33,14 +32,9 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
diff --git a/README.md b/README.md
deleted file mode 100644
index 5107c1a..0000000
--- a/README.md
+++ /dev/null
@@ -1,4 +0,0 @@
-п»їHeaders FASMDll for Delphi/Free Pascal.
-Заголовки FASMDll для Delphi/Free Pascal.
-Donate:
-https://money.yandex.ru/to/410014959153552
\ No newline at end of file
diff --git a/Source/Fasm4Delphi.pas b/Source/Fasm4Delphi.pas
index 6704693..597f0f9 100644
--- a/Source/Fasm4Delphi.pas
+++ b/Source/Fasm4Delphi.pas
@@ -1,58 +1,7 @@
unit Fasm4Delphi platform;
{Delphi Translation&Tests:Artyom Gavrilov,Vlad Untkin.
-
-From FASMDLL.TXT:
-
-Short description of functions inside FASM.DLL
-
-
-fasm_GetVersion()
-
- Returns double word containg major version in lower 16 bits,
- and minor version in the higher 16 bits.
-
-fasm_Assemble(lpSource,lpMemory,cbMemorySize,nPassesLimit,hDisplayPipe)
-
- Assembles the given source, using the provided memory block as a free
- storage space (which is also to contain generated output).
-
- The lpSource should contain a pointer to zero-ended source text.
-
- The lpMemory should be a pointer to the memory block and cbMemorySize
- should contain its size. In the beginning of this memory block the
- FASM_STATE structure will reside (as defined in FASM.ASH). The assembler
- doesn't allocate any memory beside this block, if it is not enough for
- its purposes, the function returns with FASM_OUT_OF_MEMORY state.
-
- The nPassesLimit should be a value in range from 1 to 65536, defining
- the maximum number of passes the assembler can perform in order to
- generate the code (the recommended value is 100). If the limit is reached,
- the function returns with state FASM_CANNOT_GENERATE_CODE.
-
- The hDisplayPipe should contain handle of the pipe, to which the output
- of DISPLAY directives will be written. If this parameter is NULL, all
- the display will get discarded.
-
- If the assembly is successful, function returns FASM_OK value and fills
- the output_data and output_length fields of the FASM_STATE structure
- (which resides at the beginning of provided memory block) with pointer
- to the generated output and count of bytes stored there.
-
- If the assembly failed, function returns one of the other general
- conditions as defined in FASM.ASH. If the condition returned is FASM_ERROR,
- it means that an error caused by a specific place in source occured,
- then the error_code and error_line fields of FASM_STATE are filled,
- first one with detailed error code as defined in FASM.ASH, and the second
- one with pointer to a structure containing data about line that caused
- the error.
-
-fasm_AssembleFile(lpSourceFile,lpMemory,cbMemorySize,nPassesLimit,hDisplayPipe)
-
- This function performs identically to fasm_Assemble, except that it takes
- the lpSourceFile parameter in place of lpSource, and it shall contain the
- pointer to zero-ended path to file containing the source to assemble.
-}
+ Donate:https://money.yandex.ru/to/410014959153552}
interface
@@ -72,7 +21,7 @@ type
case byte of
0:(file_offset:cardinal);
1:(macro_calling_line:^TLINE_HEADER;
- macro_line:^TLINE_HEADER;);
+ macro_line:^TLINE_HEADER;);
end;
PLINE_HEADER=^TLINE_HEADER;
{$EXTERNALSYM TLINE_HEADER}
@@ -84,7 +33,7 @@ type
error_line:PLINE_HEADER;);
1:(output_length:cardinal;
output_data:pointer; );
- end;
+ end;
PFASM_STATE=^TFASM_STATE;
{$EXTERNALSYM TFASM_STATE}
@@ -93,59 +42,59 @@ const
// 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_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_CANNOT_GENERATE_CODE =-6;
FASM_FORMAT_LIMITATIONS_EXCEDDED =-7;
- FASM_WRITE_FAILED =-8;
- FASM_INVALID_DEFINITION =-9;
+ 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_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;
+ 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;
{$IFDEF FasmStaticLink}
function fasm_GetVersion:TFasmVersion;stdcall;external FASMDLLName;
@@ -175,7 +124,7 @@ procedure LoadFASM(Name:string=FASMDLLName);
begin
if &Library<>0 then
FreeFasm;
-{$IFDEF FPC}
+{$IFDEF FPC}
&Library:=LoadLibrary(PChar(Name));
Pointer(fasm_GetVersion):=GetProcAddress(&Library,'fasm_GetVersion');
Pointer(fasm_Assemble):=GetProcAddress(&Library,'fasm_Assemble');
@@ -196,7 +145,7 @@ fasm_GetVersion:=nil;
fasm_Assemble:=nil;
fasm_AssembleFile:=nil;
&Library:=0;
-end;
+end;
{$ENDIF}
end.
diff --git a/Tests/Tester.dproj b/Tests/Tester.dproj
index 31127ce..4383883 100644
--- a/Tests/Tester.dproj
+++ b/Tests/Tester.dproj
@@ -1,7 +1,7 @@
п»ї
{4DB29771-5426-49E7-B0D8-B77F95D4EDCE}
- 18.2
+ 18.3
None
Tester.dpr
True