Ver 1.0
This commit is contained in:
71
.gitignore
vendored
Normal file
71
.gitignore
vendored
Normal file
@@ -0,0 +1,71 @@
|
||||
# Uncomment these types if you want even more clean repository. But be careful.
|
||||
# Uncomment these types if you want even more clean repository. But be careful.
|
||||
# It can make harm to an existing project source. Read explanations below.
|
||||
#
|
||||
# Resource files are binaries containing manifest, project icon and version info.
|
||||
# They can not be viewed as text or compared by diff-tools. Consider replacing them with .rc files.
|
||||
#*.res
|
||||
#
|
||||
# Type library file (binary). In old Delphi versions it should be stored.
|
||||
# Since Delphi 2009 it is produced from .ridl file and can safely be ignored.
|
||||
#*.tlb
|
||||
#
|
||||
# Diagram Portfolio file. Used by the diagram editor up to Delphi 7.
|
||||
# Uncomment this if you are not using diagrams or use newer Delphi version.
|
||||
#*.ddp
|
||||
#
|
||||
# Visual LiveBindings file. Added in Delphi XE2.
|
||||
# Uncomment this if you are not using LiveBindings Designer.
|
||||
#*.vlb
|
||||
#
|
||||
# Deployment Manager configuration file for your project. Added in Delphi XE2.
|
||||
# Uncomment this if it is not mobile development and you do not use remote debug feature.
|
||||
#*.deployproj
|
||||
#
|
||||
# C++ object files produced when C/C++ Output file generation is configured.
|
||||
# Uncomment this if you are not using external objects (zlib library for example).
|
||||
#*.obj
|
||||
#
|
||||
|
||||
# Delphi compiler-generated binaries (safe to delete)
|
||||
*.exe
|
||||
*.dll
|
||||
*.bpl
|
||||
*.bpi
|
||||
*.dcp
|
||||
*.so
|
||||
*.apk
|
||||
*.drc
|
||||
*.map
|
||||
*.dres
|
||||
*.rsm
|
||||
*.tds
|
||||
*.dcu
|
||||
*.lib
|
||||
*.a
|
||||
*.o
|
||||
*.ocx
|
||||
Temp/
|
||||
*.tmp
|
||||
|
||||
# Delphi autogenerated files (duplicated info)
|
||||
*.cfg
|
||||
*.hpp
|
||||
*Resource.rc
|
||||
|
||||
# Delphi local files (user-specific info)
|
||||
*.local
|
||||
*.identcache
|
||||
*.projdata
|
||||
*.tvsconfig
|
||||
*.dsk
|
||||
|
||||
# Delphi history and backups
|
||||
__history/
|
||||
__recovery/
|
||||
*.~*
|
||||
|
||||
# Castalia statistics file (since XE7 Castalia is distributed with Delphi)
|
||||
*.stat
|
||||
|
||||
!FasmDll/
|
||||
156
FasmDll/DEMO/ASMDEMO.ASM
Normal file
156
FasmDll/DEMO/ASMDEMO.ASM
Normal file
@@ -0,0 +1,156 @@
|
||||
|
||||
format PE GUI 4.0
|
||||
entry start
|
||||
|
||||
include 'win32a.inc'
|
||||
include 'fasm.ash'
|
||||
include 'fedit.ash'
|
||||
|
||||
section '.data' data readable writeable
|
||||
|
||||
_fedit db 'FEDIT.DLL',0
|
||||
_caption db 'flat assembler %d.%d',0
|
||||
_error db 'ERROR',0
|
||||
|
||||
_source db 0Dh,0Ah
|
||||
db ' org 100h',0Dh,0Ah
|
||||
db 0Dh,0Ah
|
||||
db ' mov ah,09h ',' ; write',0Dh,0Ah
|
||||
db ' mov dx,text',0Dh,0Ah
|
||||
db ' int 21h',0Dh,0Ah
|
||||
db ' int 20h',0Dh,0Ah
|
||||
db 0Dh,0Ah
|
||||
db ' text db "Hello!",24h',0Dh,0Ah
|
||||
db 0
|
||||
|
||||
buffer rb 10000h
|
||||
|
||||
fasm_memory:
|
||||
fasm_state FASM_STATE
|
||||
rb 800000h-($-fasm_memory) ; reserve total 8 MB for assembler
|
||||
|
||||
section '.code' code readable executable
|
||||
|
||||
start:
|
||||
|
||||
invoke LoadLibrary,_fedit
|
||||
or eax,eax
|
||||
jz exit
|
||||
invoke GetModuleHandle,0
|
||||
invoke DialogBoxParam,eax,37,HWND_DESKTOP,DialogProc,0
|
||||
|
||||
exit:
|
||||
invoke ExitProcess,0
|
||||
|
||||
proc DialogProc hwnddlg,msg,wparam,lparam
|
||||
push ebx esi edi
|
||||
cmp [msg],WM_INITDIALOG
|
||||
je wminitdialog
|
||||
cmp [msg],WM_COMMAND
|
||||
je wmcommand
|
||||
cmp [msg],WM_CLOSE
|
||||
je wmclose
|
||||
xor eax,eax
|
||||
jmp finish
|
||||
wminitdialog:
|
||||
invoke fasm_GetVersion
|
||||
mov edx,eax
|
||||
and eax,0FFFFh
|
||||
shr edx,16
|
||||
cinvoke wsprintf,buffer,_caption,eax,edx
|
||||
invoke SendMessage,[hwnddlg],WM_SETTEXT,0,buffer
|
||||
invoke SetDlgItemText,[hwnddlg],ID_SOURCE,_source
|
||||
jmp processed
|
||||
wmcommand:
|
||||
cmp [wparam],BN_CLICKED shl 16 + IDCANCEL
|
||||
je wmclose
|
||||
cmp [wparam],BN_CLICKED shl 16 + IDOK
|
||||
jne processed
|
||||
|
||||
invoke GetDlgItemText,[hwnddlg],ID_SOURCE,buffer,10000h
|
||||
|
||||
invoke fasm_Assemble,buffer,fasm_memory,800000h,100,NULL
|
||||
cmp eax,FASM_OK
|
||||
je show_output
|
||||
|
||||
invoke SetDlgItemText,[hwnddlg],ID_OUTPUT,_error
|
||||
|
||||
jmp processed
|
||||
|
||||
show_output:
|
||||
|
||||
mov esi,[fasm_state.output_data]
|
||||
mov ecx,[fasm_state.output_length]
|
||||
mov edi,buffer
|
||||
xor edx,edx
|
||||
jecxz output_ok
|
||||
output_to_hex:
|
||||
test dl,7
|
||||
jz @f
|
||||
mov al,20h
|
||||
stosb
|
||||
@@:
|
||||
mov al,[esi+edx]
|
||||
shr al,4
|
||||
cmp al,10
|
||||
sbb al,69h
|
||||
das
|
||||
stosb
|
||||
mov al,[esi+edx]
|
||||
and al,0Fh
|
||||
cmp al,10
|
||||
sbb al,69h
|
||||
das
|
||||
stosb
|
||||
inc edx
|
||||
test dl,7
|
||||
jnz @f
|
||||
mov ax,0D0Ah
|
||||
stosw
|
||||
@@:
|
||||
loop output_to_hex
|
||||
output_ok:
|
||||
xor al,al
|
||||
stosb
|
||||
|
||||
invoke SetDlgItemText,[hwnddlg],ID_OUTPUT,buffer
|
||||
|
||||
jmp processed
|
||||
wmclose:
|
||||
invoke EndDialog,[hwnddlg],0
|
||||
processed:
|
||||
mov eax,1
|
||||
finish:
|
||||
pop edi esi ebx
|
||||
ret
|
||||
endp
|
||||
|
||||
section '.idata' import data readable writeable
|
||||
|
||||
library kernel32,'KERNEL32.DLL',\
|
||||
user32,'USER32.DLL',\
|
||||
fasm,'FASM.DLL'
|
||||
|
||||
include 'api\kernel32.inc'
|
||||
include 'api\user32.inc'
|
||||
|
||||
import fasm,\
|
||||
fasm_GetVersion,'fasm_GetVersion',\
|
||||
fasm_Assemble,'fasm_Assemble',\
|
||||
fasm_AssembleFile,'fasm_AssembleFile'
|
||||
|
||||
section '.rsrc' resource data readable
|
||||
|
||||
ID_SOURCE = 100
|
||||
ID_OUTPUT = 101
|
||||
|
||||
directory RT_DIALOG,dialogs
|
||||
|
||||
resource dialogs,\
|
||||
37,LANG_ENGLISH+SUBLANG_DEFAULT,demonstration
|
||||
|
||||
dialog demonstration,'Memory-to-memory assembly',40,40,180,220,WS_CAPTION+WS_POPUP+WS_SYSMENU+DS_MODALFRAME
|
||||
dialogitem 'FEDIT','',ID_SOURCE,10,10,160,120,WS_VISIBLE+WS_BORDER+WS_TABSTOP
|
||||
dialogitem 'FEDIT','',ID_OUTPUT,10,150,160,60,WS_VISIBLE+WS_BORDER+WS_TABSTOP
|
||||
dialogitem 'BUTTON','Assemble',IDOK,10,132,160,15,WS_VISIBLE+WS_TABSTOP
|
||||
enddialog
|
||||
104
FasmDll/DEMO/FASM.ASH
Normal file
104
FasmDll/DEMO/FASM.ASH
Normal file
@@ -0,0 +1,104 @@
|
||||
|
||||
; 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
|
||||
69
FasmDll/DEMO/FEDIT.ASH
Normal file
69
FasmDll/DEMO/FEDIT.ASH
Normal file
@@ -0,0 +1,69 @@
|
||||
|
||||
; flat editor mode flags
|
||||
|
||||
FEMODE_OVERWRITE = 1
|
||||
FEMODE_VERTICALSEL = 2
|
||||
FEMODE_NOUNDO = 4
|
||||
FEMODE_READONLY = 8
|
||||
|
||||
; flat editor search flags
|
||||
|
||||
FEFIND_CASESENSITIVE = 1
|
||||
FEFIND_WHOLEWORDS = 2
|
||||
FEFIND_BACKWARD = 4
|
||||
FEFIND_INWHOLETEXT = 8
|
||||
|
||||
; flat editor styles
|
||||
|
||||
FES_AUTOINDENT = 0001h
|
||||
FES_AUTOBRACKETS = 0002h
|
||||
FES_SMARTTABS = 0004h
|
||||
FES_SECURESEL = 0008h
|
||||
FES_OPTIMALFILL = 0010h
|
||||
FES_CONSOLECARET = 0020h
|
||||
FES_REVIVEDEADKEYS = 0040h
|
||||
FES_TIMESCROLL = 0080h
|
||||
|
||||
; flat editor messages
|
||||
|
||||
FEM_SETMODE = WM_USER + 0
|
||||
FEM_GETMODE = WM_USER + 1
|
||||
FEM_SETPOS = WM_USER + 2
|
||||
FEM_GETPOS = WM_USER + 3
|
||||
FEM_SETSYNTAXHIGHLIGHT = WM_USER + 4
|
||||
FEM_SETRIGHTCLICKMENU = WM_USER + 5
|
||||
FEM_SETTEXTCOLOR = WM_USER + 6
|
||||
FEM_SETSELCOLOR = WM_USER + 7
|
||||
FEM_FINDFIRST = WM_USER + 8
|
||||
FEM_FINDNEXT = WM_USER + 9
|
||||
FEM_CANFINDNEXT = WM_USER + 10
|
||||
FEM_GETLINELENGTH = WM_USER + 11
|
||||
FEM_GETLINE = WM_USER + 12
|
||||
FEM_GETWORDATCARET = WM_USER + 13
|
||||
FEM_BEGINOPERATION = WM_USER + 14
|
||||
FEM_ENDOPERATION = WM_USER + 15
|
||||
FEM_MARKUNMODIFIED = WM_USER + 16
|
||||
FEM_ISUNMODIFIED = WM_USER + 17
|
||||
FEM_GETSEARCHTEXT = WM_USER + 18
|
||||
FEM_GETSEARCHFLAGS = WM_USER + 19
|
||||
FEM_RELEASESEARCH = WM_USER + 20
|
||||
FEM_REDO = WM_USER + 84
|
||||
FEM_CANREDO = WM_USER + 85
|
||||
|
||||
; flat editor notifications
|
||||
|
||||
FEN_SETFOCUS = 01h
|
||||
FEN_KILLFOCUS = 02h
|
||||
FEN_TEXTCHANGE = 03h
|
||||
FEN_POSCHANGE = 04h
|
||||
FEN_MODECHANGE = 05h
|
||||
FEN_OUTOFMEMORY = 0Fh
|
||||
|
||||
; flat editor position structure
|
||||
|
||||
struct FEPOS
|
||||
selectionPosition dd ?
|
||||
selectionLine dd ?
|
||||
caretPosition dd ?
|
||||
caretLine dd ?
|
||||
ends
|
||||
104
FasmDll/FASM.ASH
Normal file
104
FasmDll/FASM.ASH
Normal file
@@ -0,0 +1,104 @@
|
||||
|
||||
; 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
|
||||
49
FasmDll/FASMDLL.TXT
Normal file
49
FasmDll/FASMDLL.TXT
Normal file
@@ -0,0 +1,49 @@
|
||||
|
||||
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.
|
||||
37
FasmDll/LICENSE.TXT
Normal file
37
FasmDll/LICENSE.TXT
Normal file
@@ -0,0 +1,37 @@
|
||||
|
||||
flat assembler version 1.71
|
||||
Copyright (c) 1999-2014, Tomasz Grysztar.
|
||||
All rights reserved.
|
||||
|
||||
This program is free for commercial and non-commercial use as long as
|
||||
the following conditions are adhered to.
|
||||
|
||||
Copyright remains Tomasz Grysztar, and as such any Copyright notices
|
||||
in the code are not to be removed.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
The licence and distribution terms for any publically available
|
||||
version or derivative of this code cannot be changed. i.e. this code
|
||||
cannot simply be copied and put under another distribution licence
|
||||
(including the GNU Public Licence).
|
||||
147
FasmDll/SOURCE/DLL/ERRORS.INC
Normal file
147
FasmDll/SOURCE/DLL/ERRORS.INC
Normal file
@@ -0,0 +1,147 @@
|
||||
|
||||
; flat assembler core
|
||||
; Copyright (c) 1999-2017, Tomasz Grysztar.
|
||||
; All rights reserved.
|
||||
|
||||
invalid_parameter:
|
||||
mov eax,FASM_INVALID_PARAMETER
|
||||
jmp general_error
|
||||
out_of_memory:
|
||||
mov eax,FASM_OUT_OF_MEMORY
|
||||
jmp general_error
|
||||
stack_overflow:
|
||||
mov eax,FASM_STACK_OVERFLOW
|
||||
jmp general_error
|
||||
main_file_not_found:
|
||||
mov eax,FASM_SOURCE_NOT_FOUND
|
||||
jmp general_error
|
||||
unexpected_end_of_file:
|
||||
mov eax,FASM_UNEXPECTED_END_OF_SOURCE
|
||||
jmp general_error
|
||||
code_cannot_be_generated:
|
||||
mov eax,FASM_CANNOT_GENERATE_CODE
|
||||
jmp general_error
|
||||
format_limitations_exceeded:
|
||||
mov eax,FASM_FORMAT_LIMITATIONS_EXCEDDED
|
||||
jmp general_error
|
||||
invalid_definition:
|
||||
mov eax,FASM_INVALID_DEFINITION
|
||||
jmp general_error
|
||||
write_failed:
|
||||
mov eax,FASM_WRITE_FAILED
|
||||
jmp general_error
|
||||
|
||||
file_not_found:
|
||||
mov eax,FASMERR_FILE_NOT_FOUND
|
||||
jmp assembler_error
|
||||
error_reading_file:
|
||||
mov eax,FASMERR_ERROR_READING_FILE
|
||||
jmp assembler_error
|
||||
invalid_file_format:
|
||||
mov eax,FASMERR_INVALID_FILE_FORMAT
|
||||
jmp assembler_error
|
||||
invalid_macro_arguments:
|
||||
mov eax,FASMERR_INVALID_MACRO_ARGUMENTS
|
||||
jmp assembler_error
|
||||
incomplete_macro:
|
||||
mov eax,FASMERR_INCOMPLETE_MACRO
|
||||
jmp assembler_error
|
||||
unexpected_characters:
|
||||
mov eax,FASMERR_UNEXPECTED_CHARACTERS
|
||||
jmp assembler_error
|
||||
invalid_argument:
|
||||
mov eax,FASMERR_INVALID_ARGUMENT
|
||||
jmp assembler_error
|
||||
illegal_instruction:
|
||||
mov eax,FASMERR_ILLEGAL_INSTRUCTION
|
||||
jmp assembler_error
|
||||
invalid_operand:
|
||||
mov eax,FASMERR_INVALID_OPERAND
|
||||
jmp assembler_error
|
||||
invalid_operand_size:
|
||||
mov eax,FASMERR_INVALID_OPERAND_SIZE
|
||||
jmp assembler_error
|
||||
operand_size_not_specified:
|
||||
mov eax,FASMERR_OPERAND_SIZE_NOT_SPECIFIED
|
||||
jmp assembler_error
|
||||
operand_sizes_do_not_match:
|
||||
mov eax,FASMERR_OPERAND_SIZES_DO_NOT_MATCH
|
||||
jmp assembler_error
|
||||
invalid_address_size:
|
||||
mov eax,FASMERR_INVALID_ADDRESS_SIZE
|
||||
jmp assembler_error
|
||||
address_sizes_do_not_agree:
|
||||
mov eax,FASMERR_ADDRESS_SIZES_DO_NOT_AGREE
|
||||
jmp assembler_error
|
||||
disallowed_combination_of_registers:
|
||||
mov eax,FASMERR_DISALLOWED_COMBINATION_OF_REGISTERS
|
||||
jmp assembler_error
|
||||
long_immediate_not_encodable:
|
||||
mov eax,FASMERR_LONG_IMMEDIATE_NOT_ENCODABLE
|
||||
jmp assembler_error
|
||||
relative_jump_out_of_range:
|
||||
mov eax,FASMERR_RELATIVE_JUMP_OUT_OF_RANGE
|
||||
jmp assembler_error
|
||||
invalid_expression:
|
||||
mov eax,FASMERR_INVALID_EXPRESSION
|
||||
jmp assembler_error
|
||||
invalid_address:
|
||||
mov eax,FASMERR_INVALID_ADDRESS
|
||||
jmp assembler_error
|
||||
invalid_value:
|
||||
mov eax,FASMERR_INVALID_VALUE
|
||||
jmp assembler_error
|
||||
value_out_of_range:
|
||||
mov eax,FASMERR_VALUE_OUT_OF_RANGE
|
||||
jmp assembler_error
|
||||
undefined_symbol:
|
||||
mov eax,FASMERR_UNDEFINED_SYMBOL
|
||||
jmp assembler_error
|
||||
invalid_use_of_symbol:
|
||||
mov eax,FASMERR_INVALID_USE_OF_SYMBOL
|
||||
jmp assembler_error
|
||||
name_too_long:
|
||||
mov eax,FASMERR_NAME_TOO_LONG
|
||||
jmp assembler_error
|
||||
invalid_name:
|
||||
mov eax,FASMERR_INVALID_NAME
|
||||
jmp assembler_error
|
||||
reserved_word_used_as_symbol:
|
||||
mov eax,FASMERR_RESERVED_WORD_USED_AS_SYMBOL
|
||||
jmp assembler_error
|
||||
symbol_already_defined:
|
||||
mov eax,FASMERR_SYMBOL_ALREADY_DEFINED
|
||||
jmp assembler_error
|
||||
symbol_out_of_scope:
|
||||
mov eax,FASMERR_SYMBOL_OUT_OF_SCOPE
|
||||
jmp assembler_error
|
||||
missing_end_quote:
|
||||
mov eax,FASMERR_MISSING_END_QUOTE
|
||||
jmp assembler_error
|
||||
missing_end_directive:
|
||||
mov eax,FASMERR_MISSING_END_DIRECTIVE
|
||||
jmp assembler_error
|
||||
unexpected_instruction:
|
||||
mov eax,FASMERR_UNEXPECTED_INSTRUCTION
|
||||
jmp assembler_error
|
||||
extra_characters_on_line:
|
||||
mov eax,FASMERR_EXTRA_CHARACTERS_ON_LINE
|
||||
jmp assembler_error
|
||||
section_not_aligned_enough:
|
||||
mov eax,FASMERR_SECTION_NOT_ALIGNED_ENOUGH
|
||||
jmp assembler_error
|
||||
setting_already_specified:
|
||||
mov eax,FASMERR_SETTING_ALREADY_SPECIFIED
|
||||
jmp assembler_error
|
||||
data_already_defined:
|
||||
mov eax,FASMERR_DATA_ALREADY_DEFINED
|
||||
jmp assembler_error
|
||||
too_many_repeats:
|
||||
mov eax,FASMERR_TOO_MANY_REPEATS
|
||||
jmp assembler_error
|
||||
invoked_error:
|
||||
mov eax,FASMERR_USER_ERROR
|
||||
jmp assembler_error
|
||||
assertion_failed:
|
||||
mov eax,FASMERR_ASSERTION_FAILED
|
||||
jmp assembler_error
|
||||
104
FasmDll/SOURCE/DLL/FASM.ASH
Normal file
104
FasmDll/SOURCE/DLL/FASM.ASH
Normal file
@@ -0,0 +1,104 @@
|
||||
|
||||
; 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
|
||||
458
FasmDll/SOURCE/DLL/FASM.ASM
Normal file
458
FasmDll/SOURCE/DLL/FASM.ASM
Normal file
@@ -0,0 +1,458 @@
|
||||
|
||||
; flat assembler DLL interface for Win32
|
||||
; Copyright (c) 1999-2017, Tomasz Grysztar.
|
||||
; All rights reserved.
|
||||
|
||||
format PE DLL GUI 4.0
|
||||
entry DLLEntryPoint
|
||||
|
||||
include 'win32a.inc'
|
||||
include 'fasm.ash'
|
||||
|
||||
section '.data' data readable writeable
|
||||
|
||||
include '..\variable.inc'
|
||||
|
||||
state dd ?
|
||||
esp_save dd ?
|
||||
source dd ?
|
||||
source_position dd ?
|
||||
first_write dd ?
|
||||
first_write_length dd ?
|
||||
second_write dd ?
|
||||
second_write_length dd ?
|
||||
display_pipe dd ?
|
||||
|
||||
systime SYSTEMTIME
|
||||
|
||||
tmp dd ?
|
||||
buffer rb 1000h
|
||||
|
||||
section '.text' code readable executable
|
||||
|
||||
DLLEntryPoint:
|
||||
mov eax,TRUE
|
||||
ret 12
|
||||
|
||||
fasm_GetVersion:
|
||||
mov eax,VERSION_MAJOR + VERSION_MINOR shl 16
|
||||
ret
|
||||
|
||||
fasm_AssembleFile:
|
||||
|
||||
mov eax,[lpSource]
|
||||
mov [input_file],eax
|
||||
mov [output_file],null_byte
|
||||
|
||||
jmp setup_assembler
|
||||
|
||||
fasm_Assemble:
|
||||
|
||||
virtual at esp+4
|
||||
lpSource dd ?
|
||||
lpMemory dd ?
|
||||
cbMemorySize dd ?
|
||||
nPassesLimit dd ?
|
||||
hDisplayPipe dd ?
|
||||
end virtual
|
||||
|
||||
mov eax,[lpSource]
|
||||
mov [source],eax
|
||||
mov [source_position],0
|
||||
|
||||
mov [input_file],null_byte
|
||||
mov [output_file],null_byte
|
||||
|
||||
setup_assembler:
|
||||
|
||||
mov eax,[nPassesLimit]
|
||||
cmp eax,10000h
|
||||
ja invalid_parameter
|
||||
or eax,eax
|
||||
jz invalid_parameter
|
||||
mov [passes_limit],ax
|
||||
|
||||
mov eax,[lpMemory]
|
||||
mov ecx,[cbMemorySize]
|
||||
mov [state],eax
|
||||
mov [eax+FASM_STATE.condition],FASM_WORKING
|
||||
sub ecx,sizeof.FASM_STATE
|
||||
jbe out_of_memory
|
||||
add eax,sizeof.FASM_STATE
|
||||
mov [memory_start],eax
|
||||
mov edx,ecx
|
||||
shr edx,2
|
||||
sub ecx,edx
|
||||
add eax,ecx
|
||||
mov [memory_end],eax
|
||||
mov [additional_memory],eax
|
||||
add eax,edx
|
||||
mov [additional_memory_end],eax
|
||||
|
||||
xor eax,eax
|
||||
mov [initial_definitions],eax
|
||||
|
||||
mov [first_write],eax
|
||||
mov [second_write],eax
|
||||
|
||||
mov eax,[hDisplayPipe]
|
||||
mov [display_pipe],eax
|
||||
|
||||
push ebp ebx esi edi
|
||||
mov eax,esp
|
||||
mov [esp_save],eax
|
||||
and eax,not 0FFFh
|
||||
add eax,1000h-10000h
|
||||
mov [stack_limit],eax
|
||||
|
||||
call preprocessor
|
||||
call parser
|
||||
call assembler
|
||||
call formatter
|
||||
|
||||
mov ebx,[state]
|
||||
mov [ebx+FASM_STATE.condition],FASM_OK
|
||||
|
||||
done:
|
||||
mov eax,[ebx+FASM_STATE.condition]
|
||||
pop edi esi ebx ebp
|
||||
ret 20
|
||||
|
||||
general_error:
|
||||
mov esp,[esp_save]
|
||||
mov ebx,[state]
|
||||
mov [ebx+FASM_STATE.condition],eax
|
||||
jmp done
|
||||
|
||||
assembler_error:
|
||||
mov esp,[esp_save]
|
||||
mov ebx,[state]
|
||||
mov [ebx+FASM_STATE.error_code],eax
|
||||
mov eax,[current_line]
|
||||
mov [ebx+FASM_STATE.error_line],eax
|
||||
mov eax,FASM_ERROR
|
||||
jmp general_error
|
||||
|
||||
get_environment_variable:
|
||||
invoke GetEnvironmentVariable,esi,buffer,1000h
|
||||
retn
|
||||
|
||||
open:
|
||||
cmp byte [edx],0
|
||||
je open_memory
|
||||
invoke CreateFile,edx,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,0,0
|
||||
cmp eax,-1
|
||||
je file_error
|
||||
mov ebx,eax
|
||||
clc
|
||||
retn
|
||||
file_error:
|
||||
stc
|
||||
retn
|
||||
open_memory:
|
||||
xor ebx,ebx
|
||||
retn
|
||||
read:
|
||||
or ebx,ebx
|
||||
jz read_memory
|
||||
mov ebp,ecx
|
||||
invoke ReadFile,ebx,edx,ecx,tmp,0
|
||||
or eax,eax
|
||||
jz file_error
|
||||
cmp ebp,[tmp]
|
||||
jne file_error
|
||||
clc
|
||||
retn
|
||||
read_memory:
|
||||
push esi edi
|
||||
mov esi,[source]
|
||||
add esi,[source_position]
|
||||
mov edi,edx
|
||||
call move_block
|
||||
pop edi esi
|
||||
clc
|
||||
retn
|
||||
move_block:
|
||||
mov al,cl
|
||||
shr ecx,2
|
||||
rep movsd
|
||||
mov cl,al
|
||||
and cl,11b
|
||||
rep movsb
|
||||
retn
|
||||
lseek:
|
||||
or ebx,ebx
|
||||
jz seek_memory
|
||||
movzx eax,al
|
||||
invoke SetFilePointer,ebx,edx,0,eax
|
||||
cmp eax,-1
|
||||
je file_error
|
||||
retn
|
||||
seek_memory:
|
||||
push esi
|
||||
mov esi,[source]
|
||||
mov ecx,edx
|
||||
or al,al
|
||||
jz seek_forward
|
||||
add esi,[source_position]
|
||||
cmp al,2
|
||||
je seek_source_end
|
||||
seek_forward:
|
||||
sub ecx,1
|
||||
jc seek_complete
|
||||
seek_in_source:
|
||||
lodsb
|
||||
or al,al
|
||||
loopnz seek_in_source
|
||||
jnz seek_complete
|
||||
dec esi
|
||||
seek_complete:
|
||||
mov eax,esi
|
||||
sub eax,[source]
|
||||
mov [source_position],eax
|
||||
pop esi
|
||||
retn
|
||||
seek_source_end:
|
||||
lodsb
|
||||
or al,al
|
||||
jnz seek_source_end
|
||||
dec esi
|
||||
sub esi,edx
|
||||
cmp esi,[source]
|
||||
jae seek_complete
|
||||
mov esi,[source]
|
||||
jmp seek_complete
|
||||
create:
|
||||
or ebx,-1
|
||||
clc
|
||||
retn
|
||||
write:
|
||||
cmp [first_write],0
|
||||
jne make_second_write
|
||||
mov [first_write],edx
|
||||
mov [first_write_length],ecx
|
||||
clc
|
||||
retn
|
||||
make_second_write:
|
||||
cmp [second_write],0
|
||||
jne cannot_write
|
||||
mov [second_write],edx
|
||||
mov [second_write_length],ecx
|
||||
clc
|
||||
retn
|
||||
cannot_write:
|
||||
stc
|
||||
retn
|
||||
close:
|
||||
or ebx,ebx
|
||||
jz file_closed
|
||||
cmp ebx,-1
|
||||
je output_ready
|
||||
invoke CloseHandle,ebx
|
||||
file_closed:
|
||||
retn
|
||||
output_ready:
|
||||
mov ebx,[state]
|
||||
cmp [second_write],0
|
||||
jne two_part_output
|
||||
mov eax,[first_write]
|
||||
mov [ebx+FASM_STATE.output_data],eax
|
||||
mov eax,[first_write_length]
|
||||
mov [ebx+FASM_STATE.output_length],eax
|
||||
retn
|
||||
two_part_output:
|
||||
mov eax,[second_write]
|
||||
mov [ebx+FASM_STATE.output_data],eax
|
||||
shuffle_output:
|
||||
mov ecx,[first_write_length]
|
||||
cmp ecx,[second_write_length]
|
||||
ja small_second_part
|
||||
sub [second_write_length],ecx
|
||||
mov esi,[first_write]
|
||||
mov edi,[second_write]
|
||||
call xchg_block
|
||||
mov [second_write],edi
|
||||
jmp shuffle_output
|
||||
xchg_block:
|
||||
shr ecx,1
|
||||
jnc xchgb_ok
|
||||
mov al,[edi]
|
||||
xchg al,[esi]
|
||||
stosb
|
||||
inc esi
|
||||
xchgb_ok:
|
||||
shr ecx,1
|
||||
jnc xchgw_ok
|
||||
mov ax,[edi]
|
||||
xchg ax,[esi]
|
||||
stosw
|
||||
add esi,2
|
||||
xchgw_ok:
|
||||
jz xchgd_ok
|
||||
xchgd:
|
||||
mov eax,[edi]
|
||||
xchg eax,[esi]
|
||||
stosd
|
||||
add esi,4
|
||||
loop xchgd
|
||||
xchgd_ok:
|
||||
retn
|
||||
small_second_part:
|
||||
mov edi,[second_write]
|
||||
mov esi,edi
|
||||
add edi,[first_write_length]
|
||||
cmp edi,[first_write]
|
||||
jbe move_second_part
|
||||
mov edi,[first_write]
|
||||
add edi,[first_write_length]
|
||||
move_second_part:
|
||||
push edi
|
||||
mov ecx,[second_write_length]
|
||||
lea eax,[edi+ecx]
|
||||
cmp eax,[tagged_blocks]
|
||||
ja out_of_memory
|
||||
call move_block
|
||||
mov edi,[second_write]
|
||||
mov esi,[first_write]
|
||||
mov ecx,[first_write_length]
|
||||
call move_block
|
||||
pop esi
|
||||
mov ecx,[second_write_length]
|
||||
call move_block
|
||||
mov ecx,edi
|
||||
sub ecx,[ebx+FASM_STATE.output_data]
|
||||
mov [ebx+FASM_STATE.output_length],ecx
|
||||
retn
|
||||
|
||||
display_block:
|
||||
mov eax,[display_pipe]
|
||||
or eax,eax
|
||||
jz display_ok
|
||||
invoke WriteFile,eax,esi,ecx,tmp,NULL
|
||||
display_ok:
|
||||
retn
|
||||
|
||||
make_timestamp:
|
||||
invoke GetSystemTime,systime
|
||||
movzx ecx,[systime.wYear]
|
||||
mov eax,ecx
|
||||
sub eax,1970
|
||||
mov ebx,365
|
||||
mul ebx
|
||||
mov ebp,eax
|
||||
mov eax,ecx
|
||||
sub eax,1969
|
||||
shr eax,2
|
||||
add ebp,eax
|
||||
mov eax,ecx
|
||||
sub eax,1901
|
||||
mov ebx,100
|
||||
div ebx
|
||||
sub ebp,eax
|
||||
mov eax,ecx
|
||||
xor edx,edx
|
||||
sub eax,1601
|
||||
mov ebx,400
|
||||
div ebx
|
||||
add ebp,eax
|
||||
movzx ecx,[systime.wMonth]
|
||||
mov eax,ecx
|
||||
dec eax
|
||||
mov ebx,30
|
||||
mul ebx
|
||||
add ebp,eax
|
||||
cmp ecx,8
|
||||
jbe months_correction
|
||||
mov eax,ecx
|
||||
sub eax,7
|
||||
shr eax,1
|
||||
add ebp,eax
|
||||
mov ecx,8
|
||||
months_correction:
|
||||
mov eax,ecx
|
||||
shr eax,1
|
||||
add ebp,eax
|
||||
cmp ecx,2
|
||||
jbe day_correction_ok
|
||||
sub ebp,2
|
||||
movzx ecx,word [systime.wYear]
|
||||
test ecx,11b
|
||||
jnz day_correction_ok
|
||||
xor edx,edx
|
||||
mov eax,ecx
|
||||
mov ebx,100
|
||||
div ebx
|
||||
or edx,edx
|
||||
jnz day_correction
|
||||
mov eax,ecx
|
||||
mov ebx,400
|
||||
div ebx
|
||||
or edx,edx
|
||||
jnz day_correction_ok
|
||||
day_correction:
|
||||
inc ebp
|
||||
day_correction_ok:
|
||||
movzx eax,[systime.wDay]
|
||||
dec eax
|
||||
add eax,ebp
|
||||
mov ebx,24
|
||||
mul ebx
|
||||
movzx ecx,[systime.wHour]
|
||||
add eax,ecx
|
||||
mov ebx,60
|
||||
mul ebx
|
||||
movzx ecx,[systime.wMinute]
|
||||
add eax,ecx
|
||||
mov ebx,60
|
||||
mul ebx
|
||||
movzx ecx,[systime.wSecond]
|
||||
add eax,ecx
|
||||
retn
|
||||
|
||||
dump_symbols:
|
||||
retn
|
||||
|
||||
include 'errors.inc'
|
||||
|
||||
include '..\preproce.inc'
|
||||
include '..\parser.inc'
|
||||
include '..\exprpars.inc'
|
||||
include '..\exprcalc.inc'
|
||||
include '..\assemble.inc'
|
||||
include '..\formats.inc'
|
||||
include '..\x86_64.inc'
|
||||
include '..\avx.inc'
|
||||
include '..\tables.inc'
|
||||
|
||||
include '..\version.inc'
|
||||
|
||||
null_byte db 0
|
||||
|
||||
section '.idata' import data readable writeable
|
||||
|
||||
library kernel32,'KERNEL32.DLL'
|
||||
|
||||
include 'api\kernel32.inc'
|
||||
|
||||
section '.edata' export data readable
|
||||
|
||||
export 'FASM.DLL',\
|
||||
fasm_GetVersion,'fasm_GetVersion',\
|
||||
fasm_Assemble,'fasm_Assemble',\
|
||||
fasm_AssembleFile,'fasm_AssembleFile'
|
||||
|
||||
section '.reloc' fixups data readable discardable
|
||||
|
||||
section '.rsrc' resource data readable
|
||||
|
||||
directory RT_VERSION,versions
|
||||
|
||||
resource versions,\
|
||||
1,LANG_NEUTRAL,version
|
||||
|
||||
versioninfo version,VOS__WINDOWS32,VFT_APP,VFT2_UNKNOWN,LANG_ENGLISH+SUBLANG_DEFAULT,0,\
|
||||
'FileDescription','flat assembler',\
|
||||
'LegalCopyright',<'Copyright ',0A9h,' 2001-2017 Tomasz Grysztar.'>,\
|
||||
'FileVersion',VERSION_STRING,\
|
||||
'ProductVersion',VERSION_STRING,\
|
||||
'OriginalFilename','FASM.DLL'
|
||||
195
FasmDll/SOURCE/IDE/FASMW/FEDIT.ASM
Normal file
195
FasmDll/SOURCE/IDE/FASMW/FEDIT.ASM
Normal file
@@ -0,0 +1,195 @@
|
||||
|
||||
; flat editor DLL interface for Win32
|
||||
; Copyright (c) 2001-2014, Tomasz Grysztar.
|
||||
; All rights reserved.
|
||||
|
||||
format PE DLL GUI 4.0
|
||||
entry DLLEntryPoint
|
||||
|
||||
include 'win32a.inc'
|
||||
|
||||
include 'fedit.ash'
|
||||
|
||||
section '.data' data readable writeable
|
||||
|
||||
_fedit_class db 'FEDIT',0
|
||||
|
||||
_user_library db 'USER32.DLL',0
|
||||
_setgestureconfig_api db 'SetGestureConfig',0
|
||||
_getgestureinfo_api db 'GetGestureInfo',0
|
||||
_closegestureinfohandle_api db 'CloseGestureInfoHandle',0
|
||||
|
||||
align 4
|
||||
|
||||
SetGestureConfig dd 0
|
||||
GetGestureInfo dd 0
|
||||
CloseGestureInfoHandle dd 0
|
||||
|
||||
wheel_scroll_lines dd 3
|
||||
|
||||
fedit_font dd ?
|
||||
|
||||
char rb 4
|
||||
kbstate rb 100h
|
||||
line_colors rb 100h
|
||||
line_buffer rb 100h
|
||||
text_buffer rb 100h
|
||||
upper_case_table rb 100h
|
||||
|
||||
wc WNDCLASS
|
||||
ps PAINTSTRUCT
|
||||
tm TEXTMETRIC
|
||||
sc SCROLLINFO
|
||||
rect RECT
|
||||
|
||||
section '.text' code readable executable
|
||||
|
||||
proc DLLEntryPoint uses ebx esi edi,hinstDLL,fdwReason,lpvReserved
|
||||
cmp [fdwReason],DLL_PROCESS_ATTACH
|
||||
jne .done
|
||||
invoke GetModuleHandle,_user_library
|
||||
or eax,eax
|
||||
jz .gesture_api_unavailable
|
||||
mov ebx,eax
|
||||
invoke GetProcAddress,ebx,_setgestureconfig_api
|
||||
or eax,eax
|
||||
jz .gesture_api_unavailable
|
||||
mov esi,eax
|
||||
invoke GetProcAddress,ebx,_getgestureinfo_api
|
||||
or eax,eax
|
||||
jz .gesture_api_unavailable
|
||||
mov edi,eax
|
||||
invoke GetProcAddress,ebx,_closegestureinfohandle_api
|
||||
or eax,eax
|
||||
jz .gesture_api_unavailable
|
||||
mov [CloseGestureInfoHandle],eax
|
||||
mov [SetGestureConfig],esi
|
||||
mov [GetGestureInfo],edi
|
||||
.gesture_api_unavailable:
|
||||
invoke LoadCursor,0,IDC_IBEAM
|
||||
mov [wc.hCursor],eax
|
||||
mov [wc.style],CS_GLOBALCLASS+CS_DBLCLKS
|
||||
mov [wc.lpfnWndProc],FlatEditor
|
||||
mov eax,[hinstDLL]
|
||||
mov [wc.hInstance],eax
|
||||
mov [wc.cbWndExtra],4
|
||||
xor eax,eax
|
||||
mov [wc.hbrBackground],eax
|
||||
mov [wc.cbClsExtra],eax
|
||||
mov [wc.lpszMenuName],eax
|
||||
mov [wc.lpszClassName],_fedit_class
|
||||
invoke RegisterClass,wc
|
||||
or eax,eax
|
||||
jz .failed
|
||||
invoke CreateFont,0,0,0,0,0,FALSE,FALSE,FALSE,ANSI_CHARSET,OUT_RASTER_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FIXED_PITCH+FF_DONTCARE,NULL
|
||||
or eax,eax
|
||||
jz .failed
|
||||
mov [fedit_font],eax
|
||||
push ebx esi edi
|
||||
mov edi,upper_case_table
|
||||
xor ebx,ebx
|
||||
mov esi,100h
|
||||
.make_upper_case_table:
|
||||
invoke CharUpper,ebx
|
||||
stosb
|
||||
inc bl
|
||||
dec esi
|
||||
jnz .make_upper_case_table
|
||||
pop edi esi ebx
|
||||
.done:
|
||||
mov eax,TRUE
|
||||
ret
|
||||
.failed:
|
||||
mov eax,FALSE
|
||||
ret
|
||||
endp
|
||||
|
||||
include 'fedit.inc'
|
||||
|
||||
section '.idata' import data readable writeable
|
||||
|
||||
library kernel,'KERNEL32.DLL',\
|
||||
user,'USER32.DLL',\
|
||||
gdi,'GDI32.DLL'
|
||||
|
||||
import kernel,\
|
||||
GetModuleHandle,'GetModuleHandleA',\
|
||||
GetProcAddress,'GetProcAddress',\
|
||||
GlobalAlloc,'GlobalAlloc',\
|
||||
GlobalReAlloc,'GlobalReAlloc',\
|
||||
GlobalLock,'GlobalLock',\
|
||||
GlobalUnlock,'GlobalUnlock',\
|
||||
GlobalFree,'GlobalFree',\
|
||||
VirtualAlloc,'VirtualAlloc',\
|
||||
VirtualFree,'VirtualFree',\
|
||||
ExitProcess,'ExitProcess'
|
||||
|
||||
import user,\
|
||||
RegisterClass,'RegisterClassA',\
|
||||
CreateCaret,'CreateCaret',\
|
||||
ShowCaret,'ShowCaret',\
|
||||
HideCaret,'HideCaret',\
|
||||
SetCaretPos,'SetCaretPos',\
|
||||
DestroyCaret,'DestroyCaret',\
|
||||
BeginPaint,'BeginPaint',\
|
||||
EndPaint,'EndPaint',\
|
||||
GetDC,'GetDC',\
|
||||
GetUpdateRect,'GetUpdateRect',\
|
||||
ReleaseDC,'ReleaseDC',\
|
||||
GetCursorPos,'GetCursorPos',\
|
||||
ClientToScreen,'ClientToScreen',\
|
||||
TrackPopupMenu,'TrackPopupMenu',\
|
||||
DrawText,'DrawTextA',\
|
||||
FillRect,'FillRect',\
|
||||
InvalidateRect,'InvalidateRect',\
|
||||
GetKeyboardState,'GetKeyboardState',\
|
||||
ToAscii,'ToAscii',\
|
||||
GetScrollInfo,'GetScrollInfo',\
|
||||
SetScrollInfo,'SetScrollInfo',\
|
||||
SetCapture,'SetCapture',\
|
||||
ReleaseCapture,'ReleaseCapture',\
|
||||
OpenClipboard,'OpenClipboard',\
|
||||
CloseClipboard,'CloseClipboard',\
|
||||
EmptyClipboard,'EmptyClipboard',\
|
||||
GetClipboardData,'GetClipboardData',\
|
||||
SetClipboardData,'SetClipboardData',\
|
||||
LoadCursor,'LoadCursorA',\
|
||||
IsClipboardFormatAvailable,'IsClipboardFormatAvailable',\
|
||||
CharUpper,'CharUpperA',\
|
||||
GetWindowLong,'GetWindowLongA',\
|
||||
SetWindowLong,'SetWindowLongA',\
|
||||
DefWindowProc,'DefWindowProcA',\
|
||||
GetClientRect,'GetClientRect',\
|
||||
UpdateWindow,'UpdateWindow',\
|
||||
SetFocus,'SetFocus',\
|
||||
GetSysColor,'GetSysColor',\
|
||||
MessageBox,'MessageBoxA',\
|
||||
SendMessage,'SendMessageA',\
|
||||
PostMessage,'PostMessageA'
|
||||
|
||||
import gdi,\
|
||||
SetBkColor,'SetBkColor',\
|
||||
SetTextColor,'SetTextColor',\
|
||||
CreateSolidBrush,'CreateSolidBrush',\
|
||||
CreateFont,'CreateFontA',\
|
||||
GetTextMetrics,'GetTextMetricsA',\
|
||||
GetTextExtentPoint32,'GetTextExtentPoint32A',\
|
||||
DeleteDC,'DeleteDC',\
|
||||
SelectObject,'SelectObject',\
|
||||
DeleteObject,'DeleteObject'
|
||||
|
||||
section '.reloc' fixups data readable discardable
|
||||
|
||||
section '.rsrc' resource data readable
|
||||
|
||||
directory RT_VERSION,versions
|
||||
|
||||
resource versions,\
|
||||
1,LANG_NEUTRAL,version
|
||||
|
||||
versioninfo version,VOS__WINDOWS32,VFT_APP,VFT2_UNKNOWN,LANG_ENGLISH+SUBLANG_DEFAULT,0,\
|
||||
'FileDescription','flat editor',\
|
||||
'LegalCopyright',<'Copyright ',0A9h,' 1999-2014 Tomasz Grysztar.'>,\
|
||||
'FileVersion',FEDIT_VERSION_STRING,\
|
||||
'ProductVersion',FEDIT_VERSION_STRING,\
|
||||
'OriginalFilename','FEDIT.DLL'
|
||||
192
Source/Fasm4Delphi.pas
Normal file
192
Source/Fasm4Delphi.pas
Normal file
@@ -0,0 +1,192 @@
|
||||
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.
|
||||
}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Windows;
|
||||
|
||||
//{$Define FasmStaticLink}
|
||||
|
||||
type
|
||||
TFasmVersion=packed record
|
||||
V1,V2:word;
|
||||
end;
|
||||
|
||||
TLINE_HEADER=record
|
||||
file_path:PAnsiChar;
|
||||
line_number:cardinal;
|
||||
file_offset:cardinal;
|
||||
macro_calling_line:^TLINE_HEADER;
|
||||
//macro_line:^TLINE_HEADER;
|
||||
end;
|
||||
PLINE_HEADER=^TLINE_HEADER;
|
||||
|
||||
TFASM_STATE=record
|
||||
condition:Int32;
|
||||
error_code:Int32;
|
||||
error_line:PLINE_HEADER;
|
||||
//output_data:pointer;
|
||||
//output_length:cardinal;
|
||||
end;
|
||||
PFASM_STATE=^TFASM_STATE;
|
||||
//{$EXTERNALSYM TFASM_STATE}
|
||||
|
||||
const
|
||||
FASMDLLName='FASM.DLL';
|
||||
|
||||
// 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;
|
||||
|
||||
{$IFDEF FasmStaticLink}
|
||||
function fasm_GetVersion:TFasmVersion;stdcall;external FASMDLLName;
|
||||
function fasm_Assemble(lpSource:PAnsiChar;lpMemory:pointer;cbMemorySize:cardinal;
|
||||
nPassesLimit:word=100;hDisplayPipe:DWord=0):Int32;stdcall;external FASMDLLName;
|
||||
function fasm_AssembleFile(lpSourceFile:PAnsiChar;lpMemory:pointer;cbMemorySize:cardinal;
|
||||
nPassesLimit:word=100;hDisplayPipe:DWord=0):Int32;stdcall;external FASMDLLName;
|
||||
{$ELSE}
|
||||
var
|
||||
fasm_GetVersion:function:TFasmVersion;stdcall;
|
||||
fasm_Assemble:function(lpSource:PAnsiChar;lpMemory:pointer;cbMemorySize:cardinal;nPassesLimit:word=100;hDisplayPipe:DWord=0):Int32;stdcall;
|
||||
fasm_AssembleFile:function(lpSourceFile:PAnsiChar;lpMemory:pointer;cbMemorySize:cardinal;nPassesLimit:word=100;hDisplayPipe:DWord=0):Int32;stdcall;
|
||||
{$ENDIF}
|
||||
|
||||
{$IFNDEF FasmStaticLink}
|
||||
procedure LoadFASM(Name:string);
|
||||
procedure FreeFASM;
|
||||
{$ENDIF}
|
||||
|
||||
implementation
|
||||
|
||||
{$IFNDEF FasmStaticLink}
|
||||
var
|
||||
&Library:THandle=0;
|
||||
|
||||
procedure LoadFASM(Name:string);
|
||||
begin
|
||||
if &Library<>0 then
|
||||
FreeFasm;
|
||||
&Library:=LoadLibrary(PWideChar(Name));
|
||||
fasm_GetVersion:=GetProcAddress(&Library,'fasm_GetVersion');
|
||||
fasm_Assemble:=GetProcAddress(&Library,'fasm_Assemble');
|
||||
fasm_AssembleFile:=GetProcAddress(&Library,'fasm_AssembleFile');
|
||||
end;
|
||||
|
||||
procedure FreeFASM;
|
||||
begin
|
||||
if &Library=0 then
|
||||
exit;
|
||||
fasm_GetVersion:=nil;
|
||||
fasm_Assemble:=nil;
|
||||
fasm_AssembleFile:=nil;
|
||||
&Library:=0;
|
||||
end;
|
||||
{$ENDIF}
|
||||
|
||||
end.
|
||||
2
Tests/Test1.asm
Normal file
2
Tests/Test1.asm
Normal file
@@ -0,0 +1,2 @@
|
||||
a db 0
|
||||
cmp [a],0
|
||||
60
Tests/Tester.dpr
Normal file
60
Tests/Tester.dpr
Normal file
@@ -0,0 +1,60 @@
|
||||
program Tester;
|
||||
|
||||
{$IFNDEF TESTINSIGHT}
|
||||
{$APPTYPE CONSOLE}
|
||||
{$ENDIF}{$STRONGLINKTYPES ON}
|
||||
uses
|
||||
System.SysUtils,
|
||||
{$IFDEF TESTINSIGHT}
|
||||
TestInsight.DUnitX,
|
||||
{$ENDIF }
|
||||
DUnitX.Loggers.Console,
|
||||
DUnitX.Loggers.Xml.NUnit,
|
||||
DUnitX.TestFramework,
|
||||
TesterMain in 'TesterMain.pas',
|
||||
Fasm4Delphi in '..\Source\Fasm4Delphi.pas';
|
||||
|
||||
var
|
||||
runner : ITestRunner;
|
||||
results : IRunResults;
|
||||
logger : ITestLogger;
|
||||
nunitLogger : ITestLogger;
|
||||
begin
|
||||
{$IFDEF TESTINSIGHT}
|
||||
TestInsight.DUnitX.RunRegisteredTests;
|
||||
exit;
|
||||
{$ENDIF}
|
||||
try
|
||||
//Check command line options, will exit if invalid
|
||||
TDUnitX.CheckCommandLine;
|
||||
//Create the test runner
|
||||
runner := TDUnitX.CreateRunner;
|
||||
//Tell the runner to use RTTI to find Fixtures
|
||||
runner.UseRTTI := True;
|
||||
//tell the runner how we will log things
|
||||
//Log to the console window
|
||||
logger := TDUnitXConsoleLogger.Create(true);
|
||||
runner.AddLogger(logger);
|
||||
//Generate an NUnit compatible XML File
|
||||
nunitLogger := TDUnitXXMLNUnitFileLogger.Create(TDUnitX.Options.XMLOutputFile);
|
||||
runner.AddLogger(nunitLogger);
|
||||
runner.FailsOnNoAsserts := False; //When true, Assertions must be made during tests;
|
||||
|
||||
//Run tests
|
||||
results := runner.Execute;
|
||||
if not results.AllPassed then
|
||||
System.ExitCode := EXIT_ERRORS;
|
||||
|
||||
{$IFNDEF CI}
|
||||
//We don't want this happening when running under CI.
|
||||
if TDUnitX.Options.ExitBehavior = TDUnitXExitBehavior.Pause then
|
||||
begin
|
||||
System.Write('Done.. press <Enter> key to quit.');
|
||||
System.Readln;
|
||||
end;
|
||||
{$ENDIF}
|
||||
except
|
||||
on E: Exception do
|
||||
System.Writeln(E.ClassName, ': ', E.Message);
|
||||
end;
|
||||
end.
|
||||
562
Tests/Tester.dproj
Normal file
562
Tests/Tester.dproj
Normal file
@@ -0,0 +1,562 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{4DB29771-5426-49E7-B0D8-B77F95D4EDCE}</ProjectGuid>
|
||||
<ProjectVersion>18.2</ProjectVersion>
|
||||
<FrameworkType>None</FrameworkType>
|
||||
<MainSource>Tester.dpr</MainSource>
|
||||
<Base>True</Base>
|
||||
<Config Condition="'$(Config)'==''">Debug</Config>
|
||||
<Platform Condition="'$(Platform)'==''">Win32</Platform>
|
||||
<TargetedPlatforms>1</TargetedPlatforms>
|
||||
<AppType>Console</AppType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Android' and '$(Base)'=='true') or '$(Base_Android)'!=''">
|
||||
<Base_Android>true</Base_Android>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='iOSDevice32' and '$(Base)'=='true') or '$(Base_iOSDevice32)'!=''">
|
||||
<Base_iOSDevice32>true</Base_iOSDevice32>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='iOSDevice64' and '$(Base)'=='true') or '$(Base_iOSDevice64)'!=''">
|
||||
<Base_iOSDevice64>true</Base_iOSDevice64>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='iOSSimulator' and '$(Base)'=='true') or '$(Base_iOSSimulator)'!=''">
|
||||
<Base_iOSSimulator>true</Base_iOSSimulator>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Linux64' and '$(Base)'=='true') or '$(Base_Linux64)'!=''">
|
||||
<Base_Linux64>true</Base_Linux64>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='OSX32' and '$(Base)'=='true') or '$(Base_OSX32)'!=''">
|
||||
<Base_OSX32>true</Base_OSX32>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
|
||||
<Base_Win32>true</Base_Win32>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
|
||||
<Base_Win64>true</Base_Win64>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
|
||||
<Cfg_1>true</Cfg_1>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
|
||||
<Cfg_1_Win32>true</Cfg_1_Win32>
|
||||
<CfgParent>Cfg_1</CfgParent>
|
||||
<Cfg_1>true</Cfg_1>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
|
||||
<Cfg_2>true</Cfg_2>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base)'!=''">
|
||||
<DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput>
|
||||
<DCC_ExeOutput>.\$(Platform)\$(Config)</DCC_ExeOutput>
|
||||
<DCC_E>false</DCC_E>
|
||||
<DCC_N>false</DCC_N>
|
||||
<DCC_S>false</DCC_S>
|
||||
<DCC_F>false</DCC_F>
|
||||
<DCC_K>false</DCC_K>
|
||||
<DCC_UsePackage>RESTComponents;emsclientfiredac;FireDACIBDriver;emsclient;FireDACCommon;RESTBackendComponents;soapserver;CloudService;FireDACCommonDriver;inet;FireDAC;FireDACSqliteDriver;soaprtl;soapmidas;$(DCC_UsePackage)</DCC_UsePackage>
|
||||
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)</DCC_Namespace>
|
||||
<UsingDelphiRTL>true</UsingDelphiRTL>
|
||||
<Icon_MainIcon>$(BDS)\bin\delphi_PROJECTICON.ico</Icon_MainIcon>
|
||||
<Icns_MainIcns>$(BDS)\bin\delphi_PROJECTICNS.icns</Icns_MainIcns>
|
||||
<DCC_UnitSearchPath>$(DUnitX);$(DCC_UnitSearchPath)</DCC_UnitSearchPath>
|
||||
<SanitizedProjectName>Tester</SanitizedProjectName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Android)'!=''">
|
||||
<DCC_UsePackage>DBXSqliteDriver;DBXInterBaseDriver;DataSnapFireDAC;tethering;bindcompfmx;FmxTeeUI;fmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;ibmonitor;FMXTee;DbxCommonDriver;ibxpress;xmlrtl;DataSnapNativeClient;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage)</DCC_UsePackage>
|
||||
<EnabledSysJars>android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar</EnabledSysJars>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_iOSDevice32)'!=''">
|
||||
<DCC_UsePackage>DBXSqliteDriver;DBXInterBaseDriver;DataSnapFireDAC;tethering;bindcompfmx;FmxTeeUI;fmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;ibmonitor;FMXTee;DbxCommonDriver;ibxpress;xmlrtl;DataSnapNativeClient;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;fmxase;$(DCC_UsePackage)</DCC_UsePackage>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_iOSDevice64)'!=''">
|
||||
<DCC_UsePackage>DBXSqliteDriver;DBXInterBaseDriver;DataSnapFireDAC;tethering;bindcompfmx;FmxTeeUI;fmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;ibmonitor;FMXTee;DbxCommonDriver;ibxpress;xmlrtl;DataSnapNativeClient;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;fmxase;$(DCC_UsePackage)</DCC_UsePackage>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_iOSSimulator)'!=''">
|
||||
<DCC_UsePackage>DBXSqliteDriver;DBXInterBaseDriver;DataSnapFireDAC;tethering;bindcompfmx;FmxTeeUI;fmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;ibmonitor;FMXTee;DbxCommonDriver;ibxpress;xmlrtl;DataSnapNativeClient;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;fmxase;$(DCC_UsePackage)</DCC_UsePackage>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Linux64)'!=''">
|
||||
<DCC_UsePackage>DataSnapServerMidas;FireDACADSDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;inetdb;emsedge;IndyCore;dsnap;DataSnapCommon;DataSnapConnectors;bindengine;FireDACOracleDriver;FireDACMySQLDriver;FireDACCommonODBC;DataSnapClient;IndySystem;FireDACDb2Driver;FireDACInfxDriver;emshosting;FireDACPgDriver;FireDACASADriver;FireDACTDataDriver;DbxCommonDriver;DataSnapServer;xmlrtl;DataSnapNativeClient;rtl;DbxClientDriver;CustomIPTransport;bindcomp;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;dbrtl;FireDACMongoDBDriver;IndyProtocols;$(DCC_UsePackage)</DCC_UsePackage>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_OSX32)'!=''">
|
||||
<DCC_UsePackage>DBXSqliteDriver;DataSnapServerMidas;DBXInterBaseDriver;DataSnapFireDAC;tethering;FireDACMSSQLDriver;bindcompfmx;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;fmxdae;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;emshosting;FireDACPgDriver;ibmonitor;FireDACASADriver;FireDACTDataDriver;FMXTee;DbxCommonDriver;ibxpress;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;bindcomp;DBXInformixDriver;IndyIPClient;dbxcds;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage)</DCC_UsePackage>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Win32)'!=''">
|
||||
<DCC_UsePackage>DBXSqliteDriver;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;DataSnapFireDAC;svnui;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;svn;Intraweb;DBXOracleDriver;inetdb;RaizeComponentsVcl;FmxTeeUI;emsedge;RaizeComponentsVclDb;fmx;fmxdae;vclib;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;DataSnapConnectors;VCLRESTComponents;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;emshosting;FireDACPgDriver;ibmonitor;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;DbxCommonDriver;ibxpress;Tee;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;vclwinx;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;CodeSiteExpressPkg;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage)</DCC_UsePackage>
|
||||
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
|
||||
<BT_BuildType>Debug</BT_BuildType>
|
||||
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Win64)'!=''">
|
||||
<DCC_UsePackage>DBXSqliteDriver;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;DataSnapFireDAC;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;Intraweb;DBXOracleDriver;inetdb;RaizeComponentsVcl;FmxTeeUI;emsedge;RaizeComponentsVclDb;fmx;fmxdae;vclib;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;DataSnapConnectors;VCLRESTComponents;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;emshosting;FireDACPgDriver;ibmonitor;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;DbxCommonDriver;ibxpress;Tee;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;vclwinx;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage)</DCC_UsePackage>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_1)'!=''">
|
||||
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
|
||||
<DCC_DebugDCUs>true</DCC_DebugDCUs>
|
||||
<DCC_Optimize>false</DCC_Optimize>
|
||||
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
|
||||
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
|
||||
<DCC_RemoteDebug>true</DCC_RemoteDebug>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
|
||||
<DCC_RemoteDebug>false</DCC_RemoteDebug>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_2)'!=''">
|
||||
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
|
||||
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
|
||||
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
|
||||
<DCC_DebugInformation>0</DCC_DebugInformation>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<DelphiCompile Include="$(MainSource)">
|
||||
<MainSource>MainSource</MainSource>
|
||||
</DelphiCompile>
|
||||
<DCCReference Include="TesterMain.pas"/>
|
||||
<DCCReference Include="..\Source\Fasm4Delphi.pas"/>
|
||||
<BuildConfiguration Include="Release">
|
||||
<Key>Cfg_2</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Base">
|
||||
<Key>Base</Key>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Debug">
|
||||
<Key>Cfg_1</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
</ItemGroup>
|
||||
<ProjectExtensions>
|
||||
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
|
||||
<Borland.ProjectType>Console</Borland.ProjectType>
|
||||
<BorlandProject>
|
||||
<Delphi.Personality>
|
||||
<Source>
|
||||
<Source Name="MainSource">Tester.dpr</Source>
|
||||
</Source>
|
||||
</Delphi.Personality>
|
||||
<Deployment Version="3">
|
||||
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule">
|
||||
<Platform Name="OSX32">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libPCRE.dylib" Class="DependencyModule">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgsqlite3.dylib" Class="DependencyModule">
|
||||
<Platform Name="OSX32">
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployFile LocalName="Win32\Debug\Tester.exe" Configuration="Debug" Class="ProjectOutput">
|
||||
<Platform Name="Win32">
|
||||
<RemoteName>Tester.exe</RemoteName>
|
||||
<Overwrite>true</Overwrite>
|
||||
</Platform>
|
||||
</DeployFile>
|
||||
<DeployClass Name="AdditionalDebugSymbols">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>Contents\MacOS</RemoteDir>
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidClassesDexFile">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>classes</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidGDBServer">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidLibnativeArmeabiFile">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidLibnativeMipsFile">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\mips</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidServiceOutput">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidSplashImageDef">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="AndroidSplashStyles">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\values</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_DefaultAppIcon">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon144">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon36">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-ldpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon48">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-mdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon72">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-hdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_LauncherIcon96">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xhdpi</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage426">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-small</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage470">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-normal</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage640">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-large</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="Android_SplashImage960">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>res\drawable-xlarge</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="DebugSymbols">
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="DependencyFramework">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.framework</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="DependencyModule">
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
<Extensions>.dll;.bpl</Extensions>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Required="true" Name="DependencyPackage">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
<Extensions>.dylib</Extensions>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
<Extensions>.bpl</Extensions>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="File">
|
||||
<Platform Name="Android">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch1024">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch1536">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch2048">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPad_Launch768">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch320">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch640">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="iPhone_Launch640x1136">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectAndroidManifest">
|
||||
<Platform Name="Android">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectiOSDeviceDebug">
|
||||
<Platform Name="iOSDevice32">
|
||||
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectiOSDeviceResourceRules"/>
|
||||
<DeployClass Name="ProjectiOSEntitlements"/>
|
||||
<DeployClass Name="ProjectiOSInfoPList"/>
|
||||
<DeployClass Name="ProjectiOSResource">
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectOSXEntitlements"/>
|
||||
<DeployClass Name="ProjectOSXInfoPList"/>
|
||||
<DeployClass Name="ProjectOSXResource">
|
||||
<Platform Name="OSX32">
|
||||
<RemoteDir>Contents\Resources</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Required="true" Name="ProjectOutput">
|
||||
<Platform Name="Android">
|
||||
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSDevice64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="iOSSimulator">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Linux64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="OSX32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win32">
|
||||
<Operation>0</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="ProjectUWPManifest">
|
||||
<Platform Name="Win32">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win64">
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="UWP_DelphiLogo150">
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win64">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<DeployClass Name="UWP_DelphiLogo44">
|
||||
<Platform Name="Win32">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
<Platform Name="Win64">
|
||||
<RemoteDir>Assets</RemoteDir>
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
|
||||
</Deployment>
|
||||
<Platforms>
|
||||
<Platform value="Android">False</Platform>
|
||||
<Platform value="iOSDevice32">False</Platform>
|
||||
<Platform value="iOSDevice64">False</Platform>
|
||||
<Platform value="iOSSimulator">False</Platform>
|
||||
<Platform value="Linux64">False</Platform>
|
||||
<Platform value="OSX32">False</Platform>
|
||||
<Platform value="Win32">True</Platform>
|
||||
<Platform value="Win64">False</Platform>
|
||||
</Platforms>
|
||||
</BorlandProject>
|
||||
<ProjectFileVersion>12</ProjectFileVersion>
|
||||
</ProjectExtensions>
|
||||
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
|
||||
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
|
||||
<Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/>
|
||||
</Project>
|
||||
BIN
Tests/Tester.res
Normal file
BIN
Tests/Tester.res
Normal file
Binary file not shown.
73
Tests/TesterMain.pas
Normal file
73
Tests/TesterMain.pas
Normal file
@@ -0,0 +1,73 @@
|
||||
unit TesterMain;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
DUnitX.TestFramework,Fasm4Delphi,SysUtils;
|
||||
|
||||
type
|
||||
[TestFixture]
|
||||
TMyTestObject = class(TObject)
|
||||
public
|
||||
[Setup]
|
||||
procedure Setup;
|
||||
[TearDown]
|
||||
procedure TearDown;
|
||||
[Test]
|
||||
procedure Test1;
|
||||
[Test]
|
||||
procedure Test2;
|
||||
[Test]
|
||||
procedure Test3;
|
||||
[Test]
|
||||
procedure Test4;
|
||||
end;
|
||||
|
||||
const
|
||||
CompliterMemSize=$10000;
|
||||
|
||||
var
|
||||
CompliterMem:PFASM_STATE;
|
||||
|
||||
implementation
|
||||
|
||||
procedure TMyTestObject.Setup;
|
||||
begin
|
||||
end;
|
||||
|
||||
procedure TMyTestObject.TearDown;
|
||||
begin
|
||||
end;
|
||||
|
||||
procedure TMyTestObject.Test1;
|
||||
begin
|
||||
if fasm_AssembleFile('..\..\Test1.ASM',CompliterMem,CompliterMemSize)<>FASM_OK then
|
||||
raise Exception.Create('Condition: '+CompliterMem^.condition.ToString+sLineBreak+
|
||||
'Error Code: '+CompliterMem^.error_code.ToString+sLineBreak);
|
||||
end;
|
||||
|
||||
procedure TMyTestObject.Test2;
|
||||
begin
|
||||
if fasm_Assemble('add eax,0',CompliterMem,CompliterMemSize)<>FASM_OK then
|
||||
raise Exception.Create('Condition: '+CompliterMem^.condition.ToString+sLineBreak+
|
||||
'Error Code: '+CompliterMem^.error_code.ToString+sLineBreak);
|
||||
end;
|
||||
|
||||
procedure TMyTestObject.Test3;
|
||||
begin
|
||||
if fasm_AssembleFile('..\..\..\FasmDll\FASM.ASH',CompliterMem,CompliterMemSize)=FASM_OK then
|
||||
raise Exception.Create('FASM is compiling something that it is can not compile at all.');
|
||||
end;
|
||||
|
||||
procedure TMyTestObject.Test4;
|
||||
begin
|
||||
if fasm_Assemble('call -100',CompliterMem,CompliterMemSize)<>FASM_OK then
|
||||
raise Exception.Create('Condition: '+CompliterMem^.condition.ToString+sLineBreak+
|
||||
'Error Code: '+CompliterMem^.error_code.ToString+sLineBreak);
|
||||
end;
|
||||
|
||||
initialization
|
||||
TDUnitX.RegisterTestFixture(TMyTestObject);
|
||||
LoadFASM('..\..\..\FasmDll\FASM.DLL');
|
||||
GetMem(CompliterMem,CompliterMemSize);
|
||||
end.
|
||||
20
Tests/Win32/Debug/dunitx-results.xml
Normal file
20
Tests/Win32/Debug/dunitx-results.xml
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<test-results name="W:\Fasm4Delphi\Tests\Win32\Debug\Tester.exe" total="4" errors="0" failures="0" ignored="0" inconclusive="0" not-run="0" skipped="0" invalid="0" date="2018-02-11" time="0.001">
|
||||
<culture-info current-culture="en" current-uiculture="en" />
|
||||
<test-suite type="Assembly" name="Tester.exe" executed="true" result="Success" success="True" time="0.001" asserts="0">
|
||||
<results>
|
||||
<test-suite type="Namespace" name="TesterMain" executed="true" result="Success" success="True" time="0.001" asserts="0" >
|
||||
<results>
|
||||
<test-suite type="Fixture" name="TMyTestObject" executed="True" result="Success" success="True" time="0.001" >
|
||||
<results>
|
||||
<test-case name="Test1" executed="True" result="Success" success="True" time="0.000" asserts="0" />
|
||||
<test-case name="Test2" executed="True" result="Success" success="True" time="0.000" asserts="0" />
|
||||
<test-case name="Test3" executed="True" result="Success" success="True" time="0.000" asserts="0" />
|
||||
<test-case name="Test4" executed="True" result="Success" success="True" time="0.000" asserts="0" />
|
||||
</results>
|
||||
</test-suite>
|
||||
</results>
|
||||
</test-suite>
|
||||
</results>
|
||||
</test-suite>
|
||||
</test-results>
|
||||
Reference in New Issue
Block a user