Page 1 sur 2
Macros
Publié : sam. 11/mars/2006 14:35
par Dr. Dri
Quelques macros en vrac ^^
macros "FileSystem"
Code : Tout sélectionner
Macro FileExists(FileName)
(FileSize(FileName) >= 0 And #True)
EndMacro
Macro PathExists(PathName)
(FileSize(PathName) = -2 And #True)
EndMacro
Macro AddFileAttributes(File, Attributes)
SetFileAttributes(File, GetFileAttributes(File) | Attributes)
EndMacro
Macro RemFileAttributes(File, Attributes)
SetFileAttributes(File, GetFileAttributes(File) ! Attributes)
EndMacro
Macro HasFileAttributes(File, Attributes)
(((GetFileAttributes(File) & Attributes) <> 0) Or #False)
EndMacro
macros IsAscii (marche pas avec l'ascii étendu)
Code : Tout sélectionner
Macro IsUpper(c)
((c >= 'A') And (c <= 'Z'))
EndMacro
Macro IsLower(c)
((c >= 'a') And (c <= 'z'))
EndMacro
Macro IsAlpha(c)
(IsUpper(c) Or IsLower(c))
EndMacro
Macro IsDigit(c)
((c >= '0') And (c <= '9'))
EndMacro
Macro IsAlnum(c)
(IsAlpha(c) Or IsDigit(c))
EndMacro
Macro IsXDigit(c)
(IsDigit(c) Or ((c >= 'a') And (c <= 'f')) Or ((c >= 'A') And (c <= 'F')))
EndMacro
Macro IsPunct(c)
((c = '"') Or FindString("!#%&'();<=>?[\]*+,-./:^_{|}~", Chr(c), 1))
EndMacro
Macro IsGraph(c)
(IsAlnum(c) Or IsPunct(c))
EndMacro
Macro IsPrint(c)
((c = ' ') Or IsGraph(c))
EndMacro
Macro IsSpace(c)
((c = ' ') Or (c = #FF) Or (c = #LF) Or (c = #CR) Or (c = #HT) Or (c = #VT))
EndMacro
Macro IsBlank(c)
((c = ' ') Or (c = #TAB))
EndMacro
Macro IsCntrl(c)
((c = #BEL) Or (c = #BS))
EndMacro
Procedure.l IsNumeric(String.s)
Protected Numeric.l, *String.Character
If String
Numeric = #True
*String = @String
While Numeric And *String\c
Numeric = IsDigit(*String\c)
*String + SizeOf(Character)
Wend
EndIf
ProcedureReturn Numeric
EndProcedure
Dri
Publié : sam. 11/mars/2006 14:45
par wolfjeremy
Je comprend pas, sa sert a quoi les macro ?

Publié : sam. 11/mars/2006 17:17
par Lna
Les macros servent à optimiser la vitesse d'exécution du programme

, au détriment de celle de compilation

.
Les macros c'est comme du copier coller avec des paramètres.
Procédure : passage de paramètres par la pile + accès à la procédure + exécution programme + retour procédure
Macro : exécution programme
Rapidité d'exécution programme : Macro plus rapide que procédure
Place occupé dans le programme : Procédure plus courte que macro si employé plus d'une (à plusieurs) fois.
Cela permet aussi de simplifier l'écriture de tout texte qui se répete.
Il devient possible de redéfinir la syntaxe des instructions par la sienne sans changer la rapidité d'exécution du programme.
Beaucoup d'avantages pour nous.
A +
Publié : sam. 11/mars/2006 18:36
par wolfjeremy
Ha ok merci

c'est pas mal !
Publié : lun. 13/mars/2006 16:58
par Dr. Dri
Macros MakeInteger
Fabrique un entier avec deux moitiés et récupère les deux moitiés d'un entier
Code : Tout sélectionner
Macro MakeQuad(HiLong, LoLong)
(HiLong << 32 | LoLong)
EndMacro
Macro HiLong(Quad)
((Quad >> 32) & $FFFFFFFF)
EndMacro
Macro LoLong(Quad)
(Quad & $FFFFFFFF)
EndMacro
Macro MakeLong(HiWord, LoWord)
(HiWord << 16 | LoWord)
EndMacro
Macro HiWord(Long)
((Long >> 16) & $FFFF)
EndMacro
Macro LoWord(Long)
(Long & $FFFF)
EndMacro
Macro MakeWord(HiByte, LoByte)
(HiByte << 8 | LoByte)
EndMacro
Macro HiByte(Word)
((Word >> 8) & $FF)
EndMacro
Macro LoByte(Word)
(Word & $FF)
EndMacro
Macro MakeByte(HiNibble, LoNibble)
(HiNibble << 4 | LoNibble)
EndMacro
Macro HiNibble(Byte)
((Byte >> 4) & $F)
EndMacro
Macro LoNibble(Byte)
(Byte & $F)
EndMacro
Dri
Publié : lun. 13/mars/2006 20:54
par Flype
Pour inverser un LONG ( $22334455 -> $55443322 ) :
Code : Tout sélectionner
Macro RevL(a)
( ((a)>>24) | ((a)<<24) | (((a)&$FF0000)>>8) | (((a)&$FF00)<<8) )
EndMacro
Mais comment ferais-tu pour faire RevQ(), DrDri ?
Année Bissextile :
Code : Tout sélectionner
Macro IsLeapYear(year)
((Not year%400) Or ((year%100) And (Not year%4)))
EndMacro
Un truc qui serait pas mal :
Dans l'IDE Purebasic, il y a dans la barre latérale 'Modèle' ou 'Templates', qui est sauvegardé dans 'templates.prefs'.
Pour ma part, j'ai commencé à me faire aussi une petite collection de fonctions rangées par rubriques et sous-rubriques :
Code : Tout sélectionner
+ Window
+ Style
+ ExStyle
+ Gadget
+ ListIconGadget
+ SplitterGadget
+ Math
+ Angle
+ Surface
+ 2D
+ Primitives
Je n'y ai mis que des macros.
Ca pourrait être sympa de se concocter un 'template.prefs' public
à télécharger facilement ici sur ce forum, et facile à mettre à jour.
Et pour que ce soit réellement intéressant, il faut que l' 'arbre' soit
bien structuré.

Publié : mar. 14/mars/2006 12:23
par Dr. Dri
Comme ceci ^^
(Ce serait même pas mal une collection de macros officielle!)
Code : Tout sélectionner
Macro BSwapW(Word)
(((Word & $00FF) << 8) | ((Word & $FF00) >> 8))
EndMacro
Macro BSwapL(Long)
(((Long&$FF000000)>>24) | ((Long&$FF)<<24) | (((Long)&$FF0000)>>8) | (((Long)&$FF00)<<8) )
EndMacro
Macro BSwapQ(Quad)
(MakeQuad(BSwapL(LoLong(Quad)), BSwapL(HiLong(Quad))))
EndMacro
a.q = $1122334455667788
Debug HexQ(a)
a = BSwapQ(a)
Debug HexQ(a)
Dri ^^
Publié : mar. 14/mars/2006 12:37
par nico
J'ai demandé une rubrique à Fred, il a lu mon message mais je n'ai pas eu de réponse pour l'instant.
Publié : mar. 14/mars/2006 13:47
par Ulix
Dr. Dri a dit :
(Ce serait même pas mal une collection de macros officielle!)
+ 1
Pourquoi ne pas organisé un sondage sur le sujet ?
A +
Publié : ven. 28/avr./2006 20:43
par Dr. Dri
Macros Memory
pour copier et comparer des structures
ca ne duplique/compare pas les chaines de caractère
(y'avait tout un sujet sur une commande "CopyStructure" =)
ca sert juste de raccourci pour avoir un code plus lisible ^^
Code : Tout sélectionner
Macro Copy(Type, Source, Destination)
CopyMemory(Source, Destination, SizeOf(Type#))
EndMacro
Macro Move(Type, Source, Destination)
MoveMemory(Source, Destination, SizeOf(Type#))
EndMacro
Macro Compare(Type, Source1, Source2)
CompareMemory(Source1, Source2, SizeOf(Type#))
EndMacro
Define.LOGBRUSH brush1, brush2
;initialise la structure
With brush1
\lbStyle = #BS_SOLID
\lbColor = #White
EndWith
;copie la structure
Copy(LOGBRUSH, brush1, brush2)
;vérifie que brush1 = brush2
If Compare(LOGBRUSH, brush1, brush2)
;ca correspond, affiche la couleur
Debug Hex(brush2\lbColor)
EndIf
Dri ^^
Publié : ven. 28/avr./2006 21:42
par Flype
sympa cette petites macros, merci.

Publié : ven. 28/avr./2006 23:13
par Backup
je pense qu'au lieu de faire des macros " officiel "
se serai bien que Fred fasse les fonctions equivalente en "ordre" pureBasic
en s"inspirant de vos idées !!
ce serai beucoup plus simple ...
les Macro doivent rester un petit paliatif a certain manque , ou une astuce
TEMPORAIRE
sinon autant donner les moyens au programmeur purebasic, en mettant a disposition les fonction qui manque et que vous soulignez !:D
Publié : dim. 30/avr./2006 20:34
par SPH
Comment on appelle une macro ?
Publié : dim. 30/avr./2006 21:10
par Flype
tu sais que c'est une spécificité PB4.0 ?
Une Macro s'appelle comme une procédure...
je saisi pas trop ta question en fait, ya plein d'exemples au dessus en plus.

Publié : dim. 30/avr./2006 21:14
par SPH
Ok, je suis encore sous PB 3.94 malgré que G DL la v4...