'' -- halProment Basic 64 bit test, 26-5-24, 29-05-24, by frank bruebch
'' -- you must compile this example with menu compile/quickrun produces an exe file
''
$ FileName "test64-2.exe"
#include "$\inc\pro64.inc" ''
Declare Function MessageBox Lib "user32.dll" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Sys
byte val1
byte val2
int result
val1=4
val2=6 '
'mov eax,val1
mov eax,val2 ''multiply (or add) eax by ebx "
'mul val1 'ebx
add eax,5 '' here add 5
mov result,eax
zstring tit[]="HalProment Basic 64 bit"
zstring msg[]="Hello dear Animal World! " + str(result)
'' halProment Basic 64 bit
''
sub rsp,40h
mov r9, 0
lea r8, tit
lea rdx, msg
mov rcx, 0
call messagebox
add rsp, 40h
''
''
'' output: Hello dear Animal World! 11 (add) ' 24 (multiply)
''
#ifdef mode64bit
#print "Producing 64-bit code output"
print "Producing 64-bit code output"
#else
#print "Producing 32-bit code output"
#endif
'' result: "Producing 64-bit code output" ' all ok :-)
' -- windows gui test, halProment, 19-05-2024 --
'
take diverprom
'--------------------------------------------------------------------
Function WinMain(sys inst, prevInst, asciiz*cmdline, sys show) as pro
'====================================================================
WndClass wc
MSG wm
sys hwnd, wwd, wht, wtx, wty, tax
with wc
.style = CS_HREDRAW or CS_VREDRAW
.lpfnWndProc = @WndProc
.cbClsExtra =0
.cbWndExtra =0
.hInstance =inst
.hIcon=LoadIcon 0, IDI_APPLICATION
.hCursor=LoadCursor 0,IDC_ARROW
.hbrBackground = GetStockObject WHITE_BRUSH
.lpszMenuName = null
.lpszClassName = strptr "Demo"
end with
sys r=RegisterClass (@wc)
Wwd = 520 : Wht = 400
Tax = GetSystemMetrics SM_CXSCREEN
Wtx = (Tax - Wwd) /2
Tax = GetSystemMetrics SM_CYSCREEN
Wty = (Tax - Wht) /2
'
hwnd = CreateWindowEx 0,wc.lpszClassName,"HalProment Basic",WS_OVERLAPPEDWINDOW,Wtx,Wty,Wwd,Wht,0,0,inst,0
if not hwnd
mbox "Unable to create window"
exit function
end if
'
ShowWindow hwnd,SW_SHOW
UpdateWindow hwnd
'
sys bRet
'
do while bRet := GetMessage (@wm, 0, 0, 0)
if bRet = -1 then
'show an error message
else
TranslateMessage @wm
DispatchMessage @wm
end if
wend
end Function
dim as rect crect
'------------------------------------------------------------------
function WndProc (pro hWnd, wMsg, wParam, lparam ) as pro callback
'==================================================================
static as pro hdc
static as pstring txt
static as PaintStruct Paintst
'==========
select wMsg
'==========
'--------------
case WM_CREATE
'=============
GetClientRect hWnd,cRect
'--------------
case WM_DESTROY
'===============
PostQuitMessage 0
'------------
case WM_PAINT
'============
GetClientRect hWnd, cRect
hDC=BeginPaint hWnd, Paintst
SetBkColor hdc,black 'yellow
SetTextColor hdc,green 'red
DrawText hDC,"Hello Animal World!",-1,cRect,%DT_SINGLELINE or %DT_CENTER or %DT_VCENTER
EndPaint hWnd,Paintst
function = 1
'--------------
case WM_KEYDOWN
'==============
'============
Select wParam
'============
Case 27 : SendMessage hwnd, WM_CLOSE, 0, 0 'ESCAPE
End Select
'--------
case else
'========
function=DefWindowProc hWnd,wMsg,wParam,lParam
end select
end function
' WinMain inst,0,cmdline,SW_NORMAL '' both lines are working
WinMain 1,0,1,SW_NORMAL
' array reducing for a string
'
pindex 0
Dim txt() as zstring = "Hello World " + Chr(0)
dim i as integer
For i = 0 to Len(txt)-2 ''Len(txt)-1 if pindex is not active
p? txt(i) + Chr(txt(i))
Next
' output: hello world ello world llo world lo world o world
' output: world orld rld ld d
' -- byte array example
'
pim strsrc as pstring
strsrc = "Hello, Animal World!"
Dim byteArray() as byte at strptr(strsrc)
pim i,j as pro
pim s,t as pstring
j=1
s=space 600
for i=1 to 20
t=chr(9)+str(byteArray[i]) ": " + chr(byteArray[i])
mid (s,j)=t
j+=len t
next
p? left s,j
[/]
''CodeSelect
sbyte sb 'signed byte
sb=32
print sb
sb=32.6
print sb 'rounds to 33
sb="-32"
print sb 'auto-convert string -32
sb=255
print sb 'wrap overflow -1
' if that's -1 then 260 it's 4 ?
' why it's 4 as result? => 5 - 1 ? = 4
sb=260
print sb ' 4
CBYTE
Converts numeric or string expression to Byte.
Syntax:
declare function Cbyte ( byval expression as datatype ) as byte
Type typename
declare operator cast ( ) as byte
End Type
Usage:
result = Cbyte( numeric expression )
result = Cbyte( string expression )
result = Cbyte( user defined type )
Parameters:
expression
A numeric, string, or pointer expression to cast to a Byte value.
datatype
Any numeric, string, or pointer data type.
typename
A user defined type.
Return Value:
A Byte value.
Description:
The Cbyte function rounds off the decimal part and returns a 8-bit Byte value. The function does not check for an overflow, and results are undefined for values which are less than -128 or larger than 127.
The name can be explained as 'Convert to Byte'.
If the argument is a string expression, it is converted to numeric by using Valint.
Examples:
' Using the CBYTE function to convert a numeric value
'Create an BYTE variable
Dim numeric_value As Byte
'Convert a numeric value
numeric_value = CByte(-66.30)
'Print the result, should return -66
Print numeric_value
Sleep
Page created in 0.104 seconds with 11 queries.