Steve,
I'm approaching it a little bit differently.
I am using elf file format to compile the bxbasm generated asm file.
I am not using any of the jwasm library files but instead using the MinGW libraries.
I cheated a bit and compiled a few of the needed items from m32lib and created a gcc compatable
bxbasmlib.
James
My two batch files
console
@setlocal
@ECHO OFF
@SET MINGW=C:\MinGW
@SET LIB=%MINGW%\lib -Lc:\jwasm\bxbasm\lib
@SET INCLUDE=%MINGW%\include;%MINGW%\include\sys
@SET PATH=C:\jwasm;C:\jwasm\jwlink;%MINGW%\bin;%PATH%
@SET GCCCFL= --format elf32-i386 --subsystem console
jwasm -elf %1.asm
ld %GCCCFL% -s -o %1.exe %1.obj -L%LIB% -lbxbasmlib -lmingw32 -lmsvcrt -lkernel32 -luser32 -lgdi32 -lcomctl32 -ladvapi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 -lwinmm -lcomdlg32 -limagehlp -lversion
REM ECHO All Done
endlocal
gui
@setlocal
@SET MINGW=C:\MinGW
@SET LIB=%MINGW%\lib -Lc:\jwasm\bxbasm\lib
@SET INCLUDE=%MINGW%\include;%MINGW%\include\sys
@SET PATH=C:\jwasm;C:\jwasm\jwlink;%MINGW%\bin;%PATH%
@SET GCCCFL= --format elf32-i386 --subsystem windows
@jwasm -elf %1.asm
@ld %GCCCFL% -s -o %1.exe %1.obj -L%LIB% -lmingw32 -lmsvcrt -lkernel32 -luser32 -lgdi32 -lcomctl32 -ladvapi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 -lwinmm -lcomdlg32 -limagehlp -lversion
ECHO All Done
Tests.bas
' test.bas masm32 version 1
'
DIM array$(3,3,3)
array$(1,1,1) = "hello"
array$(2,2,2) = "world!"
array$(3,3,3) = "yahoo!"
qaz$ = array$(1,1,1)
wsx$ = array$(2,2,2)
edc$ = array$(3,3,3)
array$(1,1,2) = array$(1,1,1) + CHR$(32) + array$(2,2,2) + " " + array$(3,3,3)
rfv$ = array$(1,1,2)
'
PRINT "qaz$=array111", qaz$
PRINT "wsx$=array222", wsx$
PRINT "edc$=array333", edc$
PRINT "rfv$=all above", rfv$
PRINT array$(1,1,1) + array$(2,2,2) + array$(3,3,3) + array$(1,1,2)
'
val = ASC(array$(1,1,1))
len = LEN(array$(1,1,1))
PRINT "val= "; val, "len= "; len
val = ASC(array$(2,2,2))
len = LEN(array$(2,2,2))
PRINT "val= "; val, "len= "; len
val = ASC(array$(3,3,3))
len = LEN(array$(3,3,3))
PRINT "val= "; val, "len= "; len
val = ASC(array$(1,1,2))
len = LEN(array$(1,1,2))
PRINT "val= "; val, "len= "; len
'
array$(1,1,3) = "100.123456"
val# = VAL(array$(1,1,3))
PRINT "val= "; val#
'
TheEnd:
' ------------------------------------------
END
' ------------------------------------------
BXB.INC
;/* BXB.INC */
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
; Include files
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
include \jwasm\wininc\include\windows.inc
include \jwasm\wininc\include\Commctrl.inc
include \jwasm\wininc\include\commdlg.inc
include \jwasm\wininc\include\shellapi.inc
include \jwasm\wininc\include\oleauto.inc
; include \jwasm\wininc\include\crtdll.inc
; include \masm32\include\fpu.inc
;----------------------------------
; «««««««« PROTO «««««««« PROTO «««««««« PROTO «««««««« PROTO «««««««««««««
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
Main proto
copystrng_bffr proto
copystrng proto
catstrng proto
chrstr proto
leftstr proto
rightstr proto
mid_str proto
spacestr proto
strsIval proto
strsFval proto
stringstr proto
inkeystr proto
inputstr proto
wherexy proto
reset_cursor proto
get_sys_date proto
get_sys_time proto
datestr proto
timestr proto
closeallfiles proto
closeafile proto
getfilehandle proto
clearstrng_bffr proto
setupiobuffer proto
mkistr proto
mkdstr proto
mkqstr proto
lsetstr proto
rsetstr proto
Do_initialize proto
clear_allvars proto
clearstrvar proto
clearintvar proto
clearfltvar proto
clearLngstrng_bffr proto
movstrng_bffr proto
readintstr proto
readfltstr proto
readQintstr proto
getfilelength proto
setcolortext proto
dimstrarray proto
getArryOffst proto
;jcfuller added
StdOut proto :DWORD
StdIn PROTO :DWORD,:DWORD
FloatToStr2 proto stdcall fpin:QWORD, szDbl:PTR CHAR
StrToFloat proto stdcall szIn:PTR BYTE, fpout:PTR DWORD
malloc PROTO C :VARARG
free PROTO C :VARARG
; «««««««« MACROS «««««««« MACROS «««««««« MACROS «««««««« MACROS «««««««««
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
ifndef HIWORD
_hiword macro a
mov eax, a
shr eax, 16
and eax, 0FFFFH
endm
HIWORD equ _hiword
endif
; ««««««««««««««««««««««««««««««««««««««««
;-----------------------------------------
ifndef LOWORD
_loword macro a
mov eax, a
and eax, 0FFFFH
endm
LOWORD equ _loword
endif
; ««««««««««««««««««««««««««««««««««««««««
;-----------------------------------------
ifndef max
max macro a,b
LOCAL endmax
mov eax, a
mov ebx, b
cmp eax, ebx
jge endmax
mov eax, ebx
endmax:
endm
endif
; ««««««««««««««««««««««««««««««««««««««««
;-----------------------------------------
ifndef min
min macro a,b
LOCAL endmin
mov eax, a
mov ebx, b
cmp eax, ebx
jle endmin
mov eax, ebx
endmin:
endm
endif
; ««««««««««««««««««««««««««««««««««««««««
;-----------------------------------------
get MACRO a, b
push edi
push ebx
mov edi, offset a
mov eax, b
mov ebx, 4
mul bl
add edi, eax
mov eax, [edi] ; mov eax, szLabel+4
pop ebx
pop edi
ENDM
;------------------
;USE:
; mov ndx, 3
; get szLabel,ndx
;------------------
; ««««««««««««««««««««««««««««««««««««««««
;-----------------------------------------
_conditionl MACRO pa, pb, rc, rd
LOCAL isTrue
LOCAL isDone
mov eax, pa ;tm.tmPitchAndFamily
and eax, pb ;1 ; (tm.tmPitchAndFamily & 1 ? 3 : 2)
jnz isTrue
;
mov eax, rd ;2
jmp isDone
isTrue:
mov eax, rc ;3
isDone:
endm
CondtnlExp equ _conditionl
;USE:
; Conditionl var1, var2, result1, result2
; ««««««««««««««««««««««««««««««««««««««««
;-----------------------------------------
_sconditionl MACRO pa, pb, rc, rd
LOCAL isTrue
LOCAL isDone
mov eax, pa ;0x08000000H & lParam ? "Down" : "Up")
and eax, pb ;lParam
jnz isTrue
;
mov eax, rd ;"Up"
jmp isDone
isTrue:
mov eax, rc ;"Down"
isDone:
endm
sCondtnlExp equ _sconditionl
;USE:
; sConditionl var1, var2, str1, str2
; ««««««««««««««««««««««««««««««««««««««««
;-----------------------------------------
print MACRO Quoted_Text:VARARG
LOCAL Txt
.data
Txt db Quoted_Text,0
.code
invoke StdOut,ADDR Txt
ENDM
; ««««««««««««««««««««««««««««««««««««««««
;-----------------------------------------
printstr MACRO stringVar
invoke StdOut,ADDR stringVar ; printstr astring
ENDM
; ««««««««««««««««««««««««««««««««««««««««
;-----------------------------------------
printvar MACRO reg
invoke StdOut, reg ; printstr astring
ENDM
; ««««««««««««««««««««««««««««««««««««««««
;-----------------------------------------
cls MACRO
invoke ClearScreen ; CLS
ENDM
; ««««««««««««««««««««««««««««««««««««««««
;-----------------------------------------
; ««««««««««««««««««««««««««««««««««««««««
;-----------------------------------------
; «««««««««««« STRUCTURES «««««««««« STRUCTURES «««««««««« STRUCTURES «««««
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
; ««««««««« EQUATES «««««««« EQUATES ««««««««« EQUATES ««««««« EQUATES ««««
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
ifndef BUFFR_SIZ
BUFFR_SIZ equ 128
endif
ifndef BUFSIZE
BUFSIZE equ 256
endif
ifndef MBUFSIZE
MBUFSIZE equ 65535
endif
NUM_ATTRIB equ 15
;##########################################################################
; «««««««««««« DATA ««««««««« DATA ««««««««« DATA «««««««««« DATA «««««««««
.data
; ««««««««««««CONSTANT ASSIGNMENTS«««««««««««««««««««««««««««««««««««««««««
ff db 12,0
lf db 13,10,0 ; line feed
tab db 9,0 ; tab
n_ dd 10 ; newline
x_ dd 0 ; any character
_Altern_$ DB 'wb+',0 ; alternate I/O Mode
Lprint$ db 'lpt1',0 ; for LPRINT
Lprnmode$ db 'w',0 ; for LPRINT
; «««««««««««««««DO NOT DELETE«««««««««««««««««««««««««««««««««««««««««««««