Sehr schönes Beispiel für unlimitierte Bit-Arrays!!! Ich habe vor geraumer Zeit ein ähnliches Beispiel geschrieben, das allerdings nur mit einem Long-Wert zur Speicherung von 32 Bits arbeitet, dafür aber optimiert in Assembler:NicTheQuick hat geschrieben: Für alle, die etwas Speicherplatz sparen wollen und wenn es nur um Einsen oder Nullen geht
Code: Alles auswählen
Procedure ClearFlag(FlagBit.L)
!MOV EAX,[ESP+4]
!BTR DWORD[v_Flags],EAX
EndProcedure
Procedure SetFlag(FlagBit.L)
!MOV EAX,[ESP+4]
!BTS DWORD[v_Flags],EAX
EndProcedure
Procedure GetFlag(FlagBit.L)
!PUSH EBX
!XOR EAX,EAX
!MOV EBX,DWORD[ESP+8]
!BT DWORD[v_Flags],EBX
!JNC $+3
!INC EAX
!POP EBX
ProcedureReturn
EndProcedure
Global Flags.L
i.L
Debug "Test ClearFlag() - alle Flags der Reihe nach löschen"
Flags = $FFFFFFFF
Debug "Flags = " + Hex(Flags)
For i = 0 To 31
ClearFlag(i)
Debug "Flags = " + RSet(Hex(Flags), 8, "0")
Next i
Debug "-----"
Debug "Test SetFlag() - alle Flags der Reihe nach setzen"
Flags = 0
Debug "Flags = " + RSet(Hex(Flags), 8, "0")
For i = 0 To 31
SetFlag(i)
Debug "Flags = " + RSet(Hex(Flags), 8, "0")
Next i
Debug "-----"
Debug "Test GetFlag() - alle Flags der Reihe nach testen"
Flags = $C0000013
Debug "Flags = " + Hex(Flags)
For i = 0 To 31
Debug "Flag " + Str(i) + " = " + Str(GetFlag(i))
Next i
Code: Alles auswählen
Enumeration
#DownloadMayOverwriteFile
#DownloadStripEOL
#EOLCharIsCRLF ; 0 = LF, 1 = CRLF
#RemoveTrailingBlanks
#TransferModeIsASCII ; 0 = Binary, 1 = ASCII
#UploadMayOverwriteFile
#PCCharSetIsASCII ; 0 = ANSI, 1 = ASCII
#DownloadAppendsToFile
#UploadMayOverwriteMember
#UploadAppendsToFile
#UploadAppendsToMember
EndEnumeration
Code: Alles auswählen
If GetFlag(#RemoveTrailingBlanks) = #True
...
End If