Here are some Macros I made since PB4 is out
Code: Select all
#STD_WinFlags = #PB_Window_TitleBar|#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget
#STD_WinFlagsFixedSize = #PB_Window_TitleBar|#PB_Window_SystemMenu
#STD_BufferSize = 4096
Macro mHASH
#
EndMacro
Macro mDQUOTE
"
EndMacro
Macro EnumNextBit
(#PB_Compiler_EnumerationValue & (((#PB_Compiler_EnumerationValue & 1) = 0) * -1)) | (((#PB_Compiler_EnumerationValue >> 1) << 2) & (((#PB_Compiler_EnumerationValue & 1) = 1) * -1)) | (#PB_Compiler_EnumerationValue < 2)
EndMacro
Macro Ubound(array)
(PeekL(@array - 8) - 1)
EndMacro
Macro ArrayType(array)
PeekL(@array - 4)
EndMacro
Macro Inc(v)
v = (v) + 1
EndMacro
Macro Dec(v)
v = (v) - 1
EndMacro
Macro ReturnZeroIfFalse(test)
If Not (test): ProcedureReturn 0: EndIf
EndMacro
Macro GetStartTime(v)
v = ElapsedMilliseconds(): While v = ElapsedMilliseconds(): Wend: v = ElapsedMilliseconds()
EndMacro
Macro SetEnumValue(a)
Enumeration a
EndEnumeration
EndMacro
Macro IncEnumValue()
Enumeration #PB_Compiler_EnumerationValue + 1
EndEnumeration
EndMacro
Macro DecEnumValue()
Enumeration #PB_Compiler_EnumerationValue - 1
EndEnumeration
EndMacro
Macro SetConstantToEnumValue(c)
Enumeration #PB_Compiler_EnumerationValue
c
EndEnumeration
EndMacro
Macro DebugVarUB(v,lvl=0)
Debug mDQUOTE#v#mDQUOTE + " = " + StrU(v, 0), lvl
EndMacro
Macro DebugVarUW(v, lvl=0)
Debug mDQUOTE#v#mDQUOTE + " = " + StrU(v, 1), lvl
EndMacro
Macro DebugVarUL(v, lvl=0)
Debug mDQUOTE#v#mDQUOTE + " = " + StrU(v, 2), lvl
EndMacro
Macro DebugVarUQ(v, lvl=0)
Debug mDQUOTE#v#mDQUOTE + " = " + StrU(v, 4), lvl
EndMacro
Macro DebugVarB(v, lvl=0)
Debug mDQUOTE#v#mDQUOTE + " = " + Str(v), lvl
EndMacro
Macro DebugVarW(v, lvl=0)
Debug mDQUOTE#v#mDQUOTE + " = " + Str(v), lvl
EndMacro
Macro DebugVarL(v, lvl=0)
Debug mDQUOTE#v#mDQUOTE + " = " + Str(v), lvl
EndMacro
Macro DebugVarQ(v, lvl=0)
Debug mDQUOTE#v#mDQUOTE + " = " + StrQ(v), lvl
EndMacro
Macro DebugVarF(v, lvl=0, d=-1)
CompilerIf d = -1
Debug mDQUOTE#v#mDQUOTE + " = " + StrF(v), lvl
CompilerElse
Debug mDQUOTE#v#mDQUOTE + " = " + StrF(v, d), lvl
CompilerEndIf
EndMacro
Macro DebugVarD(v, lvl=0, d=-1)
CompilerIf d = -1
Debug mDQUOTE#v#mDQUOTE + " = " + StrD(v), lvl
CompilerElse
Debug mDQUOTE#v#mDQUOTE + " = " + StrD(v, d), lvl
CompilerEndIf
EndMacro
Macro DebugVarS(v, lvl=0)
Debug mDQUOTE#v#mDQUOTE + " = " + v, lvl
EndMacro
Macro DebugVarSDQT(v, lvl=0)
Debug mDQUOTE#v#mDQUOTE + " = " + #DQUOTE$ + v + #DQUOTE$, lvl
EndMacro
Macro DebugVarSSQT(v, lvl=0)
Debug mDQUOTE#v#mDQUOTE + " = " + "'" + v + "'", lvl
EndMacro
Structure CHAR
c.c
EndStructure
Structure CHARARRAY
c.c[0]
EndStructure
Structure BYTEARRAY
b.b[0]
EndStructure
Structure WORDARRAY
w.w[0]
EndStructure
Structure LONGARRAY
l.l[0]
EndStructure
Structure QUADARRAY
q.q[0]
EndStructure
Structure FLOATARRAY
f.f[0]
EndStructure
Structure DOUBLEARRAY
d.d[0]
EndStructure
Structure STRINGARRAY
s.s[0]
EndStructure
Structure ADDRARRAY
a.l[0] ; We might get quad memory addresses with PB5 ?! ;)
EndStructure
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
; Macro PathSlash$
; "/"
; EndMacro
#PathSlash$ = "/"
#PathSlash = '/'
#FilenamesCaseSensitive = -1
CompilerCase #PB_OS_Windows
; Macro PathSlash$
; "\"
; EndMacro
#PathSlash$ = "\"
#PathSlash = '\'
#FilenamesCaseSensitive = 0
CompilerCase #PB_OS_MacOS
; I don't know Mac
CompilerEndSelect
(and to prove they are working

Code: Select all
;IncludePath #STD_IncludePath
XIncludeFile "standard.pbi"
DebugLevel 5
Structure ZTESTSTRUC
l.l
s.s
EndStructure
Procedure ShowStrings(*pSA.STRINGARRAY)
Protected i
For i = 0 To PeekL(*pSA - 8) - 1
Debug *pSA\s[i]
Next i
EndProcedure
Dim vb.b(10)
Dim vw.w(11)
Dim vl.l(12)
Dim vq.q(13)
Dim vf.f(14)
Dim vd.d(15)
Dim vs.s(16)
Dim vs$(17)
Dim vzts.ZTESTSTRUC(18)
Dim vmd.d(2,3,4)
Debug "Ubound() and ArrayType()"
Debug ""
Debug "Ubount(vb()) : " + Str(Ubound(vb()))
Debug "ArrayType(vb()) : " + Str(ArrayType(vb()))
Debug ""
Debug "Ubount(vw()) : " + Str(Ubound(vw()))
Debug "ArrayType(vw()) : " + Str(ArrayType(vw()))
Debug ""
Debug "Ubount(vl()) : " + Str(Ubound(vl()))
Debug "ArrayType(vl()) : " + Str(ArrayType(vl()))
Debug ""
Debug "Ubount(vq()) : " + Str(Ubound(vq()))
Debug "ArrayType(vq()) : " + Str(ArrayType(vq()))
Debug ""
Debug "Ubount(vf()) : " + Str(Ubound(vf()))
Debug "ArrayType(vf()) : " + Str(ArrayType(vf()))
Debug ""
Debug "Ubount(vd()) : " + Str(Ubound(vd()))
Debug "ArrayType(vd()) : " + Str(ArrayType(vd()))
Debug ""
Debug "Ubount(vs()) : " + Str(Ubound(vs()))
Debug "ArrayType(vs()) : " + Str(ArrayType(vs()))
Debug ""
Debug "Ubount(vs$()) : " + Str(Ubound(vs$()))
Debug "ArrayType(vs$()) : " + Str(ArrayType(vs$()))
Debug ""
Debug "Ubount(vzts()) : " + Str(Ubound(vzts()))
Debug "ArrayType(vzts()) : " + Str(ArrayType(vzts()))
Debug ""
Debug "Ubount(vmd()) : " + Str(Ubound(vmd()))
Debug "ArrayType(vmd()) : " + Str(ArrayType(vmd()))
byteVar.b = $FF
wordVar.w = $FFFF
longVar.l = $FFFFFFFF
quadVar.q = $FFFFFFFFFFFFFFFF
floatVar.f = 1.234567891234
doubleVar.d = 1.234567891234
stringVar$ = "This is a string with $"
stringVar.s = "This is a string without $"
Debug ""
Debug ""
Debug "DebugVarx()"
DebugVarUB(byteVar)
DebugVarB(byteVar)
DebugVarUW(wordVar)
DebugVarW(wordVar)
DebugVarUL(longVar)
DebugVarL(longVar)
DebugVarUQ(quadVar)
DebugVarQ(quadVar)
DebugVarF(floatVar)
DebugVarF(floatVar,0,3) ; Show only three decimals
DebugVarD(doubleVar)
DebugVarD(doubleVar,0,3) ; Show only three decimals
DebugVarS(stringVar$)
DebugVarSDQT(stringVar$)
DebugVarSSQT(stringVar$)
DebugVarS(stringVar)
DebugVarSDQT(stringVar)
DebugVarSSQT(stringVar)
Debug ""
Debug ""
Debug "DebugVarx() now with DebugLevel, will show or not"
DebugVarUB(byteVar, 5)
DebugVarB(byteVar, 5)
DebugVarUW(wordVar, 5)
DebugVarW(wordVar, 5)
DebugVarUL(longVar, 5)
DebugVarL(longVar, 5)
DebugVarUQ(quadVar, 5)
DebugVarQ(quadVar, 5)
DebugVarF(floatVar, 5)
DebugVarF(floatVar,5, 3) ; Show only three decimals
DebugVarD(doubleVar, 5)
DebugVarD(doubleVar, 5, 3) ; Show only three decimals
DebugVarS(stringVar$, 5)
DebugVarSDQT(stringVar$, 5)
DebugVarSSQT(stringVar$, 5)
DebugVarS(stringVar, 5)
DebugVarSDQT(stringVar, 5)
DebugVarSSQT(stringVar, 5)
Debug ""
Debug ""
Debug "Enum bit masks"
Enumeration ; Startvalue must be 0,1 or any 2^x and will give consecutive bit masks
#FlagBit1 = EnumNextBit
#FlagBit2 = EnumNextBit
#FlagBit3 = EnumNextBit
#FlagBit4 = EnumNextBit
#FlagBit5 = EnumNextBit
EndEnumeration
DebugVarL(#FlagBit1)
DebugVarL(#FlagBit2)
DebugVarL(#FlagBit3)
DebugVarL(#FlagBit4)
DebugVarL(#FlagBit5)
Debug ""
Debug ""
Debug "Use of the ARRAY structures"
For i = 0 To Ubound(vs$())
vs$(i) = "String" + Str(i)
Next i
*pStrArray.STRINGARRAY = @vs$()
Debug "Show strings direct"
For i = 0 To Ubound(vs$())
Debug *pStrArray\s[i]
Next i
Debug ""
Debug "Show strings with procedure"
ShowStrings(*pStrArray)
Debug ""
Debug ""
Debug "Inc(c), Dec(v)"
x1.l = 0
Debug "Before Inc(): " + Str(x1)
Inc(x1)
Debug "After Inc(): " + Str(x1)
Dec(x1): Dec(x1)
Debug "After 2 * Dec(): " + Str(x1)
Debug ""
Debug #LF$ + "Done"